PHP медленный - медленный - PullRequest
       15

PHP медленный - медленный

0 голосов
/ 24 августа 2009

Я играю с протоколом IMAP в PHP, используя fsockopen для отправки и получения команд. Мои предварительные эксперименты работают, но безумно медленно. Для запуска простой функции, указанной ниже, требуется около 2 минут. Я пробовал несколько разных серверов IMAP и получил тот же результат. Может кто-нибудь сказать мне, почему этот код такой медленный?

<?php

function connectToServer($host, $port, $timeout) {
    // Connect to the server
    $conn = fsockopen($host, $port, $errno, $errstr, $timeout);

    // Write IMAP Command
    $command = "a001 CAPABILITY\r\n";

    // Send Command
    fputs($conn, $command, strlen($command));

    // Read in responses
    while (!feof($conn)) {
        $data .= fgets($conn, 1024);
    }

    // Display Responses
    print $data;

    // Close connection to server
    fclose($conn);
}

connectToServer('mail.me.com', 143, 30);

?>

Это ответ, который я получаю:

macinjosh:Desktop Josh$ php test.php
* OK [CAPABILITY mmp0613 IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS CHILDREN BINARY UNSELECT SORT LANGUAGE IDLE XSENDER X-NETSCAPE XSERVERINFO X-SUN-SORT X-SUN-IMAP X-ANNOTATEMORE X-UNAUTHENTICATE XUM1 AUTH=PLAIN STARTTLS] Messaging Multiplexor (Sun Java(tm) System Messaging Server 6.3-6.03 (built Jun  5 2008))
* CAPABILITY mmp0613 IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS CHILDREN BINARY UNSELECT SORT LANGUAGE IDLE XSENDER X-NETSCAPE XSERVERINFO X-SUN-SORT X-SUN-IMAP X-ANNOTATEMORE X-UNAUTHENTICATE XUM1 AUTH=PLAIN STARTTLS
a001 OK CAPABILITY completed

1 Ответ

4 голосов
/ 24 августа 2009

Кажется, что feof не вернет истину, пока удаленная сторона не отключится и не закроет соединение. Параметр $timeout, который вы передаете, применяется только к первоначальной попытке подключения.

Попробуйте изменить цикл while для прямой печати состояния:

while (!feof($conn)) {
    print fgets($conn, 1024);
}

Или измените условие выхода из цикла, чтобы прервать его после прочтения полного ответа. Вероятно, с протоколом нужно быть умнее.

Наконец, я должен спросить, почему вы не используете PHP встроенный клиент IMAP ?

...