我实际上正在使用 PHP 8.2(mod_php)和 debian 11.2 的 Apache 服务器 2.4 上工作
最近我发送了一个超过 100 秒的 HTTP 请求,没有超时。此请求执行了一个很大的 MySQL 请求。
我使用以下配置配置了 Apache ( /etc/apache2/apache2.conf
)
Timeout 10
我使用以下方式配置了 PHP ini( /etc/php/8.2/apache2/php.ini
)
max_execution_time = 10
max_input_time = 10
但我的请求花费了超过10秒。
来自 PHP 文档https://www.php.net/manual/en/configuration.changes.php
我已经php_value
在我的虚拟主机中添加
<VirtualHost *:8088>
DocumentRoot /var/www/public
<Directory /var/www/public>
AllowOverride All
Require all granted
Options Indexes FollowSymLinks
php_value max_execution_time 10
</Directory>
</VirtualHost>
即使在以下情况下配置良好,结果也是一样的phpinfo()
所以我的问题是:如何处理 Apache 和 mod_php 的超时?
谢谢
答案1
我找到了我的答案。
问题不是出在 Apache 或 PHP 上,而是出在 MySQL 上。
对于 Apache,我们有与Timeout
服务器等待客户端请求超时相对应的https://httpd.apache.org/docs/2.4/mod/mod_reqtimeout.html
对于 PHP,max_execution_time
表示 PHP 脚本执行的秒数,仅限 PHP。耗时一小时的 MySQL 请求不计入 max_execution_time。
因此,在 MySQL max_execution_time
5.7 版中https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_execution_time
就我而言,如果我有一个需要 1 小时的 SQL 请求和一个需要 5 秒的 PHP 脚本,那么我就不会超时。