Avatar billede proviben Novice
31. december 2004 - 12:33 Der er 14 kommentarer og
1 løsning

Gennemsøge mappe

Hvordan kan alle *.htm , filer i en bestemt mappe fx: /test gennemsøges og rettes i?

<?php
$str = join('', file('test.htm'));
$str = str_replace('<XXX>', '<YYY>', $str);
$fp = fopen('test.htm', 'wb');
ftruncate($fp, 0);
fwrite($fp, $str);
fclose($fp);
?>
Avatar billede coderdk Praktikant
31. december 2004 - 15:05 #1
<?php

  $d = opendir( "mappe" );
  while ( $file = readdir( $d ) )
  {
    if ( is_file( $file ) && substr( $file, -4 ) == '.htm' )
    {
        $str = file_get_contents( $file );
        $str = str_replace('<XXX>', '<YYY>', $str);
        $fp = fopen( $file, 'w' );
        fwrite( $fp, $str );
        fclose( $fp );
    }
  }
  closedir( $d );

?>
Avatar billede proviben Novice
31. december 2004 - 15:28 #2
Får følgende fejl: Fatal error: Call to undefined function: file_get_contents() in /var/www/xxx/html/test/udskifttextmappe.php on line 8
Avatar billede coderdk Praktikant
31. december 2004 - 15:29 #3
Ok, det var en gammel php så, erstat:

$str = file_get_contents( $file );

med:

$str = implode( '', file( $file ) );
Avatar billede proviben Novice
31. december 2004 - 15:38 #4
Nu virker det næsten, skriver dog kun til samme dir, som scriptet ligger i.
Avatar billede coderdk Praktikant
31. december 2004 - 15:40 #5
Du skal bare ændre "mappe" til den mappe du vil gøre det i...
Avatar billede proviben Novice
31. december 2004 - 15:45 #6
Har oprettet dir: "mappe" ( test/mappe/)
Avatar billede coderdk Praktikant
31. december 2004 - 15:47 #7
$d = opendir( "mappe" );

ædres vel så til:

$d = opendir( "./test/mappe" );

?
Avatar billede coderdk Praktikant
31. december 2004 - 15:47 #8
Eller hvor den nu ligger :)
Avatar billede proviben Novice
31. december 2004 - 15:58 #9
$d = opendir( "./test/mappe" ); ==>

Warning: OpenDir: No such file or directory (errno 2) in /var/www/xxx/html/test/udskifttextmappe.php on line 3

Warning: Supplied argument is not a valid Directory resource in /var/www/xxx/html/test/udskifttextmappe.php on line 4

Warning: Supplied argument is not a valid Directory resource in /var/www/xxx/html/test/udskifttextmappe.php on line 15
Avatar billede coderdk Praktikant
31. december 2004 - 16:00 #10
Ok, hvis scriptet ligger i test og du vil søge i "mappe" under den, skal der blot stå:

  $d = opendir( "./mappe" );

eller

  $d = opendir( "mappe" );

Den søger så kun i den mappe...
Avatar billede coderdk Praktikant
31. december 2004 - 16:01 #11
Aj vent! Der mangler jo noget! Prøv med:

<?php

  $mappe = 'mappe';

  $d = opendir( $mappe );
  while ( $file = readdir( $d ) )
  {
    if ( is_file( "$mappe/$file" ) && substr( $file, -4 ) == '.htm' )
    {
        $str = implode( '', file( "$mappe/$file" ) );
        $str = str_replace('<XXX>', '<YYY>', $str);
        $fp = fopen( $file, 'w' );
        fwrite( $fp, $str );
        fclose( $fp );
    }
  }
  closedir( $d );

?>
Avatar billede proviben Novice
31. december 2004 - 16:16 #12
Scriptet ligger i dir'et test, følgende linier -

$d = opendir( "mappe" );  ==> skriver faktisk, til alle htm-filer i dir'et test.

$d = opendir( "./mappe" ); ==> ligeledes samme resultat.

Faktisk lidt underligt!
Avatar billede coderdk Praktikant
31. december 2004 - 16:46 #13
$fp = fopen( $file, 'w' );

bør også rettes til:

$fp = fopen( "$mappe/$file", 'w' );
Avatar billede coderdk Praktikant
31. december 2004 - 16:46 #14
Forstår jeg ikke lige, hvordan finder den overhovedet de filer? ;P
Avatar billede proviben Novice
31. december 2004 - 17:06 #15
Coderdk, nu virker det, - mange tak for hjælpen. Godt Nytår!
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