微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP 的 DirectoryIterator 不读取使用 Linux 创建的文件

如何解决PHP 的 DirectoryIterator 不读取使用 Linux 创建的文件

我在使用 PHP 的 DirectoryIterator() 函数时遇到了一个奇怪的问题。我正在从一个目录中读取数据,并且可以查看我使用 Windows(通过 SMB 共享)保存的所有 .txt 文件。但是,如果我使用 Linux(这是 PHP 在其上运行的)创建一个 .txt 文件,它根本不会读取它。没有错误,只是表现得好像它不存在。如果我在 Windows 中打开文件并重新保存而不做任何更改,文件突然可以被读取。

我尝试过使用 PHP 内置的 Touch() 函数、fopen() 和 shell_exec() 并使用 Linux 内置的 touch 命令来创建它,但是这些都没有帮助。我尝试更改文件权限、所有者和组,甚至以 root 身份执行 PHP,只是为了看看它是否可以工作,但没有运气。我还查看了文件的编码,Linux 和 Windows 都使用 UTF8 对它们进行编码,所以不是这样。

有趣的是,如果我将不起作用的文件移出目录,然后将其移回目录中,则它可以工作。所以这让我相信也许不是每个人所说的文件,而是它的编写方式?没有线索。

有人可以帮我集思广益一些想法吗?我不知道为什么 DirectoryIterator() 无法读取 2 个看似相同的文件

我在 Arch Linux 上运行 PHP 8,我正在使用此代码从目录中读取:

$path = "threads/";
$files = new DirectoryIterator($path);
$files_array = array();
                    
while($files->valid()) {
    $key = $files->getMTime();
    $data = $files->getFilename();
    $files_array[$key] = $data;
    $files->next();
}
rsort($files_array);

foreach ($files_array as $fileinfo) {
      echo $fileinfo;
}

以及创建文本文件代码

touch ("../threads/" . $threadNumber . ".txt");

解决方法

嗯,所以我不确定是什么问题,但我认为这与 $files->valid()

有关

它似乎没有将文件读取为有效。该文档只是说“检查当前 DirectoryIterator 位置是否是有效文件”。我最终只是切换到使用 scandir() 并且它现在工作得很好。很奇怪。

如果有人能对此有所了解,那就太好了

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。