当执行一个简单的PHP循环程序时,会出现500个内部服务器错误


500 internal server error when execute a simple PHP loop program?

<?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才能工作。

我知道这个帖子是旧的,但我希望这个检查能帮助其他人。