Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php fsockopen()在特定的web主机上不工作?_Php_Apache_Cpanel_Fsockopen_Connection Timeout - Fatal编程技术网

Php fsockopen()在特定的web主机上不工作?

Php fsockopen()在特定的web主机上不工作?,php,apache,cpanel,fsockopen,connection-timeout,Php,Apache,Cpanel,Fsockopen,Connection Timeout,我们的一位客户说,他们有一个非常简单的脚本,它使用fsockopen()来确定服务器是否在线。他们说,直到最近,它通过我们在他们的网站上运行良好,但最近刚刚停止工作,所以我假设这是一个设置 我的第一个想法是,他将其用作TCP,并将IP/端口用于游戏服务器,但他和我都确认,该脚本在其他各种web主机上运行良好 特别是我们的问题是什么 作品: 作品: 不起作用: 这是代码 <?php $timeout = (isset($_GET['timeout']) ? ($_GET['time

我们的一位客户说,他们有一个非常简单的脚本,它使用fsockopen()来确定服务器是否在线。他们说,直到最近,它通过我们在他们的网站上运行良好,但最近刚刚停止工作,所以我假设这是一个设置

我的第一个想法是,他将其用作TCP,并将IP/端口用于游戏服务器,但他和我都确认,该脚本在其他各种web主机上运行良好

特别是我们的问题是什么

作品:

作品:

不起作用:

这是代码

<?php

    $timeout = (isset($_GET['timeout']) ? ($_GET['timeout'] <= 0 ? 30 : ((int)$_GET['timeout'])) : 30);

    if(empty($_GET['ip'])&&empty($_GET['port'])){
        echo 'No IP/Port specified.';
    }else{
        if(fsockopen($_GET['ip'], $_GET['port'], $errno, $errstr, $timeout) === false){
            echo 'offline';
        }else{
            echo 'online';
        }
    }

托管公司可能已在您尝试测试的任何端口上禁用fsockopen功能或防火墙出站请求。如果是这种情况,您可以要求他们重新启用该功能或取消阻止该端口,但如果他们不这样做,则除了移动到新主机之外,您几乎没有其他办法


顺便说一句,在没有任何验证的情况下直接使用来自用户输入的数据($\u GET,$\u POST,等等)是一个非常糟糕的主意

您上面引用的三台主机是在同一台机器上,还是在不同的机器上?可能是它们之间的配置不一致。检查是否启用了“fsockopen”:

 <?php
 if(function_exists('fsockopen')) {
      echo "fsockopen function is enabled";
 }
 else {
      echo "fsockopen is not enabled";
 }
 ?>

如果已启用,请检查防火墙规则是否正在阻止未成功的主机


如果失败,请将脚本迁移到基于cURL的实现:并查看这是否有助于解决问题

你确定fsockopen功能没有被禁用吗?可能是一个聪明精明的人阻止了来自主机的请求,而该主机与其他主机不起作用(假设它位于不同的IP上)。这就解释了不一致的行为。你所说的“工作”/“不工作”是什么意思?它是否返回一条消息,但不是预期的消息?它没有输出吗?超时了吗?实际上我们是主持人。然而,网络托管只是我们向客户免费提供的一项附加服务,作为额外的激励。不幸的是,我们的网站管理员英语说得不是最好的,所以我最好是向他提出解决方案,而不是试图和他解决问题。由于脚本与来自我们宿主的其他端口一起工作,我倾向于后者。无法正常工作的端口是否必须通过防火墙进行隔离?@Brett Powell:是的,似乎有(或多或少)特定的规则阻止crazy----torservers.com上的脚本连接到游戏服务器。如果您输入一个Web服务器地址和端口(例如ip=www.heise.de&port=80),它工作正常。防火墙可能只允许一些标准端口(http、ftp、ssh等),或者只允许1024以下的端口或类似的端口。非常好,谢谢。对于libcurl方法来说,这样的东西不应该起作用吗?它显示仍然显示脱机使用游戏服务器端口,所以我将继续检查机器,尽管我认为防火墙已被禁用。