【问题标题】:fsockopen() not working on a specific web host?fsockopen() 不能在特定的网络主机上工作?
【发布时间】:2011-12-24 06:11:21
【问题描述】:

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

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

我们的问题可能是什么?

作品:http://crazygfl.xfactorservers.com/query.php?ip=www.xfactorservers.com&port=80

作品:http://crazygfl-stats.com/query.php?ip=109.73.163.231&port=27015

不起作用:http://crazygfl.xfactorservers.com/query.php?ip=109.73.163.231&port=27015

这里是代码...

<?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 功能没有被禁用?
  • 可能是一个聪明而精明的人阻止了来自其他主机的无效请求(假设它在不同的 IP 上)。这可以解释不一致的行为
  • “有效”/“无效”是什么意思 它是否返回一条消息但不是预期的?它没有输出吗?超时了吗?

标签: php apache cpanel fsockopen connection-timeout


【解决方案1】:

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

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

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

如果失败,请将您的脚本迁移到基于 cURL 的实现:http://ch.php.net/curl 并查看这是否有助于解决问题。

【讨论】:

  • 太好了,谢谢。像这样的东西不应该适用于 libcurl 方法吗? pastie.org/2829896 它显示仍然显示使用游戏服务器端口离线,所以我将继续检查机器,尽管我认为防火墙已禁用 AFAIK。
【解决方案2】:

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

顺便说一句,直接使用来自用户输入的数据($_GET、$_POST 等)而不进行任何验证是一个非常糟糕的主意!

【讨论】:

  • 其实我们是主机。但是,网络托管只是我们免费为客户提供的一项附加服务,作为额外的激励。不幸的是,我们的网站管理员不会说最好的英语,所以我最好直接向他提出解决方案,而不是试图与他一起解决问题。由于该脚本适用于我们托管的其他端口,因此我倾向于后者。不工作的端口是否必须专门设置防火墙?
  • @Brett Powell:是的,似乎(或多或少)有特定的规则可以防止疯狂的脚本---.----torservers.com 连接到游戏服务器。如果您输入网络服务器地址和端口(例如 ip=www.heise.de&port=80),它工作正常。防火墙可能只允许某些标准端口(http、ftp、ssh、...),或者只允许低于 1024 的端口或类似的端口。
猜你喜欢
  • 2019-12-02
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多