有没有办法让 PHP 等到函数返回后再继续?
这是我的代码:
<?php
set_time_limit(0);
function waitforchange($nof) {
$lfilemod=filemtime($nof);
while(filemtime($nof) == $lfilemod) {
clearstatcache();
usleep(10000);
}
}
waitforchange('./blahblah.txt')
sleep(5);
echo 'done';
?>
应该等到blahblah.txt
更改后,再等待五秒钟,然后打印出“done”,但是,无论文件是否实际更改,它都会在五秒后打印出“done”。
PHP 是单线程的,这意味着它在继续之前一次执行一条指令。换句话说,PHP 自然会等待函数完成执行,然后再继续执行下一条语句。
我尝试在我的机器上执行您的代码,它正确地等待,直到我修改文件,然后才完成功能并显示消息。
我什至看不到你的代码中有任何可能失败的地方。自创建以来$lfilemod
以与检查中相同的方式执行while
循环,该循环的条件将返回TRUE
即使文件有问题也执行(filemtime
会回来FALSE
对于这两个错误,因此条件将读取(FALSE == FALSE
,这显然是TRUE
).
您的 PHP 脚本在运行该循环之前是否修改了该文件?如果是,则返回的初始值filemtime
可能是脚本最初启动时的修改时间。当你跑步时clearstatcache
在循环中,您将获得由脚本中前面的更改引起的新修改时间。
我的建议:
尝试跑步clearstatcache
在设置值之前$lfilemod
这样您就知道该值是干净的,并且您正在将循环中检查的内容进行逐一比较。
确保该文件确实没有被修改。尝试在代码的开头和结尾放置几行调试行,打印出文件的最后修改时间,然后自己比较两者,看看 PHP 是否报告看到修改时间发生变化。
这应该是不言而喻的,但您应该确保 PHP 配置为在开发过程中显示所有错误,以便您立即了解何时以及如何出错。确保display_errors
设置已打开On
在你的php.ini
文件(或使用ini_set()
如果您无法修改文件本身),并且您的error_reporting()
被设定为E_ALL | E_STRICT
对于 PHP E_ALL对于 PHP 5.4(E_STRICT
是其一部分E_ALL
从该版本开始)。更好的方法是将错误报告设置为-1
无论 PHP 版本如何,它都会有效地打开所有错误报告。
尝试通过这些修改再次运行您的代码。如果您看到该文件确实被修改,那么您就知道您的代码可以工作。如果文件isn't正在修改中,您至少应该有一个可以查找的错误,或者在这里询问我们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)