0

我在 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

4

1 回答 1

0

我忘记了 Apache 正在使用 mod_chroot 并且显然对提供 DNS 的库的访问被阻止了。LoadFile /lib64/libnss_dns.so.2感谢这个页面,我不得不添加到我的 httpd.conf 中。

于 2012-05-03T14:15:56.910 回答