【问题标题】:PHP fsockopen Is SlowPHP fsockopen 很慢
【发布时间】:2010-11-22 02:37:35
【问题描述】:

我正在使用 fsockopen 来发送和接收命令的 PHP 中的 IMAP 协议。我的初步实验有效,但速度非常慢。下面的简单函数运行大约需要 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

【问题讨论】:

    标签: php networking performance imap fsockopen


    【解决方案1】:

    在远程端超时并关闭连接之前,feof 似乎不会返回 true。您传递的$timeout 参数仅适用于初始连接尝试。

    尝试更改您的 while 循环以直接打印状态:

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

    或者在阅读完整回复后将您的循环退出条件更改为中断。它可能必须对协议更智能。

    最后我要问一下,你为什么不用PHP的built-in IMAP client

    【讨论】:

    • 我希望能够在没有安装 IMAP 扩展的服务器上使用 IMAP,例如共享主机环境。
    • 谢谢,好像就是这样!
    • 这样的解决方案已经存在。 phpclasses.org 里面有很多,你可以试试这个:phpclasses.org/browse/package/2351.html
    • 是的,我看过所有这些。我只是对自己修补它更感兴趣。学习比什么都重要。不过谢谢!
    • 这并没有解决我的问题。我有 100 台本地 PC,当我需要实时时它无法工作。
    猜你喜欢
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2016-01-01
    • 1970-01-01
    • 2012-12-27
    • 2011-08-13
    相关资源
    最近更新 更多