Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Linux上PHP的真实max_execution_time大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

According to the documentation: max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system call
According to the documentation:

@H_617_21@max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(),stream operations,database queries,etc. is not included when determining the maximum time that the script has been running. This is not true on Windows where the measured time is real.

测试证实了这一点:

不会超时

<?PHP
set_time_limit(5);
$sql = MysqLi_connect('localhost','root','MysqL');
$query = "SELECT SLEEP(10) FROM MysqL.user;";
$sql->query($query) or die($query.'<br />'.$sql->error);
echo "You got the page";

会超时吗?

<?PHP
set_time_limit(5);
while (true) {
  // do nothing
}
echo "You got the page";

我们的问题是,我们真的希望PHP在给定的时间之后暂停,无论它在做什么(因为如果我们知道我们无法以可接受的数量提供页面,我们不想让资源保持忙碌时间,如10秒).我们知道我们可以使用诸如MySQL wait_timeout之类的设置来进行SQL查询,但页面超时将取决于执行的查询数.

有些人试图提出workarounds,但似乎没有实现.

问:有没有一种简单的方法可以在Linux上获得真正的PHP max_execution_time,或者我们是否更好地在其他地方超时,例如Apache级别?

解决方法

这是一个非常棘手的建议,但如果你愿意修改和重新编译PHP,它肯定会做你想要的.

函数zend_set_timeout查看https://github.com/php/php-src/blob/master/Zend/zend_execute_API.cPHP代码(文件是Zend / zend_execute_API.C).这是实现时间限制的功能.以下是它在不同平台上的工作方式:

>在Windows上,创建一个新线程,在其上启动一个计时器,当它完成时,将名为timed_out的全局变量设置为1,PHP执行核心检查每个指令的变量,然后退出(非常简化)
>在Cygwin上,使用itimer和ITIMER_REAL,它可以测量实时,包括任何睡眠,等待等等,然后发出一个信号,中断任何处理并停止处理
>在其他unix系统上,将itimer与ITIMER_PROF一起使用,ITIMER_PROF仅测量当前进程所花费的cpu时间(但在用户模式和内核模式下都是如此).这意味着等待其他进程(如MysqL)不计入其中.

现在你要做的是将Linux上的itimer从ITIMER_PROF更改为ITIMER_REAL,当然你需要手动,重新编译,安装等.这两者之间的一个区别是它们在计时器运行时也会使用不同的信号出.所以我的建议是改变ifdef:

#   ifdef __CYGWIN__

#   if 1

这样你就可以设置ITIMER_REAL和PHP等待SIGALRM的信号.

无论如何,这个想法是未经测试的(我将它用于一些非常具体的系统,其中ITIMER_PROF被破坏,似乎有效),不受支持等.使用它需要您自担风险.它本身可以与PHP本身一起使用,但如果它们出于某种原因,它可能会破坏PHP和Apache中的其他模块,使用SIGALRM信号或其他计时器.

大佬总结

以上是大佬教程为你收集整理的Linux上PHP的真实max_execution_time全部内容,希望文章能够帮你解决Linux上PHP的真实max_execution_time所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。