fsockopen () не работает на конкретном веб-хосте? - PullRequest
2 голосов
/ 08 ноября 2011

Один из наших клиентов сказал, что у них есть очень простой скрипт, который использует fsockopen (), чтобы определить, подключен сервер или нет.До недавнего времени они говорили, что через нас он работает нормально, но недавно просто перестал работать, поэтому я предполагаю, что это настройка.

Сначала я подумал, что он использует его в качестве TCP и использует IP /Порт для игрового сервера, однако он и я оба подтвердили, что скрипт отлично работает с разных других веб-хостов.

В чем может быть проблема, в частности, у нас?

Работает: 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';
        }
    }

Ответы [ 2 ]

4 голосов
/ 08 ноября 2011

Все три хоста, которые вы цитировали выше, находятся на одной машине или на разных машинах? Возможно, что конфигурации между ними не согласованы. Проверьте, включен ли fsockopen:

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

Если он включен, проверьте, не блокируют ли правила брандмауэра узел, который не работает.

В противном случае перенесите сценарий в реализацию на основе cURL: http://ch.php.net/curl и посмотрите, поможет ли это решить проблему.

4 голосов
/ 08 ноября 2011

Возможно, хостинговая компания отключила функцию fsockopen или отправила исходящие запросы через любой порт, который вы пытаетесь протестировать. Если это так, вы можете попросить их снова включить функцию или разблокировать порт, но если они этого не сделают, у вас будет очень мало возможностей, кроме как перейти на новый хост.

Кстати, использование данных непосредственно из пользовательского ввода ($ _GET, $ _POST и т. Д.) Без какой-либо проверки - ОЧЕНЬ плохая идея!

...