【问题标题】:create txt file list from php从 php 创建 txt 文件列表
【发布时间】:2017-01-26 20:06:12
【问题描述】:

我在一个文件夹中有一堆图像文件(.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);
     }
?>

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

" 解析错误:语法错误,D:\xampp\htdocs\rename_file_php\try_list_img.php 第 7 行中的意外 'echo' (T_ECHO)"

如果第7行,我改变

       $data = $filenames;

将创建文件“images_list.txt”,但仅填写文件中的一个图像名称列表。谁能帮帮我?

对不起,我的英语不好。

【问题讨论】:

    标签: php windows text xampp


    【解决方案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);
    ?>
    

    【讨论】:

    • @Ben... 很高兴为您提供帮助。:)
    【解决方案2】:

    你只想 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 换行更有意义。使用 PHP_EOL 而不是硬编码的换行符 (\r\n) 将使您的代码可移植到使用不同类型换行符的系统(只有 MS-Windows 使用 \r\n)。

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

    【讨论】:

    • 谢谢,我用\n 新建一行
    • 当然,如果您要创建专门用于 unixoid 环境(如 Linux)的文件,那很好。不过,您可能希望为此定义一个常量。
    【解决方案3】:

    这就是你所需要的:

    // 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 语句,以处理可能出现的任何写入错误。

    【讨论】:

    • 只适用于新的php版本还是可以在所有版本中使用?我的 xampp 版本是 1.7.3
    • 如果您查看file_put_contents() 的 PHP 手册,您会发现它需要 PHP 5 或更高版本。我不确切知道该 xampp 版本中的哪个版本,但除非它有大约十年的历史,否则它应该有一个 5.x 版本的 PHP。 php.net/file_put_contents
    【解决方案4】:

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

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

    【讨论】:

    • 这可能有效,但效率极低...您仍然在每次循环迭代中一次又一次地打开文件。此外,终止 php 标记 (?&gt;) 通常被认为是不好的样式,因为它可能会导致巨大的问题并且根本不需要。
    猜你喜欢
    • 2013-03-10
    • 2016-05-14
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多