Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2009, 10:47   #1
Alekcandr
Новичок
Джуниор
 
Регистрация: 06.08.2009
Сообщений: 4
Вопрос PHP fsockopen

Здраствуйте. У меня такой трабл...
Нужно сделать монитор для игрового сервера.
Нашёл код?
Код:
<?
$server="bla-bla.info";                        
$port="8129";                              
$fp = fsockopen($server, $port, $errno, $errstr, 1);
if($fp >= 1){
$status = 'ON';}
else{ $status = 'OFF'; }
echo $status;
?>
На локалхосте всё работает идеально... залил на 6te.net постоянно показывает OFF.
Попробовал другой пример с сокетами
Код:
<?php
$fp = fsockopen("www.google.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.google.com\r\n";
    $out .= "Connection: Close\r\n\r\n";

    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>
всё нормально выводится, значит fsockopen работает.

Подскажите в чём может быть ошибка?
Заранее спасибо.


p.s. я в сокетах не особо шарю) на всякий случай выключил safe_mode, но ничего неизменилось(

Последний раз редактировалось Alekcandr; 06.08.2009 в 10:52.
Alekcandr вне форума Ответить с цитированием
Старый 06.08.2009, 12:24   #2
netadm1n
Новичок
Джуниор
 
Регистрация: 05.08.2009
Сообщений: 2
По умолчанию

Возможно у хостера отключены сокеты...сам лично с таким сталкивался.
Может в этом случае обойтись без сокетов? Создать на основе например http-сервера, точно класс не подскажу, нужно в доке смотреть






----
web design and development
netadm1n вне форума Ответить с цитированием
Старый 06.08.2009, 12:39   #3
Alekcandr
Новичок
Джуниор
 
Регистрация: 06.08.2009
Сообщений: 4
По умолчанию

Возможно я ошибаюсь, но во втором примере я же использовал такой же сокет, у меня отркылся гугл с заголовком

пысы да и вроде как на этом хосте они включены
Alekcandr вне форума Ответить с цитированием
Старый 06.08.2009, 12:43   #4
Alekcandr
Новичок
Джуниор
 
Регистрация: 06.08.2009
Сообщений: 4
По умолчанию

Цитата:
Создать на основе например http-сервера
А не подскажете как? Хотябы в каком направлении копать)
Alekcandr вне форума Ответить с цитированием
Старый 06.08.2009, 15:51   #5
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Ну нифига себе!
PHP код:
if($fp >= 1
это не по детски -> если указатель на сокет больше или равен 1
Такого Г.ВНО-кода я уже давно не видел!!! Если Вы знаете создателя этого и он называет себя программистом дайте ему в рожу.

Теперь мои догадки почему это не работает: если попытаться вывести указатель на сокет как строку то мы получим что-то типа "Resource id #3", далее при сравнении с числом интерпретатор преобразует строку в число в нашем случае 3, а если будет "Resource id #0" то в 0, 0>=1 => false.

В мануале черным по белому написано fsockopen возвращает false или указатель, так что
PHP код:
if (!$fp
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 06.08.2009, 18:50   #6
Alekcandr
Новичок
Джуниор
 
Регистрация: 06.08.2009
Сообщений: 4
По умолчанию

Сделал всё как вы сказали... результат тот же....
Я чёт вообще непойму... по идее сокеты включены так как если запросить заголовок то всё работает...
У меня на локалхосте тоже всё работает. В чём проблема непонятно(
Пробовал на другом хостинге с пхп и "якобы" включёными сокетами, результат тот же.

Помогите разобраться))

Последний раз редактировалось SkyM@n; 06.08.2009 в 20:09.
Alekcandr вне форума Ответить с цитированием
Старый 07.08.2009, 11:31   #7
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

1)убедитесь что fsockopen возвращает false
2)проверьте что возвращают переменные $errno, $errstr - и вы узнаете почему не открывается сокет
3)если ф-я вернёт false и $errno будет 0 то смотрите лог php и apache
4)уберите время ожидания = 1, может сервер просто не успевает ответить.
5)приложите усилия к решению проблемы.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 07.08.2009, 11:40   #8
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

где находится игровой сервер ?

возможно, хостер не разрешает делать такие запросы к своим внешним адресам - об этом спрашивайте у техподдержки
свободен...
wall66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
php 3,0,5 Форсировка PHP 8 20.06.2009 22:59
fsockopen - одновременное использывание krok PHP 1 08.04.2009 22:41
Запрос в PHP Ruska882009 Помощь студентам 2 18.02.2009 09:59
JS вместо PHP Asteroid JavaScript, Ajax 1 05.12.2008 15:44
Цикл в php [ for ] Рустам PHP 10 05.12.2008 15:32