无法在 PHP 中与 fsockopen 连接(连接超时)

Posted

技术标签:

【中文标题】无法在 PHP 中与 fsockopen 连接(连接超时)【英文标题】:Unable to connect with fsockopen in PHP (Connection timed out) 【发布时间】:2012-02-03 01:59:13 【问题描述】:

我为朋友开发了一个应用程序,他最近因过载问题更换了专用服务器。

自从这次迁移以来,网站的一部分不再工作:php 中的套接字上的连接。

在这部分,我必须与另一个服务器建立连接,所以我实现了一个打开套接字的功能:

function openSocket($host, $port) 
    $fp = fsockopen($host, $port, $errno, $errstr, 30);
    
    if (!$fp) 
        return 0;
    
    
    fputs($fp, $envoi);
    
    return $fp;

在代码中,我是这样使用这个函数的:

$sock = openSocket($host, $port);

while (!feof($sock)) 
    echo fread($sock, 8192);


fclose($sock);

有时,我需要打开套接字几分钟,自从迁移后,我的朋友在他的日志中出现了这个错误:

PHP 警告:fsockopen(): 无法连接到 ...:80 (Connection 超时)在...中,引用者:...

我搜索了 PHP / Apache 中是否有特定的配置,但我一无所获。

我尝试增加 fsockopen 或 stream_set_timeout() 函数的最后一个参数,但没有任何效果。

感谢您的帮助

【问题讨论】:

【参考方案1】:

两台电脑之间是否有可靠的连接?

【讨论】:

这是与我无法控制的外部服务器的连接。【参考方案2】:

一些托管服务提供商和专用服务器设置在其防火墙设置中限制允许的传出连接。这对于防止异常机器人或漏洞利用脚本在服务器受到威胁时从服务器建立连接特别有用。检查是否有任何可能阻止您的出口/传出防火墙规则。

其他原因 - 远程服务器上的入口/入站防火墙规则拒绝您的连接尝试,或机器之间的高度潜在连接。

【讨论】:

感谢您的回答。我认为我的朋友在更改服务器的同时更改了主机。我会和他和主人一起看看,我会告诉你的。【参考方案3】:

即使我也面临同样的问题。 我正在为我的客户开发一个网站。 他希望我从专用时间服务器设置时间。 因此,我尝试使用 UDP 建立与该服务器的连接。 尝试了很多但失败了。很久之后,我发现某些端口已关闭,需要打开才能建立连接。 检查所需端口,然后确认相应端口已打开

【讨论】:

以上是关于无法在 PHP 中与 fsockopen 连接(连接超时)的主要内容,如果未能解决你的问题,请参考以下文章

php fsockopen() 无法建立连接

fsockopen():无法连接无法使用PHP(连接超 时)

如何解决[警告:fsockopen():无法连接]?

PHP fsockopen() 失败,但 telnet 工作

Socket编程 之使用fsockopen()函数

fsockopen(): 无法连接到远程服务器 ip Codeigniter