php fsockopen

时间:2008-12-13 19:37:16

标签: php sockets

我在使用fsockopen连接服务器的服务器上有一个简单的PHP脚本。

<?php
$fp = fsockopen("smtp.gmail.com", 25, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    echo fgets($fp, 1024);
    fclose($fp);
}
?>

问题是脚本超时并且无法连接。如果我将端口从25更改为80,例如它在任何主机上都可以正常工作。因此,无论我使用什么主机,问题似乎只是端口25,我尝试了很多它们,并且所有工作都适用于端口80和其他,但是25次失败。
防火墙不会阻止连接,就像我从shell远程登录它成功连接到任何主机上的任何端口一样 任何想法可能是什么问题,因为它真的很奇怪?

LE:如果我从shell运行相同的php脚本,php scriptname.php它的工作原理只有当我通过http运行它才会失败。我有SuPHP的apache所以问题就在这附近

5 个答案:

答案 0 :(得分:2)

...有趣 某些防火墙可以阻止特定程序与特定端口的连接。 请再次检查,尝试完全停止防火墙。还试着阻止任何反间谍软件。

答案 1 :(得分:2)

maxnk 一样,提到防火墙是最可能的问题,无论是在服务器上,还是由您的ISP。端口25经常被防火墙作为防止垃圾邮件的方法。

就像快速测试一样,既然你提到了gmail,你可能想尝试连接到端口587。除端口25外,Gmail还会侦听此备用端口上的smpt,以帮助用户绕过过度限制的防火墙。

答案 2 :(得分:1)

我的PHP套接字处理也遇到了一些奇怪的问题。它最终成为运行它的系统的问题。您是否尝试在其他计算机上运行代码?

答案 3 :(得分:1)

我认为连接问题与您的机器有关。我只是将你的代码复制到我的机器上的脚本(linux suse)并用php -f test_script运行它。我收到了以下消息

  

220 mx.google.com ESMTP j8sm1814228gvb.0

答案 4 :(得分:1)

CentOS可以启用SELinux,这可能会导致连接怪异。你检查了错误日志吗?