php – 通过exec()将DirectoryIterator的实例传递给另一个脚本无法正常工作

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

$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;
}
点赞