2009-12-07 17 views
2

Je sais que cette question est probablement straightfoward mais je suis nouveau à PHP et la programmation ... Je veux écrire les résultats d'une recherche récursive dans un fichier texte, et en veillant également à ce que toute autre recherche effectuée ne remplacera pas les données existantes, mais ajoutera à celles-ci.Écrire dans un fichier texte (PHP)

voici mon code:

<?php 

$it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); 
$display = Array ('jpeg', 'jpg', 'tif', 'tiff', 'bmp', 'shp', 'gif', 'png'); 
foreach(new RecursiveIteratorIterator($it) as $file) 
{ 
    if (In_Array (SubStr ($file, StrrPos ($file, '.') + 1), $display) == true) 
    { 
     echo $file . "<br/> \n"; 
    } 
} 

?> 

Ainsi, au lieu de faire écho au résultat, je préférerais qu'on écrive dans un fichier texte. En outre, si cela est possible, renvoyez le résultat et écrivez-le dans un fichier texte. plz laissez-moi savoir ce que je peux ajouter un code pour y parvenir grâce :)

Répondre

3

Essayez avec:

<?php 

$it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); 
$display = Array ('jpeg', 'jpg', 'tif', 'tiff', 'bmp', 'shp', 'gif', 'png'); 

$fp = fopen("output.txt", "a"); 

foreach(new RecursiveIteratorIterator($it) as $file) 
{ 
    if (In_Array (SubStr ($file, StrrPos ($file, '.') + 1), $display) == true) 
    { 
     //echo $file . "<br/> \n"; 
     fwrite($fp, $file."\n"); 
    } 
} 

fclose($fp); 
?> 

Voir aussi http://www.php.net/manual/en/function.fwrite.php pour plus d'informations sur l'écriture dans le fichier.

1

Tout ce que vous avez besoin devrait être dans les domaines suivants:

$myFile = "file.txt"; // name of the file 
$fh = fopen($myFile,'a') or die("Can't open file"); // opens the file in "append" mode 
fwrite($fh,$file); // write to the end of the file 
fclose($fh); // close the file 
1
file_put_contents($filename,$data); 

appliquée à votre exemple de code

<?php 

$it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); 
$display = Array ('jpeg', 'jpg', 'tif', 'tiff', 'bmp', 'shp', 'gif', 'png'); 
foreach(new RecursiveIteratorIterator($it) as $file) 
{ 
    if (In_Array (SubStr ($file, StrrPos ($file, '.') + 1), $display) == true) 
    { 
     file_put_contents('output.txt',$file . "\n",FILE_APPEND); 
    } 
} 
0

Change:

echo $file . "<br/> \n"; 

avec:

file_put_contents('your_text_file_name.txt', $file."\n", FILE_APPEND); 

Ceci ajoutera chaque ligne de correspondance à une nouvelle ligne dans « your_text_file_name .SMS".

+1

Cela fera ouvrir/fermer pour le fichier dans la boucle, ce qui n'est pas une bonne idée. Il est plus efficace d'ouvrir le fichier avant la boucle et de le fermer après. –

0

Vous devez modifier votre script avec quelques lignes de code supplémentaires.

<?php 

$fhandler = fopen('file.txt', 'a'); // Flag 'a' prevents your script from deleting 
            // previous data from file 

$it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); 
$display = Array ('jpeg', 'jpg', 'tif', 'tiff', 'bmp', 'shp', 'gif', 'png'); 
foreach(new RecursiveIteratorIterator($it) as $file) 
{ 
    if (In_Array (SubStr ($file, StrrPos ($file, '.') + 1), $display) == true) 
    { 
     fwrite($fhandler, $file); // Writing fileName to the file 
     echo $file . "<br/> \n"; 
    } 
} 

fclose($fhandler); 
?> 

Voir la fonction fopen() pour plus de détails. Jetez un oeil sur la liste des modes possibles pour fopen(). Vous pouvez trouver le plus approprié pour votre situation.

0

http://php.net est toujours bon pour ce genre de questions.

Voici une copie de « Exemple # 1 Un fwrite simple() par exemple » de la documentation sur la fonction fwrite()

<?php 
$filename = 'test.txt'; 
$somecontent = "Add this to the file\n"; 

// Let's make sure the file exists and is writable first. 
if (is_writable($filename)) { 

    // In our example we're opening $filename in append mode. 
    // The file pointer is at the bottom of the file hence 
    // that's where $somecontent will go when we fwrite() it. 
    if (!$handle = fopen($filename, 'a')) { 
     echo "Cannot open file ($filename)"; 
     exit; 
    } 

    // Write $somecontent to our opened file. 
    if (fwrite($handle, $somecontent) === FALSE) { 
     echo "Cannot write to file ($filename)"; 
     exit; 
    } 

    echo "Success, wrote ($somecontent) to file ($filename)"; 

    fclose($handle); 

} else { 
    echo "The file $filename is not writable"; 
} 
?> 
2

je réellement préfère ne pas avoir des opérations d'entrées-sorties dans une boucle:

$display = array ('jpeg', 'jpg', 'tif', 'tiff', 'bmp', 'shp', 'gif', 'png'); 

$it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); 

$output = null; 

foreach(new RecursiveIteratorIterator($it) as $file) 
{ 
    if (in_array (pathinfo($file, PATHINFO_EXTENSION), $display)) 
    { 
     echo $file . "<br/> \n"; 
     $output .= $file."\n"; 
    }  
} 

file_put_contents("output.txt", $output, FILE_APPEND); 

aussi, je me suis débarrassé de quelques-uns du code odeurs -> « tableau » au lieu de « Array », ainsi que « == true » à la fin (il n'y a pas de point de comparaison d'un booléen à true, soit c'est ou ce n'est pas).

Enfin, utilisez pathinfo() Pour comparer l'extension.