Нужна помощь в PHP!

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Нужна помощь в PHP!

Непрочитанное сообщение harmless » 2008-08-27 21:50:56

есть скрип для статуса сервера контры

Код: Выделить всё

<?php

// Stats scripts

$server="cs.bc-gold.kiev.ua";
$port="27015";
$qw=chr(32);
$fp = fsockopen ("udp://".$server,$port);

if (!$fp) {
    $online = "<font color=red size=3 face=verdana>Off</font>";
    } else {
	$online = "<font color=green size=3 face=verdana>On</font>";
    fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10));
    $st=fread($fp,1);
    $r=socket_get_status($fp);
    $r=$r["unread_bytes"];
    $st.=fread($fp,$r);
    fclose($fp);
    $st=substr($st,5);
    $address=SubStr($st,0,StrPos($st,chr(0)));
    $address=str_replace(chr(0),"|",$address);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $name=SubStr($st,0,StrPos($st,chr(0)));
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $map=SubStr($st,0,StrPos($st,chr(0)));
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $current=ord(SubStr($st,0,1));
    $max=ord(SubStr($st,1,1));
    }
$show_map="<img src='http://cs.bc-gold.kiev.ua/mappics/".$map.".jpg' width='100%'>";

?>
но он не до конца работает правильно!
когда срвер он и офф лайн он показывает одно и то же и еще мне не совсем ясен рядок

Код: Выделить всё

fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10));
что ознячают эти все цыфры и код вобще?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Нужна помощь в PHP!

Непрочитанное сообщение hizel » 2008-08-27 22:54:59

цифири сии похожи на строку заканчивающуюся нулем, начинаются с четырех символов ASCII 0xFF

что касается скрипта, то там помоиму логика не верная, открывается сокет до udp порта удаленного сервера
и если сокет не открылся, считается что удаленные сервер в оффлайне, однакое сиё верно только для tcp
для udp сокет открывается без вопросов обычно если только нет критических проблем у отправителя
и выяснение офлайн и онлайн удаленный сервер имеет смысл решать только по таймауту

надеюсь я донес до вас свою мысль

мои умозаключения будут верны только если в php работа с socket-ами не отличается от других языков
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение harmless » 2008-08-27 23:17:12

УУУУУУУУУУУ
Если б я был программистом, а не простым смертным! :smile:

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение harmless » 2008-08-27 23:41:44

Код: Выделить всё

$server="172.16.51.8";
$qw=chr(32);
$fp = fsockopen ("udp://".$server,"27015");
if (!$fp) {
    echo "ERROR: $errno - $errstr<br>\n";
    }
	else {
    fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10));
    $st=fread($fp,1);
    $r=socket_get_status($fp);
    $r=$r["unread_bytes"];
    $st.=fread($fp,$r);
    fclose($fp);
    $st=substr($st,5);
    $address=SubStr($st,0,StrPos($st,chr(0)));
    $address=str_replace(chr(0),"|",$address);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $name=SubStr($st,0,StrPos($st,chr(0)));
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $map=SubStr($st,0,StrPos($st,chr(0)));
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $current=ord(SubStr($st,0,1));
    $max=ord(SubStr($st,1,1));
    }
при таком раскладе работает нормально

Код: Выделить всё

if (!$fp) {
    echo "ERROR: $errno - $errstr<br>\n";
    }
Ну а как мне заменить это на то чтоб писало что сервер в оффе???!

Аватара пользователя
krilya
мл. сержант
Сообщения: 106
Зарегистрирован: 2008-03-11 4:42:29
Откуда: Комсомольск-на-Амуре

Re: Нужна помощь в PHP!

Непрочитанное сообщение krilya » 2008-08-28 2:00:26

Код: Выделить всё

if (!$fp) {
    echo 'server off';
    }
так ;)

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение harmless » 2008-08-28 18:47:40

Не совсем я уж такой тупой как я думал! :smile:
методом логики и чуток научного тыка я все таки заставил этот скрипт работать так как мне нужно:
если сервер в оффе - ОФФ,
если в онлайне и пуст - ФРИ
если в игре - ОН
Поздравляю сам себя! :drinks:
Но получилось только так - когда сервер в ефире то все пашет норм, но только он в оффе - так вылазит ворнинг на 18 рядок

