我在 CentOS 5.8 上使用 PHP 5.3.10。PHP 是使用以下配置从源代码构建的:
./configure --enable-gd-native-ttf --enable-mbstring \
--enable-sockets --with-bz2 --with-curl --with-gd --with-mcrypt \
--with-mysql --with-mhash --with-mysqli --with-openssl --with-pdo-mysql \
--with-pear --with-pcre-regex --with-xsl --with-zlib --with-libdir=/lib64 \
--with-imap --with-kerberos --with-imap-ssl --with-apxs2=/usr/sbin/apxs
我很肯定系统上没有其他版本的 PHP,并且我已经通过浏览器和 CLI 确认 imap 扩展可用。
这个问题正在影响我正在使用的 CMS,但为了测试我使用了一个简单的 PHP 脚本,即:
<?php
error_reporting(15);
$username = "username";
$password = "password";
$mailserver = "{pop.gmail.com:995/pop3/ssl/novalidate-cert}INBOX";
$link = imap_open($mailserver, $username, $password, NULL, 1);
print_r(imap_errors());
$headers = imap_headers($link);
print_r($headers);
?>
当我在命令行运行它时,我得到了预期的输出,即没有错误消息和收件箱中的消息列表。
当我将浏览器指向测试脚本时,我得到:
Warning: imap_open() [function.imap-open]: Couldn't open stream {pop.gmail.com:995/pop3/ssl/novalidate-cert}INBOX in test.php on line 9
Array ( [0] => No such host as pop.gmail.com )
然后在 imap_headers 失败时发出其他警告。
显然 imap 扩展可以通过 Apache 和 CLI 使用,这不应该是防火墙或 DNS 问题,因为它确实可以通过 CLI 工作。我也可以远程登录到邮件服务器。
我正在使用默认的 php.ini-development 文件(这里有一个副本)并通过 phpinfo() 和 php -i 确认它在两个环境中都在使用。
有谁知道为什么 imap_open 会通过 Apache 而不是在命令行返回“没有这样的主机...”?
编辑:
我正在使用来自股票 CentOS yum 存储库的 libc-client 和 libc-client-devel 版本 2004g-2.2.1 和 httpd 2.2.3-63.el5.centos.1