PHP max_execution_time 没有超时

标签 php apache

如果 sleep 被计入超时或类似问题,这不是常见问题之一。好的,这就是问题所在:我已经将 PHP 的 max_execution_time 设置为 15 秒,理想情况下这应该在超过设定限制时超时,但事实并非如此。更改 php.ini 文件后 Apache 已重新启动,并且 ini_get('max_execution_time') 一切正常。有时脚本会运行长达 200 秒,这太疯狂了。我没有任何数据库通信。所有脚本所做的就是在 unix 文件系统上寻找文件,在某些情况下重定向到另一个 JSP 页面。脚本中没有 sleep()。

我这样计算 PHP 脚本的总执行时间:

在我设置的脚本开头:

$_mtime = microtime();  
$_mtime = explode(" ",$_mtime);
$_mtime = $_mtime[1] + $_mtime[0]; 
$_gStartTime = $_mtime;

结束时间($_gEndTime)的计算方式类似。
总时间是在我注册的关闭函数中计算的:

register_shutdown_function('shutdown');
.............
function shutdown()
{
   ..............
   ..............
   $_total_time = $_gEndTime - $_gStartTime;
   ..............
   switch (connection_status ())
    {
    case CONNECTION_NORMAL:
      ....
      break;
      ....
    case CONNECTION_TIMEOUT:
      ....
      break;
      ......
    }
} 

注意:我不能使用 $_SERVER['REQUEST_TIME'] 因为我的 PHP 版本不兼容。这很糟糕 - 我知道。

1) 好吧,我的第一个问题显然是为什么我的 PHP 脚本即使在设置的超时限制之后仍在执行?
2) Apache 有 300 秒的超时指令,但 PHP 二进制文件不读取 Apache 配置,这应该不是问题。
3) 是否有可能是某些东西使 PHP 进入休眠模式?
4)我是否以错误的方式计算了执行时间?有更好的方法吗?


我在这一点上被难住了。 PHP 向导 - 请帮助。

编辑: 我刚刚发现流操作不是一些日志的原因。即使没有执行流操作,延迟在脚本中也是随机的。上下文切换可能只是原因。但我仍然没有一个明确的答案。我查了一下Real max_execution_time for PHP on linux但我不确定我是否想尝试一下。还有其他建议吗?

最佳答案

max_execution_time 仅限制脚本 本身的执行时间 - 脚本的 cpu 时间。如果操作系统上下文切换到另一个进程并在那里花费了一些时间,它也不会被计算在内。因此,测量真实世界的时间并期望 30 秒后超时在任何给定时间都不会成立。当然,它也忽略任何 systemexec 或网络时间

关于PHP max_execution_time 没有超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11259040/

相关文章:

php - PHP 中的基本通知系统

php - 使用 PHP 中 RootElement 中的命名空间解析 XML

php - 使用 Yii 框架添加数据

python - 如何解决 SuspiciousOperation : Invalid HTTP_HOST header error?

apache - .htaccess URL 屏蔽而不是重定向

php - Yii2:如何获取其属性在数组中的记录?

php - 在数据库表中存储 'website settings' 数据的最佳方式?

ruby-on-rails - Rails 应用程序显示 'index of/cms' 而不是 Rails

wordpress - 使用 Laravel 将 Nginx 反向代理到 Wordpress

php - 无法访问php中的环境变量