目前手上做一个邮件群发系统,基于 CRM系统资料基础上 群发邮件,当要发送的客户数量大的时候就超时了。通过上网查资料,使用了 ignore_user_abort(); 和 set_time_limit(0); 用sleep(40)测试 依然会超时。请问要如何解决这个问题呢? 先感谢大家帮助了。
解决方案 »
- 浏览器不能显示MYSQL中的中文怎么回事呢,但是数据库里面可以显示的
- 求助:如何实现Cpanel面板中添加子域名的功能
- PHP操作EXCEL表格
- Fatal error: Call to undefined function http_post_fields() in
- 本地机器上可以使用exec()函数,但是到了服务器上就不能执行该函数
- 菜菜鸟提问 MYSQL语句的问题.....................MySQL Join
- 2,5,6,8随机选出一个,应该怎么写,急,谢谢
- 急问:php怎么通过proxy server(代理服务器)去抓去外网的东西啊
- php中gd模块已加载,为何不能调用imagefig()函数!内祥!
- 请问如何得到访问服务器的客户端的ip地址,在php中能实现么??
- 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的属性,小白了。