Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP脚本在60秒后超时_Php_Ubuntu_Timeout - Fatal编程技术网

PHP脚本在60秒后超时

PHP脚本在60秒后超时,php,ubuntu,timeout,Php,Ubuntu,Timeout,我正在写一个php脚本,它访问远程服务器上的csv文件,处理数据,然后将数据写入本地MySQL数据库。因为要处理和插入数据库的数据太多(50000行),所以脚本运行时间超过60秒。我的问题是,脚本在60秒后超时 为了确保这不是MySQL的问题,我创建了另一个进入无限循环的脚本,它也会在60秒时超时 我曾尝试在Ubuntu服务器上增加/更改以下设置,但它没有帮助: 最大执行时间 最大输入时间 mysql.connect\u超时 默认\u套接字\u超时 apache2.conf文件中的超时值 这是否

我正在写一个php脚本,它访问远程服务器上的csv文件,处理数据,然后将数据写入本地MySQL数据库。因为要处理和插入数据库的数据太多(50000行),所以脚本运行时间超过60秒。我的问题是,脚本在60秒后超时

为了确保这不是MySQL的问题,我创建了另一个进入无限循环的脚本,它也会在60秒时超时

我曾尝试在Ubuntu服务器上增加/更改以下设置,但它没有帮助: 最大执行时间 最大输入时间 mysql.connect\u超时 默认\u套接字\u超时 apache2.conf文件中的超时值

这是否可能是一个问题,因为我正在从web浏览器访问PHP文件?网络浏览器有超时限制吗

任何帮助都将不胜感激。

迈克尔

您的问题应该来自PHP文件,而不是访问它的web浏览器

您是否尝试在PHP文件的开头添加以下行

set_time_limit(0);
ini_set ('max_execution_time',  0);
PHP有两个配置文件,一个用于Apache,一个用于CLI,这解释了为什么在命令行中运行脚本时没有超时。你给我的phpinfo最大执行时间是6000

参见。

迈克尔

您的问题应该来自PHP文件,而不是访问它的web浏览器

您是否尝试在PHP文件的开头添加以下行

set_time_limit(0);
ini_set ('max_execution_time',  0);
PHP有两个配置文件,一个用于Apache,一个用于CLI,这解释了为什么在命令行中运行脚本时没有超时。你给我的phpinfo最大执行时间是6000


请参阅。

克服此限制的最简单且干扰最小的方法是将这一行添加到脚本中

然后,您只修改了该脚本的执行时间,而不是修改了所有PHP脚本,如果您修改了2个PHP.INI文件中的任何一个,就会出现这种情况

ini_set ('max_execution_time',  -1);
当您试图修改
php.ini
文件时,我猜您修改的是错误的文件,有两个,一个仅用于php CLI,另一个用于运行Apache的php

为了便于将来查找php apache使用的实际文件,只需执行以下操作

<?php
phpinfo();
?>


并查找加载的配置文件

要想突破此限制,最简单、干扰最小的方法就是将这一行添加到脚本中

然后,您只修改了该脚本的执行时间,而不是修改了所有PHP脚本,如果您修改了2个PHP.INI文件中的任何一个,就会出现这种情况

ini_set ('max_execution_time',  -1);
当您试图修改
php.ini
文件时,我猜您修改的是错误的文件,有两个,一个仅用于php CLI,另一个用于运行Apache的php

为了便于将来查找php apache使用的实际文件,只需执行以下操作

<?php
phpinfo();
?>


然后查找
加载的配置文件

我终于找到了请求超时的原因。问题在于虚拟服务器托管

来自web浏览器的请求被发送到托管服务器,然后托管服务器将请求定向到虚拟服务器(类似于单独的服务器)。因为托管服务器在60秒后没有收到来自虚拟服务器的响应,所以它会超时并将响应发送回web浏览器,并准确地说明这一点。同时,虚拟服务器仍在处理脚本

当虚拟服务器最终完成对脚本的处理时,为时已晚,因为宿主服务器已经向前端用户返回了超时错误

由于托管服务器用于托管多个虚拟服务器(针对多个不同的用户),因此通常无法更改此服务器上的超时设置


因此,最终结论是:虚拟主机无法避免超时错误。如果这是一个严重的问题,您可能需要考虑使用专用服务器托管。

我终于找到了请求超时的原因。问题在于虚拟服务器托管

来自web浏览器的请求被发送到托管服务器,然后托管服务器将请求定向到虚拟服务器(类似于单独的服务器)。因为托管服务器在60秒后没有收到来自虚拟服务器的响应,所以它会超时并将响应发送回web浏览器,并准确地说明这一点。同时,虚拟服务器仍在处理脚本

当虚拟服务器最终完成对脚本的处理时,为时已晚,因为宿主服务器已经向前端用户返回了超时错误

由于托管服务器用于托管多个虚拟服务器(针对多个不同的用户),因此通常无法更改此服务器上的超时设置


因此,最终结论是:虚拟主机无法避免超时错误。如果这是一个严重问题,您可能需要考虑使用专用服务器托管。

对于CentOS8,以下设置对我有效:

sed -i 's/default_socket_timeout = 60/default_socket_timeout = 6000/g' /etc/php.ini
sed -i 's/max_input_time = 60/max_input_time = 30000/g' /etc/php.ini
sed -i 's/max_execution_time = 30000/max_execution_time = 60000/g' /etc/php.ini
echo "Timeout 6000" >> /etc/httpd/conf/httpd.conf
用通常的方式重新启动apache已经不够好了。您现在必须这样做:

systemctl restart httpd php-fpm
简介:

如果脚本(PHP函数)需要61秒或更长时间,则会出现网关超时错误。术语网关被称为PHP工作线程,意思是工作线程超时,因为它是这样配置的。这与网络无关


php fpm是CentOS8中的一项新服务。根据我从互联网上收集的信息(我自己没有验证过),它基本上有可执行文件(worker)在后台运行,等待您给它脚本(PHP)来执行。节省的时间是可执行文件总是在运行。因为它们已经在运行,所以您不会受到启动时间的惩罚。

对于CentOS8,以下设置对我有效:

sed -i 's/default_socket_timeout = 60/default_socket_timeout = 6000/g' /etc/php.ini
sed -i 's/max_input_time = 60/max_input_time = 30000/g' /etc/php.ini
sed -i 's/max_execution_time = 30000/max_execution_time = 60000/g' /etc/php.ini
echo "Timeout 6000" >> /etc/httpd/conf/httpd.conf
用通常的方式重新启动apache是不够好的