【求助】PHP超时问题 目前手上做一个邮件群发系统,基于 CRM系统资料基础上 群发邮件,当要发送的客户数量大的时候就超时了。通过上网查资料,使用了 ignore_user_abort(); 和 set_time_limit(0); 用sleep(40)测试 依然会超时。请问要如何解决这个问题呢? 先感谢大家帮助了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 PHP有30秒的超时限制,当执行一些数据交互的时候超过30秒会自动断开,资料说使用set_time_limit(0)以后可以临时设置这个方法的超时限制。问题是我用了以后依然是超时了,不知道是什么问题。 代码中写set_time_limit(0)只是暂时改变运行环境,不需要重启apache. why设置了还会超时。关键代码贴出来凉凉... 测试的代码如下:function sendAction() { /验证post if (!$this->getRequest()->isPost()){ return; } //post数据获取 $post = $this->getRequest()->getPost(); if ($post['type'] == 'mass'){ ignore_user_abort(); set_time_limit(60); sleep(40); echo '40sec HelloWorld!'; } } 调用了一次ZF框架的。ZendServer配的环境 ignore_user_abort()是处理发送邮件的页面吗?set_time_limit(0);这句放到处理发送邮件的页面中,你发出的这个方法,没有长时间做处理操作,不涉及超时,你把ignore_user_abort();set_time_limit(60);这两行注释掉试试,应该不会有超时 已经将set_time_limit(0)直接放进页面中,依然过不了30秒的超时限制。理论上放在调用的方面里面应该一样的吧,当方法结束后,超时限制恢复正常。因为这里我想是只针对这个发送的方法作临时的处理。想不通。。 set_time_limit(60)放在页面最上面试一试 set_time_limit(0) 如果代码中set_time_limit(0)无效,那很可能是因为你的php开启了安全模式。这样的话,除非关闭安全模式或者更改php.ini中的时间设置,否者没有办法不超时 安全模式下只能通过修改php.ini来控制交互时间的限制 首先感谢朋友热心的帮助啊,心头暖暖的,哈哈。刚刚看了一下 php.ini 安全模式是关着的, safe_mode = Off 等几个位置都是关着的。十分感谢给我提供了头绪,马上去尝试一下。 问题已经解决!尝试单独在一个页面使用 set_time_limit(0) ,用sleep(40)测试,成功通过。发现不是PHP的问题,最后看了一下ExtJS的问题,发现Ajax里面用timeout设置(默认30秒),修改以后就成功通过了。这里注意的是 ExtJS 和 JQuery 都有这个timeout的属性,小白了。 phpmyadmin出现 无法载入 mcrypt 扩展,<br />请检查 PHP 配置 PHP查询mysql的问题 PHP多关键字加空格搜索高亮显示的问题 本地测试:404错误指定URL页面,大家多帮忙!急!~~ array获取值。 1141864930 代表时间,这是用什么函数转过来的? 发mail的问题 希望大家帮忙解决一下 ?号后面的是什么参数 新手请教session问题! help!help! zend studio 和 netbeans哪个好用呢? 在连接中传递参数
PHP有30秒的超时限制,当执行一些数据交互的时候超过30秒会自动断开,资料说使用set_time_limit(0)以后可以临时设置这个方法的超时限制。问题是我用了以后依然是超时了,不知道是什么问题。
代码中写set_time_limit(0)只是暂时改变运行环境,不需要重启apache.
测试的代码如下:
function sendAction()
{
/验证post
if (!$this->getRequest()->isPost()){
return;
}
//post数据获取
$post = $this->getRequest()->getPost();
if ($post['type'] == 'mass'){
ignore_user_abort();
set_time_limit(60);
sleep(40);
echo '40sec HelloWorld!';
}
}
调用了一次ZF框架的。ZendServer配的环境
set_time_limit(0);这句放到处理发送邮件的页面中,你发出的这个方法,没有长时间做处理操作,不涉及超时,你把ignore_user_abort();
set_time_limit(60);这两行注释掉试试,应该不会有超时
已经将set_time_limit(0)直接放进页面中,依然过不了30秒的超时限制。理论上放在调用的方面里面应该一样的吧,当方法结束后,超时限制恢复正常。因为这里我想是只针对这个发送的方法作临时的处理。想不通。。
这样的话,除非关闭安全模式或者更改php.ini中的时间设置,否者没有办法不超时
首先感谢朋友热心的帮助啊,心头暖暖的,哈哈。
刚刚看了一下 php.ini 安全模式是关着的, safe_mode = Off 等几个位置都是关着的。
十分感谢给我提供了头绪,马上去尝试一下。
尝试单独在一个页面使用 set_time_limit(0) ,用sleep(40)测试,成功通过。
发现不是PHP的问题,最后看了一下ExtJS的问题,发现Ajax里面用timeout设置(默认30秒),
修改以后就成功通过了。这里注意的是 ExtJS 和 JQuery 都有这个timeout的属性,小白了。