<?php
set_time_limit(600);
while (1){
usleep(30000000);
}
?>
上面的 php 程序导致 500 内部服务器错误。问题是,我将时间限制设置为 600 -> 10 分钟。我预计它将运行 10 分钟,每次运行 30 秒,它将运行一个 while 循环 1 次,并将活动保持在 10 分钟。但是,它在 2 分钟内返回 500 内部服务器错误。根本原因是什么/如何解决问题?谢谢
<?php
set_time_limit(600);
while (1){
usleep(30000000);
}
?>
上面的 php 程序导致 500 内部服务器错误。问题是,我将时间限制设置为 600 -> 10 分钟。我预计它将运行 10 分钟,每次运行 30 秒,它将运行一个 while 循环 1 次,并将活动保持在 10 分钟。但是,它在 2 分钟内返回 500 内部服务器错误。根本原因是什么/如何解决问题?谢谢
我在我自己的基于 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
}
?>
我在 PHP 在安全模式下运行的 LAMP 安装中遇到了类似的usleep问题。
所以我的建议是检查你的 PHP 是否在safe-mode上运行。如果是这种情况,请尝试使用sleep功能(尽管如果您想循环每个 0.001 秒,这将无济于事)。
另请注意,在 PHP 5 之前, usleep无法在 PHP Windows 平台上运行。
我知道这个线程很旧,但我希望这个检查能帮助其他人。