【问题标题】:file_exists() loop doesn't detect when file is added to directoryfile_exists() 循环未检测到文件何时添加到目录
【发布时间】:2016-02-12 01:21:12
【问题描述】:

我目前有一个循环 30 秒的脚本。本质上,我希望设置一个临时的“监视文件夹”,当文件存在时会触发一个命令。当我运行这个 PHP 时,当我在脚本运行的 30 秒内成功地将 video_renders/something.mp4 的文件名(通过 FTP)更改为 video_renders/video.mp4 时,它不会检测到该文件。

这是我的 PHP:

<?php

$endtime = time() + 30;

while (time() < $endtime ) {

$filename = "video_renders/video.mp4";

if (file_exists($filename)) {
    //do something
     echo "Success";
 }

}

?>

这里有什么我遗漏的吗?为什么我的循环 PHP 脚本不拾取添加到 /video_renders 目录的文件?

谢谢!

【问题讨论】:

  • 你正在尝试一个相对路径,你需要一个绝对路径 - if( file_exists( getcwd() . $filename ) ) { ....
  • 这似乎没有帮助。不过谢谢!

标签: php while-loop file-exists


【解决方案1】:

这将是一个更好的方法:

while( !file_exists($pathToFile) )
{
    sleep(1);
}

它会让你的脚本每秒进入睡眠状态,然后检查文件。您可以将其更改为仅运行 30 次。

【讨论】:

  • 刚刚尝试过——仍然没有运气。我注意到的一件事是,脚本不仅没有注意到文件名的变化,而且我需要完全重新加载浏览器以再次测试脚本(使用现有的文件名)。看起来肯定是一个缓存问题,但clearstatcache() 似乎没有解决问题。
【解决方案2】:

实际上,PHP 不会缓存有关不存在文件的信息。

因此,如果您在不存在的文件上调用 file_exists(),它将返回 FALSE,直到您创建该文件。如果您创建该文件,即使您随后删除该文件,它也会返回TRUE。但是unlink() 会自动清除缓存。

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 2021-01-19
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2018-09-07
    • 1970-01-01
    相关资源
    最近更新 更多