Код: Выделить всё

Warning: fread() [function.fread]: Length parameter must be greater than 0. in W:\www\test.bc-gold.kiev.ua\blocks\cs_stat.php on line 18
А вот для тех, у кого не получилось а нужно, приведу сам скрипт:

Код: Выделить всё

<?php

// Stats scripts

$server="cs.bc-gold.kiev.ua";
$port="27015";
$qw=chr(32);
$fp = fsockopen ("udp://".$server,$port);

if (!$fp) {
    ;
    } else {
	fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10));
    $st=fread($fp,1);
    $r=socket_get_status($fp);
    $r=$r["unread_bytes"];
    $st.=fread($fp,$r);
    fclose($fp);
    $st=substr($st,5);
    $address=SubStr($st,0,StrPos($st,chr(0)));
    $address=str_replace(chr(0),"|",$address);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $name=SubStr($st,0,StrPos($st,chr(0)));
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $map=SubStr($st,0,StrPos($st,chr(0)));
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $current=ord(SubStr($st,0,1));
    $max=ord(SubStr($st,1,1));
    }
$show_map="<img src='http://cs.bc-gold.kiev.ua/mappics/".$map.".jpg' width='100%'>";
if ($current < "1") {
	$online = "<font color=yellow size=3 face=verdana>Free</font>";
	}
elseif ($current >= "1") {
	$online = "<font color=green size=3 face=verdana>On</font>";
	}
else {
	$online = "<font color=red size=3 face=verdana>Off</font>";
	}
?>

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение harmless » 2008-08-28 19:05:11

При

Код: Выделить всё

if (!$fp) {
    echo 'server off';
    }
Оно за сабой тянет ворнинг

Код: Выделить всё

Warning: fread() [function.fread]: Length parameter must be greater than 0. in W:\www\test.bc-gold.kiev.ua\blocks\cs_stat.php on line 18
и он засоряет ячейку на сайте!
ТОбишь нужно сделать так чтоб при оффе было только

Код: Выделить всё

$online = "<font color=red size=3 face=verdana>Off</font>";
При моем варианте все же как сказал уважаемый hizel
для udp сокет открывается без вопросов
Все работает только при включеном сервере!
При оффе он опять выдает ошибку а заней уже что сервер свободен(не офф)
Ну так вот, прошу помочь(так как это будет наааамного быстрее, чем я сам буду тыкаться в разные стороны)
Жду ваших претензий,предложений и ,конечно же, пожеланий :smile:

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Нужна помощь в PHP!

Непрочитанное сообщение zg » 2008-08-28 20:54:52

http://ru.php.net/function.fread :good:

а теперь подумай к чему приведёт такой код

Код: Выделить всё

    $r=socket_get_status($fp);
    $r=$r["unread_bytes"];
    $st.=fread($fp,$r);
если socket_get_status() вернёт false?
ну собственно к тому, что Length parameter must be greater than 0 :smile:

для отладки юзай error_reporting(E_ALL);

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение harmless » 2008-08-29 1:57:43

Так!
Своего я добился наполовину! :(
Мне еще учиться и учиться
Вобщем есть такой скрипт, который пашет на 100%

Код: Выделить всё

<?php

// Stats scripts

$server="cs.bc-gold.kiev.ua";
$port="27015";
$qw=chr(32);
$fp = fsockopen ("udp://".$server,$port);


if ($fp === false) {
	} else {
    fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10));
	$st=fread($fp,1);
    $r=socket_get_status($fp);
    $r=$r["unread_bytes"];
    $st.=fread($fp,$r);
    fclose($fp);
    $st=substr($st,5);
    $address=SubStr($st,0,StrPos($st,chr(0)));
    $address=str_replace(chr(0),"|",$address);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $name=SubStr($st,0,StrPos($st,chr(0)));
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $map=SubStr($st,0,StrPos($st,chr(0)));
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $st=SubStr($st,StrPos($st,chr(0))+1);
    $current=ord(SubStr($st,0,1));
    $max=ord(SubStr($st,1,1));
	}
	
if (!$st) {
	$online = "<font color=red size=3 face=verdana>Off</font>";
	}
