11. december 2018 - 14:57Der er
8 kommentarer og 1 løsning
Tjek at sti ikke er del af anden sti
Hejsa
Jeg laver mig en rekursiv funktion, som helst ikke bør gå amok. :D
Så hvordan tjekker man om en given sti er indeholdt i en anden sti?
Lige nu har jeg disse tjeks: if ($src === '/' || $src === $_SERVER['DOCUMENT_ROOT'] || (!is_dir($src))) { // check for errors/misuse throw new InvalidArgumentException("Source path must be a directory"); } if ($dst === '/' || $dst === $_SERVER['DOCUMENT_ROOT'] || (!is_dir($dst))) { // check for errors/misuse throw new InvalidArgumentException("Destination path must be a directory"); } if ($dst === $src) { // check for errors/misuse throw new InvalidArgumentException("Destination and Source paths must be different"); }
Hvis sti1 = mappe2 og sti2 = mappe4, så er sti2 indeholdt i sti1, da stien skal køres igennem i alle undermapper - beklager, at det nok ikke var helt klart fra starten af.
Handler det så ikke bare om, at du laver en streng med den fulde sti (vha realpath) til "sti1" og en streng med den fulde sti til "sti2" -- og du så bagefter tester for, om "sti2" starter med det samme som "sti1"? (strpos === 0)
Ok, så er du jo nok nødt til at indføre et check på om mapperne eksisterer først. Det kan du gøre enten med realpath selv, eller med file_exists. Nu er jeg ikke lige sikker på, om det både kan være $basepath og @pathToCheck -- men hvad med fx:
if (realpath($basepath) && realpath($pathToCheck)) { if (strpos(realpath($basepath), realpath($pathToCheck)) === 0) { echo "included<br>"; } else { echo "not included<br>"; } } else { echo "At least one of the paths does not exist<br>"; }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.