Запись в текстовый файл (PHP) - PullRequest
2 голосов
/ 07 декабря 2009

Я знаю, что этот вопрос, вероятно, прост, но я новичок в php и программировании ... Я хочу записать результаты рекурсивного поиска в текстовый файл, а также убедиться, что любой другой выполненный поиск не перезапишет существующие данные, а добавит к ним.

вот мой код:

 <?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"; 
    }
}

?>

Так что вместо того, чтобы повторять результат, я бы предпочел, чтобы он был записан в текстовый файл. Также, если это возможно, отобразите результат и запишите его в текстовый файл. Пожалуйста, дайте мне знать, какой код я могу добавить, чтобы добиться этого, спасибо:)

Ответы [ 7 ]

3 голосов
/ 07 декабря 2009

Попробуйте с:

<?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);
?>

См. Также http://www.php.net/manual/en/function.fwrite.php для получения дополнительной информации о записи в файл.

2 голосов
/ 07 декабря 2009

Я бы предпочел, чтобы в цикле не было операций ввода-вывода:

$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);

Кроме того, я избавился от некоторых запахов кода -> «массив» вместо «Массив», а также «== true» в конце (нет смысла сравнивать логическое значение с true, либо это не так).

Наконец, используйте pathinfo () Для сравнения расширения.

1 голос
/ 07 декабря 2009
file_put_contents($filename,$data);

Применимо к вашему примеру кода

 <?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); 
    }
}
1 голос
/ 07 декабря 2009

Все, что вам нужно, должно быть в следующем:

$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
0 голосов
/ 07 декабря 2009

http://php.net всегда хорошо для такого рода вопросов.

Вот копия «Пример № 1 Простой пример fwrite ()» из документации по функции 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";
}
?>
0 голосов
/ 07 декабря 2009

Вам нужно изменить скрипт с помощью нескольких строк кода.

<?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);
?>

Подробнее см. fopen () . Посмотрите на список возможных режимов для fopen (). Вы можете найти наиболее подходящий для вашей ситуации.

0 голосов
/ 07 декабря 2009

Изменение:

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

с:

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

Это добавит каждую строку совпадения к новой строке в "your_text_file_name.txt".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...