从php创建txt文件列表

时间:2016-09-19 07:53:45

标签: php windows text xampp

我在一个文件夹中有一堆图像文件(.jpg),然后我想将它们列为单个文件文本,我使用php(Windows中的xampp)。

这是我浏览器中的列表图像名称(它正在工作):

<?php
ob_start();
$file='F:\images\upload\google\ready_45';
     foreach (glob($file."\*.jpg") as $filenames) {
          echo $filenames."<br />";
     }
?>

这用于创建名为'images_list.txt'的文本文件(不工作):

<?php
ob_start();
$file='F:\images\upload\google\ready_45';
     foreach (glob($file."\*.jpg") as $filenames) {
       $my_file = 'image_list.txt';
       $handle = fopen($my_file, 'w') or die('Cannot open file:  '.$my_file);
       $data = echo $filenames."<br />";
       fwrite($handle, $data);
     }
?>

执行该脚本时,会出现警告消息

” 解析错误:语法错误,第7行的D:\ xampp \ htdocs \ rename_file_php \ try_list_img.php中的意外“回声”(T_ECHO)“

如果第7行,我改变了

       $data = $filenames;

将创建文件'images_list.txt',但只填写文件中的一个图像名称列表。任何人都可以帮助我吗?

抱歉我的英语不好。

4 个答案:

答案 0 :(得分:1)

你想fopen()文件只有一次,所以在循环之外。否则,您会反复覆盖内容。看一下这个修改过的版本:

<?php
$folder = 'F://images/upload/google/ready_45';
$my_file = 'image_list.txt';
$handle = fopen($my_file, 'w') or die("Cannot open file: ". $my_file);
foreach (glob($folder . "/*.jpg") as $filename) {
    $data = $filename . PHP_EOL;
    fwrite($handle, $data);
}
fclose($handle);

当然可以简化这一点。例如,通过简单地将匹配文件名列表与换行符拼写,然后一次性写出结果:

<?php
$folder = 'F://images/upload/google/ready_45';
$data = implode(PHP_EOL, glob($folder . "/*.jpg"));

$my_file = 'image_list.txt';
$handle = fopen($my_file, 'w') or die("Cannot open file: ". $my_file);
fwrite($handle, $data);
fclose($handle);

然而,第一种(基于循环的)方法允许更大的灵活性,例如过滤或转义。

附注:

  • 使用普通斜杠作为文件夹分隔符(/)而不是MS-Windows中原生使用的疯狂反斜杠(\\)将为您省去很多麻烦。 PHP可以在MS-Windows平台上使用。

  • 在大多数情况下,在写入文件时使用换行符而不是html linewrap更有意义。使用PHP_EOL代替硬编码换行符(\r\n)将使您的代码可以移植到使用不同类型换行符的系统(只有MS-Windows使用\r\n)。

  • 我冒昧地修复了一些缩进和代码样式问题。如果程序员松散地同意某些标准以增强代码的可读性,那肯定是有道理的。

答案 1 :(得分:1)

打开文件一次并尝试写入一次数据: -

<?php
ob_start();
$file='F:\images\upload\google\ready_45';
$data = '';
foreach (glob($file."\*.jpg") as $filenames) {
    $data .= $filenames."\n";
}
$my_file = 'image_list.txt';
$handle = fopen($my_file, 'w') or die('Cannot open file:  '.$my_file);  
fwrite($handle, $data);
fclose($handle);
?>

答案 2 :(得分:0)

这就是你所需要的:

// Creates a newline separated list from the array returned by glob()
$files = glob ($folder.'/*.jpg');
$files = implode (PHP_EOL, $files);

∕∕ This is all that is needed to write something to a file.
file_put_contents ($my_file, $files);

fopen()以及所有旧的旧代码,应尽可能避免使用。这种方法不仅更简单,更容易阅读,而且通常也更快。 请注意,您可能希望围绕最后一行包装IF语句,以便处理可能出现的写入错误。

答案 3 :(得分:-1)

以下代码工作正常,我有一个图像文件夹,其中包含一些图像文件,请更改文件夹路径并尝试以下代码

   <?php
    ob_start();
    $file='images';
    foreach (glob($file."\*.jpg") as $filenames) {
    $my_file = 'image_list.txt';
    $handle = fopen($my_file, 'a') or die('Cannot open file:  '.$my_file);
    $data = $filenames."\r\n";
    fwrite($handle, $data);
    }
    ?>