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','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 查询的超时时间,但页面超时时间将取决于执行的查询数量。
有些人尝试提出解决方案看起来并不可行。
问:在 Linux 上是否有一种简单的方法来获取真正的
PHP max_execution_time
,还是我们最好在其他地方设置超时时间,例如在 Apache
级别上?