Re: Re: Ошибка при попытке считать список аккаунтов в массив PHP

От: Maksim V. Strepetilov <CGatePro_at_mx_ru>
Дата: Wed 09 Nov 2005 - 11:48:44 MSK


Здравствуйте CommuniGate,

Wednesday, November 9, 2005, 9:20:02 AM, you wrote: >>> Здравствуйте.
>>> Использую CLI.php.

MVS>> Вероятнее всего истек таймаут ожидания данных из сокета судя по MVS>> ошибке.

MVS>> Найдите в cli.php строчку
MVS>>  $sp = fsockopen( $PeerAddr, $PeerPort, $errno, $errstr );
MVS>> И добавьте к ней 5ый параметр (тайм аут)
MVS>>  $sp = fsockopen( $PeerAddr, $PeerPort, $errno, $errstr, 30);

MVS>> должно помочь

> Добавление этого параметра не помогает. Да и по идее не в задержке
> грабли. Ошибка "CGPro output format error at '=':" выводится сразу же,
> как только начинает выполняться команда ListAccounts.

> В чем же все-таки дело...

Посмотрел еще раз, поставил пару экспериментов и вот :

        function _parseResponse() {
            $line = fgets($this->sp, (1024*10));
            $line = stripslashes($line);
            if($this->debug)
                echo "$line\n";
            if(preg_match("/^(\d+)\s(.*)$/",$line,$matches)) {
                $this->errCode = $matches[1];
                if($matches[1] == 201) {
                    // inline response
                    $this->inlineResponse = $matches[2];
                    $this->errMsg = "OK";
                } else {
                    // error
                    $this->errMsg = rtrim($matches[2]);
                }
                $this->isSuccess();
            } else {
                $this->_setStrangeError($line,$code);
            }
        }

Вся проблемма вот в этой строчке

    $line = fgets($this->sp, (1024*10));

Т.е. из сокета читается только 10 килобайт данных, а список может быть ОООЧЧЧЕЕЕЕННННЬЬЬЬ большим и естественно он не влазит в эти 10 килобайт, у меня ошибка появилась когда вместо 10 я поставил 1 (нет у меня такого количества ящиков что бы проверить на кошках). Если считать данных меньше чем есть, то получается ошибка парности, о чем он и говорит,

>>CGPro output format error at '=':

у меня подобная ошибка была только из за задержек при чтении из сокета, поэтому сразу и предложил тайм аут увеличить. Думаю если поставить вместо 10 большее число все пройдет корректно, не думаю что это правильное решение, но как "затычка" должно работать.

>>> Выполняется следующая конструкция:
>>> $AccountList = $cli->ListAccounts($domain);

>>> Если в домене не много аккаунтов, то функция выполняется
>>> благополучно. Если же аккаунтов много, то php выводит следующую
>>> ошибку:

>>> CGPro output format error at '=':

>>> А логах CGP пишет следующее: >>> 15:25:54.40 3 PWD-10341([127.0.0.1]) read failed. Error Code=connection closed by peer

>>> Эта ошибка возникает, как я уже сказал, если в домене много аккаунтов.
>>> Такой домен у меня один. А может эта ошибка возникает не из-за того,
>>> что в нем много аккаунтов, а потому что он является главным
>>> доменом?

>>> Чтобы это могло значить и как с этим бороться?

>>> Спасибо.

> ##################################################################
> Вы получили это сообщение потому, что подписаны на список рассылки > <CGatePro@mx.ru>.
> Чтобы отписаться, отправьте сообщение на адрес <CGatePro-off@mx.ru>
> Чтобы переключиться в режим дайджеста - mailto:<CGatePro-digest@mx.ru>
> Чтобы переключиться в индексный режим - mailto:<CGatePro-index@mx.ru>
> Для административных запросов адрес <CGatePro-request@mx.ru>

-- 
Наилучшие пожелания,
Максим Стрепетилов
Получено Wed Nov 09 08:47:43 2005

Этот архив был сгенерирован hypermail 2.1.8 : Fri 24 Apr 2015 - 16:14:24 MSK