elseif ($current < "1") {
	$online = "<font color=yellow size=3 face=verdana>Free</font>";
	}
elseif ($current >= "1") {
	$online = "<font color=green size=3 face=verdana>On</font>";
	}
	
$show_map="<img src='http://cs.bc-gold.kiev.ua/mappics/".$map.".jpg' width='100%'>";

?>
В нем я не сомневаюсь!
Вот только теперь прошу помощи как убрать любые ворнинги и ероры с вывода при оффе

Код: Выделить всё

Warning: fread() [function.fread]: Length parameter must be greater than 0. in W:\www\test.bc-gold.kiev.ua\blocks\cs_stat.php on line 17
Сервер:
Статус: Off


Карта:
IP:
Игроков: 0/0
или даже вообще!?

Аватара пользователя
krilya
мл. сержант
Сообщения: 106
Зарегистрирован: 2008-03-11 4:42:29
Откуда: Комсомольск-на-Амуре

Re: Нужна помощь в PHP!

Непрочитанное сообщение krilya » 2008-08-29 2:19:24

в начале скрипта

Код: Выделить всё

error_reporting(E_ALL ^ E_WARNING);
или аналогичная опция в php.ini

Код: Выделить всё

error_reporting  =  E_ALL  & ~E_WARNING

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение harmless » 2008-08-29 2:32:27

Эти функции выводят все ошибки!!!
а мне не нужно чтоб они выводились

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение harmless » 2008-08-29 2:33:22

Извеняюсь был не прав! :drinks:

Аватара пользователя
BigBrother
сержант
Сообщения: 150
Зарегистрирован: 2007-07-27 17:05:55
Откуда: Украина
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение BigBrother » 2008-12-17 16:58:50

Kак можно добавить поддерживаемый модуль для php. Нужна поддержка fsockopen, а ее в списке, который выводит /usr/bin/php -m нет. Есть способы, добавить нужный модуль, без пере компиляции PHP?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Нужна помощь в PHP!

Непрочитанное сообщение zg » 2008-12-17 17:11:40

Код: Выделить всё

zg# grep socket /usr/ports/lang/php5-extensions/Makefile
                SOCKETS         "sockets support" off \
zg#

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение Volodymyr » 2008-12-17 17:32:03

Код: Выделить всё

/usr/ports/net/php5-sockets

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение Volodymyr » 2008-12-17 17:43:20

harmless писал(а):Вобщем есть такой скрипт, который пашет на 100%
В нем я не сомневаюсь!
В 100% работающих скриптах нет ворнингов.
harmless писал(а):Вот только теперь прошу помощи как убрать любые ворнинги и ероры с вывода при оффе
Попробуй таки отследить причини ворнингов и сделать обработчик. Ну а если совсем в лом то:

Код: Выделить всё

 $st .= @fread($fp,$r);
хотя лучше разобраться в проблеме, когда вілетают ворнинги.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Нужна помощь в PHP!

Непрочитанное сообщение zg » 2008-12-17 19:43:58

Volodymyr писал(а):В 100% работающих скриптах нет ворнингов.
100% рабочий скрипт тот, в котором нет фатал и парз ерроров. :smile:

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: Нужна помощь в PHP!

Непрочитанное сообщение Volodymyr » 2008-12-17 20:08:05

zg писал(а):100% рабочий скрипт тот, в котором нет фатал и парз ерроров. :smile:
Не хочу дискутировать по этому поводу. Но варнинги и нотизы это маяки на проблемные места. Так что со скриптом, удалось побороть проблему без глушения @ ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Нужна помощь в PHP!

Непрочитанное сообщение zg » 2008-12-18 12:43:59

Volodymyr писал(а):Так что со скриптом, удалось побороть проблему без глушения @ ?
несколькими постами выше я уже писал о причинах ошибок, если топикстартер читал, то может и поборол
zg писал(а):к чему приведёт такой код

Код: Выделить всё

    $r=socket_get_status($fp);
    $r=$r["unread_bytes"];m
    $st.=fread($fp,$r);
если socket_get_status() вернёт false?
ну собственно к тому, что Length parameter ust be greater than 0 :smile: