【问题标题】:Very weird PHP file_exists issue非常奇怪的 PHP file_exists 问题
【发布时间】:2013-02-07 09:28:25
【问题描述】:

我在使用 file_exists 函数时遇到了一个非常奇怪的情况。托管公司表示他们的 php 配置为 CGI 模式而不是 PHP 模式。下面是代码。在加载包含代码的页面时,它会在 50 秒左右的时间内动态检查数据文件夹中名为 test.txt 的文件是否存在。如果找到文件,则显示“文件存在”并退出 while 循环。如果在 50 秒内没有找到文件,则显示“文件不存在”并在页面加载完成后中断循环。

奇怪的事情1:它没有按预期工作,只有在文件存在时第一次加载页面时才能找到文件。即使在我刷新页面时删除了 test.txt 后,它也会继续显示“文件存在”。如果 test.txt 根本不在数据文件夹中,即使我将文件夹中的 test.txt 移回后,它也会显示“文件不存在”。

奇怪的事情 2:如果我放一个大于 170K 的更大文件,它看起来运行良好,但小文件却不行,尤其是在 40 字节以下。我尝试了许多不同的方法来检查文件是否存在,包括绝对路径,仍然没有运气。

感谢您提供任何线索!

正在加载页面...

$counter= 1;

while ($counter++) {

    sleep(5);

    if (file_exists("data/test.txt")) {
    echo "File exists";
    break;
    }

    if ($counter>10){
    echo "File does not exist";
    break;
    }

}

【问题讨论】:

    标签: php cgi file-exists


    【解决方案1】:

    PHP 缓存结果。在使用 file_exists() 之前使用clearstatcache();

    【讨论】:

    • 还是不行,会不会是CGI模式的问题?任何其他方式进行检查?谢谢!
    【解决方案2】:

    由于您在循环中多次检查此文件是否存在,因此您可能需要在此处考虑缓存问题。

    取自the documentationfile_Exists() -

    注意:这个函数的结果是缓存的。详情请见clearstatcache()

    也许你应该尝试将你的脚本修改成这样 -

    while ($counter++) {
      sleep(5);
      clearstatcache(); 
      if (file_exists("data/test.txt")) {
        echo "File exists";
        break;
      }
      ...
    }
    

    【讨论】:

    • 在加入 clearstatcache() 后会好一些,但还是不行。我首先加载页面,当页面加载时,我将test.txt放在数据文件夹中,50秒后没有找到文件。如果刷新几次,它找到了文件。该代码与其他托管服务运行良好,可能是 CGI 模式问题吗?
    • @use - 我不太熟悉这些差异,所以我不能肯定地说...但是如果唯一改变的是托管,唯一的区别是 CGI 模式,这可能是问题所在......
    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 2018-05-20
    • 2011-05-17
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    相关资源
    最近更新 更多