PHP file_exists 无效(在同一浏览器中多次执行)

PHP file_exists not working (multiple execution in same browser)

我试图理解为什么这个脚本不起作用,当我在同一个浏览器或浏览器选项卡中同时执行脚本时,第二个脚本看不到创建的文件“/tmp/monkey.tmp”(php7.4-fpm + nginx, 默认配置, opcache 启用)

只要我使用了两种不同的浏览器,它就会像预期的那样工作,如果我同时执行相同的 script/URL 和一个带有随机数据的脚本,例如 URL?_=monkey,它的工作方式就像预期,问题是相同的 URL 在同一个浏览器中,我不明白为什么

$tmpfile = '/tmp/monkey.tmp';
                
clearstatcache();                                                                             
if(file_exists($tmpfile))
{
    die('file exist');
}
else
{
    file_put_contents($tmpfile, 'blabla');     
}

sleep(20);

exit;

Php 在使用浏览器进行调试时可能会很棘手,因为它们很可能会缓存 php 页面,但这不是想要的行为。

我猜是浏览器或网络服务器缓存了站点,这就是您看不到更改的原因。 但是在另一个没有缓存的浏览器上。

这也解释了为什么当 cahnign url 的某些部分时,您会在同一浏览器中看到更改,因为浏览器将其视为另一个页面并且无法使用它的缓存并转到服务器。

要调试你可以尝试以下方法:

  • 运行 在一个浏览器上编写脚本,看看文件是否是手动创建的
  • 如果是这样,刷新后你仍然没有得到文件存在 -> 浏览器缓存

尝试安装插件清除缓存。

要停止这种情况,您可以尝试在浏览器开发工具中禁用此站点的缓存。

或在 html 中设置 matadata 缓存时间以从不缓存站点。

或者运行通过Js请求然后打印结果到页面。

如果缓存清除后您仍然看不到该页面存在。 可能是网络服务器缓存了响应。

那不太可能...