Avatar billede pissed_squirrel Nybegynder
25. maj 2004 - 16:46 Der er 15 kommentarer og
1 løsning

Tjekke alle .php filer i mappen

Hvis jeg nu skal have en php fil til at tjekke alle php filer i en mappe for en bestemt linie, hvordan ville det så skulle gøres smartest og nemmest?

linien der skal tjekkes for er

$menu_name

der kan stå andet bag efter $menu_name

Nogle der kan hjælpe??
Avatar billede dennismp Nybegynder
25. maj 2004 - 16:52 #1
1) Ren PHP. Åbn filerne een efter een og tjek dem

2) Unix system: kald kommandoen (hvis det er muligt) grep og lad den gøre arbejdet for dig.
Avatar billede dennismp Nybegynder
25. maj 2004 - 16:54 #2
1) Er pænest sådan rent kodemæssigt - du er ikke afhængig af eksterne programmer.
2) Er sandsynligvis lidt hurtigere. Ikke alle webhoteller tillader at man kalder shell kommandoer..

.. så hvad er smartest syntes du? Jeg vil nok foretrække løsning 1, selvom det kræver mere kode.
Avatar billede pissed_squirrel Nybegynder
25. maj 2004 - 20:08 #3
Hvordan ville en mulig løsning så se ud hvis man skal bruge løsning 1?
Avatar billede pissed_squirrel Nybegynder
25. maj 2004 - 20:59 #4
<?php

chdir(".");
if ($dir = dir(".")){
    $dir -> rewind();
    while ($file = $dir->read())
    {
        if($file == "." || $file == ".." || $file == "index.php" || $file == "config.php"){
            continue;
        }
        if(!is_dir($file)){
            $files[] = $file;
        }
        $dir -> close;
        if(count($files)>0){
            sort($files);
            reset($files);
        }
        for ($i=0; $i<count($files); $i++){
           
            //Kunne man åbne filerne her én for én?
           
        }
    }
}else{
    echo "couldn't open dir";
}

?>

Er jeg på rette vej?
Avatar billede dennismp Nybegynder
26. maj 2004 - 00:06 #5
chdir('.') gør ikek rigtig noget, det kan du snildt undvære..

Men ellers ser det ud som en fin løsning. Jeg ville nok have åbnet filerne med det samme istedet for at smide dem i $files[] og så arbejde med dem senere.

Du skal nok også have flyttet din for-løkke ud af while()'en. Men jeg tror det bare er en kikser :-)
Avatar billede pissed_squirrel Nybegynder
26. maj 2004 - 17:16 #6
<?php

if ($dir = dir(".")){
    $dir -> rewind();
    while ($file = $dir->read())
    {
        if($file == "." || $file == ".." || $file == "index.php" || $file == "config.php"){
            continue;
        }
        if(!is_dir($file)){
            $files[] = $file;
        }
        $dir -> close;
        if(count($files)>0){
            sort($files);
            reset($files);
        }

    }

    for ($i=0; $i<count($files); $i++){
           
        //Kunne man åbne filerne her én for én?
           
        $handle = fopen($files[$i], "rb");
           
        $contents = fread($handle, filesize($files[$i]));
           
        fclose($handle);
           
        echo $contents;
           
    }

}else{
    echo "couldn't open dir";
}

?>

Hvordan ville du så tjekke for linien i filerne??
Avatar billede sukos Juniormester
26. maj 2004 - 17:40 #7
hmm, måske

$fejl = "";

for ($i=0; $i<count($files); $i++){
$handle = file_get_contents($file[$i]);
$pos = strpos(strtolower($handle), "\$menu_name");

    if(false === $pos) {
$fejl .= $file[$i];
continue;
    }
}

echo count($fejl);


?????
Avatar billede pissed_squirrel Nybegynder
26. maj 2004 - 17:44 #8
Jeg kan desværre ikke bruge "file_get_contents"

Er der en anden måde man kan lave dette på?
Avatar billede sukos Juniormester
26. maj 2004 - 18:04 #9
Hvorfor ikke det?
Avatar billede dennismp Nybegynder
26. maj 2004 - 22:23 #10
alternativt til file_get_contents: join('',file($file[$i]));

eller

http://www.ragnarokonline.de/snippets/file_get_contents.phps
Avatar billede pissed_squirrel Nybegynder
27. maj 2004 - 11:02 #11
Jeg kan ikke bruge "file_get_contents" da det er i PHP 4 >= 4.3.0, PHP 5


og jeg har kun adgang til version 4.2.2
Avatar billede dennismp Nybegynder
27. maj 2004 - 12:27 #12
Du kan snildt bruge fopen/fread/fclose eller de to førnævnte. Bare du får teksten ind i en streng.
Avatar billede pissed_squirrel Nybegynder
29. maj 2004 - 19:55 #13
Hvordan ville et muligt eksempel se ud hvor der bliver tjekket for linien?
Avatar billede dennismp Nybegynder
29. maj 2004 - 20:30 #14
$res[] = array();
for($i=0;$i<count($files);$++) {
  $content = file($file[$i]);
  foreach($l=0;$l<count($content);$l++) {
    $pos = strpos($content[$l],'$menu_name');
    if( $pos !== false ) {
      $res[] = substr($content[$l],$pos+10);
    }
  }
}

Så har du resultatet i $res. Det er et array - hvis der er flere filer/linjer med en $menu_name linje.
Avatar billede pissed_squirrel Nybegynder
20. oktober 2004 - 15:50 #15
Jeg har opgivet at bruge dette her, da det gav mig en masse problemer

Hvis der er nogle der vil have point så lav et svar!
Avatar billede pissed_squirrel Nybegynder
02. november 2005 - 18:37 #16
Lukket da ingen ville have point
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester