Php Zend Imap连接超时
我使用Zend framework提供的IMAP类通过IMAP访问gmail消息。我逐个访问收件箱中所有邮件的邮件标题,并在本地为它们编制索引。该脚本适用于邮件数小于10000的收件箱。对于较大的收件箱,脚本会断开连接,可能是超时 以下是堆栈跟踪: 异常消息:无法读取-连接已关闭 跟踪: 0/home/dev/trunk/Zend/Mail/Protocol/Imap.php168:Zend\u Mail\u Protocol\u Imap->\u nextLine 1/home/dev/trunk/Zend/Mail/Protocol/Imap.php285:Zend\u Mail\u Protocol\u Imap->\u nexttagedlinenull 2/home/dev/trunk/Zend/Mail/Protocol/Imap.php587:Zend_-Mail_-Protocol_-Imap->readLineNULL,“TAG103” 3/home/dev/trunk/Zend/Mail/Storage/Imap.php353:Zend_-Mail_-Protocol_-Imap->fetch'UID',12267 4/home/dev/trunk/model/gmail\u imap\u oauth.class.php121:Zend\u Mail\u Storage\u imap->getUniqueId12267 有没有一种可能的方法可以让连接保持更长的持续时间?我正在通过命令行运行这个脚本,并尝试在php.ini中增加脚本max runtime,但没有任何帮助。这里是函数 公共函数IndexAllMail$startIndex=1 {Php Zend Imap连接超时,php,zend-framework,imap,Php,Zend Framework,Imap,我使用Zend framework提供的IMAP类通过IMAP访问gmail消息。我逐个访问收件箱中所有邮件的邮件标题,并在本地为它们编制索引。该脚本适用于邮件数小于10000的收件箱。对于较大的收件箱,脚本会断开连接,可能是超时 以下是堆栈跟踪: 异常消息:无法读取-连接已关闭 跟踪: 0/home/dev/trunk/Zend/Mail/Protocol/Imap.php168:Zend\u Mail\u Protocol\u Imap->\u nextLine 1/home/dev/tru
}我正在检查zend库文件Imap.php,它使用fsockopen连接到Imap服务器。可能是某个连接的超时限制。这里的代码,在创建对象后,调用IndexAllMail开始抓取。这是一个服务器端断开ie与gmail的连接,大约在连接完成后45分钟内发生。我尝试过通过java和python库,它们的行为都是一样的,所以这肯定不是客户机的问题。问题是,若我在断开连接后立即重新连接,gmail会在10秒内再次断开连接。如果我在10分钟内再次尝试重新连接,在接下来的45分钟内效果良好。我必须想办法加快从gmail获取邮件的速度,并在45分钟内完成!正在寻找C库吗
$this->_imap = new Zend_Mail_Protocol_Imap('imap.gmail.com', '993', true);
$authenticateParams = array('XOAUTH', $initClientRequestEncoded);
$this->_imap->requestAndResponse('AUTHENTICATE', $authenticateParams);
//Create the mail storage Object
$this->_storage = new Zend_Mail_Storage_Imap_Wrapper($this->_imap);
//Select Folder
$this->_storage->selectFolder("[Gmail]/All Mail");
$numMessagesTotal = $this->_storage->countMessages();
if($numMessagesTotal == 0 ) return true;
for($i=$startIndex;$i<=$numMessagesTotal;$i++)
{
try {
$uniqueId = $this->_storage->getUniqueId($i);
$message = $this->_storage->getMessage($i);
}
catch(Exception $ex)
{
log("Error getting Unique id",'index');
log($ex->getMessage(),'index');
log($ex->getTraceAsString(),'index');
if($ex->getMessage() == 'cannot read - connection closed?')
{
//Timeout :(
return true;
}
else
continue;
}
$from = $message->from;
echo $from;
}