<?php
set_time_limit(600);
while (1){
usleep(30000000);
}
?>
上面的php程序导致500内部服务器错误。问题是,我将时间限制设置为600 -> 10分钟。我预计它将运行10分钟,每次30秒,它将运行一次while循环,并将活动保持在10分钟。但是,它在大约2分钟后返回500个内部服务器错误。问题的根源是什么/如何解决问题?由于
我在自己的基于linux的web服务器上运行了您的代码。我使用Linux服务器而不是IIS,只是因为我认为它可以提供更多的调试信息。你的代码对我来说很好。它不会超时。然后我不得不说IIS有一些特定的东西。我会检查事件日志。500错误应该有一些有趣的东西。要访问事件日志(http://msdn.microsoft.com/en-us/library/ms524984(v=vs.90).aspx):
)- 在"开始"菜单中单击"运行"。在"打开"框中输入
eventvwr
。单击OK。 - 事件查看器列在系统工具节点下。
我建议,如果你需要这个程序等待10分钟,要么进入你的PHP.ini文件(如果这是问题),并通过大量提高max_execution_time,或者作为替代,让页面停留10秒,然后用header()
重新加载相同的页面。这种方法的优点是,您不会通过旋转和锁定所有内容来消耗额外的CPU周期。相反,您只是重新查询服务器并使用持久cookie:
<?php
echo "Time Slept: ".$_COOKIE['total_time_slept']; //persistent variable you can use to measure how much time has elapsed
if($_COOKIE['total_time_slept'] < 1000) //if less than 10 minutes
{
$page = $_SERVER['PHP_SELF'];
$sec = 10;
setcookie('total_time_slept', $_COOKIE['total_time_slept']+$sec); //append that time to the counter
header("Refresh: $sec; url=$page"); //reload this page every 10 seconds
}
?>
我在一个LAMP安装中遇到了类似的问题 ussleep , PHP在安全模式下运行。
所以我的建议是检查你的PHP是否运行在安全模式。如果是这种情况,请尝试使用sleep函数(尽管如果您想每个0.001s循环一次,它将没有帮助)。
还要注意 ussleep 在PHP Windows平台上直到PHP 5才能工作。
我知道这个帖子是旧的,但我希望这个检查能帮助其他人。