php - 通过 exec() 将 DirectoryIterator 的实例传递给另一个脚本未按预期工作

标签 php file iterator exec

我有一个页面正在为目录中的每个文件执行脚本:

$dir = new DirectoryIterator('/var/www/OCR3/upload_pending/');

foreach ($dir as $fileinfo) {
    exec("php manual_doc_proccessor.php $fileinfo");
    echo "php manual_doc_proccessor.php $fileinfo" . " Sent for proccessing <BR>";
}

转到此脚本:

$fileinfo = $argv[1];
if (!$fileinfo->isDot()) {
    print_r($fileinfo->getFilename()) . PHP_EOL ;
    $fileName = $fileinfo->getFilename();
    echo $fileName;
}

但是当脚本运行时我得到错误:

Call to a member function isDot() on a non-object

我希望脚本的每次迭代都能回显文件名,但我却收到了错误。

我错过了什么,我怎样才能让它正确处理文件?

最佳答案

由于您将字符串中的 $fileinfo 传递给其他脚本,因此它不再是 DirectoryIterator 的实例。 ,因为魔术方法__toString()被调用,将其转换为文件名本身。所以你不需要也不能使用 isDot()getFilename(),只需做一个简单的 if 语句,如下所示:

$fileinfo = $argv[1];
if ($fileinfo != "." && $fileinfo != "..") {
    print_r($fileinfo) . PHP_EOL ;
    $fileName = $fileinfo;
    echo $fileName;
}

关于php - 通过 exec() 将 DirectoryIterator 的实例传递给另一个脚本未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30079338/

相关文章:

file - 根据文件名将多个文件从一个文件夹移动到另一个文件夹 - Camel

java - Java 是否在每次调用 iterator() 时都创建一个新实例?

php - 当无法识别 mysql(phpmyadmin) 中的 to_date 函数时,如何修复错误?

php - Inner Join WITH 和 inner join ON 有什么区别?

java - 在 JAVA 中向文件写入/读取可变字节编码字符串表示形式

c - 查找字符串中整数的长度

php - 编辑表单时填充 zend 多选框

php - 通过将 PHP 对象存储在 session 变量中来使它们保持事件状态是常见的做法吗?

iterator - 有条件地从 flat_map 返回空迭代器

PHP 使用 SPL 迭代器递归删除空目录