我在一个文件夹中有一堆图像文件(.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',但只填写文件中的一个图像名称列表。任何人都可以帮助我吗?
抱歉我的英语不好。
答案 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);
}
?>