php处理大量数据超时 php执行时间过长

怎样解决php页面的载入超时问题?当PHP页面处理大事务时,页面往往会发生超时的错误,我解决此问题的方法如下:1.优化程序代码:这种方法可能有时立竿见影 , 但对一些已经很优化或者第三方开发的程序,可能用处不大,但我个人觉得这个办法还是应该优先考虑,这个一个优秀程序员必需有的工作美德 。2.对多个任务进行拆分:对于一些程序,可能问题并不出现在代码效率上,如Paypal的SOAP调用 , 大量时间花费在网络的数据传递上php处理大量数据超时了,(此问题在Web Services的远程调用时经常发生),我们当然不能等将来网速的提高来解决这个问题 。其实我们可以查看一下在一个POST动作中是否包含了多个任务,如付费、发Email、发货等等 。如是这样其实可以对这些任务进行拆分,把这个工作拆分成多个子工作来实现 。如执行完付费任务时,使用PHP的Header函数重定向到发送Email的页面,完成后再定向到其php处理大量数据超时他页面,采用redirect页面的方式来接力地完成任务 。3.进行PHP设定值的修改如果以上两种方法仍然无法解决,代码已经最优话,同时只有一个单任务的工作需要完成 。针对这样的情况,只能修改PHP的设定值了 。不过建议不要直接修改PHP.ini,这样会延长所有PHP执行的最大时间 。简单的方法就是使用init_set函数,以下的代码把PHP最大执行时间设定为180秒 。ini_set('max_execution_time', '180');同时可以使用ini_get把原来设置的max_execution_time保存下来,在进行完操作时回复原来的设定值 。
PHP file_get_contents 函数超时的几种解决方法这里就简单介绍两种:
一、增加超时的时间限制
这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间 。
我一开始以为set_time_limit也能影响到file_get_contents,后来经测试,是无效的 。真正的修改file_get_contents延时可以用resource
$context的timeout参数:
复制代码
代码如下:
$opts
=
array(
‘http'=array(
‘method'=”GET”,
‘timeout'=60,
)
);
$context
=
stream_context_create($opts);
$html
=file_get_contents('',
false,
$context);
fpassthru($fp);
二、一次有延时的话那就多试几次
有时候失败是因为网络等因素造成,没有解决办法,但是可以修改程序,失败时重试几次,仍然失败就放弃 , 因为file_get_contents()如果失败将返回
FALSE,所以可以下面这样编写代码:
复制代码
代码如下:
$cnt=0;
while($cnt
3
($str=@file_get_contents('http…'))===FALSE)
$cnt++;
几种常见的PHP超时处理方法【Web服务器超时处理】
[ Apache ]
一般在性能很高的情况下php处理大量数据超时,缺省所有超时配置都是30秒,但是在上传文件,或者网络速度很慢的情况下,那么可能触发超时操作 。
目前apachefastcgiphp-fpm模式下有三个超时设置php处理大量数据超时:
fastcgi超时设置php处理大量数据超时:
修改httpd.conf的fastcgi连接配置 , 类似如下php处理大量数据超时:
代码如下:
IfModulemod_fastcgi.c
FastCgiExternalServer/home/forum/apache/apache_php/cgi-bin/php-cgi-socket/home/forum/php5/etc/php-fpm.sock
ScriptAlias/fcgi-bin/"/home/forum/apache/apache_php/cgi-bin/"
AddHandlerphp-fastcgi.php
Actionphp-fastcgi/fcgi-bin/php-cgi
AddTypeapplication/x-httpd-php.php
/IfModule
PHP中几种常见的超时处理全面总结具体代码如下:
?php
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, '');

推荐阅读