У меня есть скрипт, который будет пересылать почту с одного исходного IMAP-сервера на целевой IMAP-сервер.Я написал этот скрипт локально в моем xampp с затмением как IDE.Локально работает нормально.Но без ВНУТРЕННЕЙ ДАТЫ.Поскольку моя версия XAMPP-PHP была старой.
Поэтому я переместил скрипт на свой сервер, на котором работает PHP 5.3.6-pl0-gentoo .
Шаг 1:
В начале сценарий будет кэшировать все письма одного ящика в файлы в файловой системе (FileCache).
Шаг 2:
После того как IMAP-Connection-Ressource изменен на целевой IMAP-почтовый ящик, сценарий выполнит «imap_append» для всех кэшированных писем, чтобы записать эти письма в целевой IMAP-почтовый ящик.
Повторюсь, этот сценарий работает нормальнона локальной машине (без INTERNALDATE)!INTERNALDATE используется только для imap_append.Таким образом, первый шаг (кэширование) не имеет ничего общего с INTERNALDATE!
Моя проблема:
При кэшировании почты он прерывается после 4 ** писем.Это всегда одна и та же почта, где она ломается.и он каждый раз ломается на "imap_body". В этом письме нет ничего особенного: обычный html с вложением (1x 32 МБ, 7z-файл)
На локальном компьютере это письмо было передано этим сценарием.
Некоторая информация о выполнении:
- Тайм-аут выполнения PHP установлен на 3 часа (сценарий выполняется за 3 минуты до его остановки).
- Ограничение памяти PHP составляет1 ГБ (на машине 2 ГБ) сценарий использует 63 МБ, прежде чем он сломается.
- Время ожидания сокета PHP установлено на 3 часа.
- Загрузка заголовка этой специальной почты работаетхорошо на обеих системах.Только для загрузки тело будет ломаться.
- В моем анализе это ломается непосредственно после "call_user_func_array" с "imap_body"
ЗдесьМой сценарий:
Получатель RawHeader одной почты
/**
* Getter of $_rawHeader
* @access public
* @return Content of $_rawHeader
*/
public function getRawHeader($update=false) {
if(!$this->_rawHeader || $update) {
$cachename = urlencode('imap_'.$this->getIMAP()->getInstanceName().$this->getIndex().'_rawheader');
if(!($this->_rawHeader = $this->Cache()->get($cachename)) || $update) {
$this->_rawHeader = $this->getIMAP()->fetchheader($this->getIndex());
$this->Cache()->set($cachename, $this->_rawHeader, 2592000);
SYSLOG::debug($this->_rawHeader);
}
}
return $this->_rawHeader;
}
Получатель RawBody одной почты
/**
* Getter of $_rawBody
* @access public
* @return Content of $_rawBody
*/
public function getRawBody($update=false) {
if(!$this->_rawBody || $update) {
$cachename = urlencode('imap_'.$this->getIMAP()->getInstanceName().$this->getIndex().'_rawbody');
if(!($this->_rawBody = $this->Cache()->get($cachename)) || $update) {
SYSLOG::debug($this->getIMAP()->body($this->getIndex()));
$this->_rawBody = $this->getIMAP()->body($this->getIndex());
SYSLOG::debug($this->_rawBody);
$this->Cache()->set($cachename, $this->_rawBody, 2592000);
}
}
return $this->_rawBody;
}
Call-функция на IMAP-классе:
/**
* Catch not accessable Method-Calls
*
* @param String Methodname
* @param String Arguments
*
* This Method is for calling IMAP-Functions without "imap_" präfix
* Possilbe Methods are: Look at http://de3.php.net/manual/en/ref.imap.php
*
* @link http://de3.php.net/manual/en/ref.imap.php
*
* @return null || Function-Return
*/
public function __call($function, $arguments) {
//SYSLOG::debug('Call Function "imap_'.$function.'" on IMAP-Connection: '.$this->getAddress().':'.$this->getUsername());
if(function_exists('imap_'.$function)) {
//Filtered Function that doesn't need Handle
$filter = array(
'8bit',
'alerts',
'base64',
'binary',
'errors',
'last_error',
'mail_compose',
'mime_header_decode',
'qprint',
'rfc822_parse_adrlist',
'rfc822_parse_headers',
'rfc822_write_address',
'timeout',
'utf7_decode',
'utf7_encode',
'utf8'
);
//SYSLOG::info($this->_handle);
if($function == 'reopen' && !$this->_handle) {
if(!$this->open()) {
return false;
}
}
//Make sure that the Connection is open if its needed
if(in_array($function, $filter) || $function == 'reopen' || $this->open()) {
if(!in_array($function, $filter)) {
// Prepend the imap resource to the arguments array
array_unshift($arguments, $this->_handle);
}
// Call the PHP function
$func = 'imap_'.$function;
//SYSLOG::debug($arguments);
SYSLOG::debug('Call Function "'.$func.'" on IMAP-Connection: '.$this->getAddress().':'.$this->getUsername());
$result = call_user_func_array($func, $arguments);
//SYSLOG::debug($result);
return $result;
} else {
SYSLOG::warning('IMAP-Connection not available! Call-Function: "imap_'.$function.'" aborted!');
}
} else {
SYSLOG::error('Call-Function: "imap_'.$function.'" does not exist!');
}
return null;
}
Есть идеи, почему он ломается?
Большое спасибо за помощь.