首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP fsockopen很慢

PHP fsockopen很慢
EN

Stack Overflow用户
提问于 2009-08-23 20:05:18
回答 1查看 2.2K关注 0票数 0

我正在使用PHP中的IMAP协议,使用fsockopen发送和接收命令。我的初步实验奏效了,但慢得让人抓狂。下面这个简单的函数运行大约需要2分钟。我尝试了几种不同的IMAP服务器,都得到了相同的结果。有人能告诉我为什么这段代码这么慢吗?

代码语言:javascript
复制
<?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);

?>

这是我得到的回应:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-23 20:13:36

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

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

代码语言:javascript
复制
while (!feof($conn)) {
    print fgets($conn, 1024);
}

或者将循环退出条件更改为在读取完整回复后中断。它可能不得不在协议方面更聪明一些。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1319421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档