0
<?php
set_time_limit(600);
while (1){
usleep(30000000);
}
?>

上面的 php 程序导致 500 内部服务器错误。问题是,我将时间限制设置为 600 -> 10 分钟。我预计它将运行 10 分钟,每次运行 30 秒,它将运行一个 while 循环 1 次,并将活动保持在 10 分钟。但是,它在 2 分钟内返回 500 内部服务器错误。根本原因是什么/如何解决问题?谢谢

4

2 回答 2

3

我在我自己的基于 Linux 的网络服务器上编写了您的代码。我使用 Linux 服务器而不是 IIS 只是因为我认为它会给我更多的调试信息。你的代码对我来说工作得很好。它不会超时。然后我不得不说 IIS 有一些特定的东西。我会检查事件日志。500 错误应该有一些有趣的东西。要访问事件日志 ( http://msdn.microsoft.com/en-us/library/ms524984(v=vs.90).aspx ):

  • 从“开始”菜单中,单击“运行”。在打开框中,键入eventvwr。单击确定。
  • 事件查看器列在系统工具节点下。

我建议,如果你需要这个程序等待 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
}
?>
于 2013-03-22T08:40:11.857 回答
0

我在 PHP 在安全模式下运行的 LAMP 安装中遇到了类似的usleep问题。

所以我的建议是检查你的 PHP 是否在safe-mode上运行。如果是这种情况,请尝试使用sleep功能(尽管如果您想循环每个 0.001 秒,这将无济于事)。

另请注意,在 PHP 5 之前, usleep无法在 PHP Windows 平台上运行。

我知道这个线程很旧,但我希望这个检查能帮助其他人。

于 2015-06-09T09:49:32.027 回答