繁体   English   中英

php fsockopen

[英]php fsockopen

我在使用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失败了。
连接不会被防火墙阻止,就像我从外壳telnet成功连接到任何主机上的任何端口一样。
知道这真的很奇怪是什么问题吗?

LE:如果我从外壳运行相同的php脚本,则php scriptname.php才起作用,因此只有当我通过http运行它时,它才会失败。 我在SuPHP上使用过Apache,所以问题出在这里

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

就像maxnk一样,防火墙是服务器上或ISP上最有可能出现的问题。 端口25经常被防火墙作为防止垃圾邮件的一种方法。

就像一个快速测试一样,由于您提到了gmail,因此您可能想尝试连接到端口587。 除了端口25外,Gmail还在此备用端口上侦听smpt,以帮助用户绕过限制过多的防火墙。

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

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

我认为连接问题出在您的机器上。 我只是将您的代码复制到我的计算机(Linux suse)上的脚本中,然后使用php -f test_script运行它。 我收到以下消息

220 mx.google.com ESMTP j8sm1814228gvb.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM