Страница 1 из 1
Нужна помощь в PHP!
Добавлено: 2008-08-27 21:50:56
harmless
есть скрип для статуса сервера контры
Код: Выделить всё
<?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));
что ознячают эти все цыфры и код вобще?
Re: Нужна помощь в PHP!
Добавлено: 2008-08-27 22:54:59
hizel
цифири сии похожи на строку заканчивающуюся нулем, начинаются с четырех символов ASCII 0xFF
что касается скрипта, то там помоиму логика не верная, открывается сокет до udp порта удаленного сервера
и если сокет не открылся, считается что удаленные сервер в оффлайне, однакое сиё верно только для tcp
для udp сокет открывается без вопросов обычно если только нет критических проблем у отправителя
и выяснение офлайн и онлайн удаленный сервер имеет смысл решать только по таймауту
надеюсь я донес до вас свою мысль
мои умозаключения будут верны только если в php работа с socket-ами не отличается от других языков
Re: Нужна помощь в PHP!
Добавлено: 2008-08-27 23:17:12
harmless
УУУУУУУУУУУ
Если б я был программистом, а не простым смертным!

Re: Нужна помощь в PHP!
Добавлено: 2008-08-27 23:41:44
harmless
Код: Выделить всё
$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";
}
Ну а как мне заменить это на то чтоб писало что сервер в оффе???!
Re: Нужна помощь в PHP!
Добавлено: 2008-08-28 2:00:26
krilya
так

Re: Нужна помощь в PHP!
Добавлено: 2008-08-28 18:47:40
harmless
Не совсем я уж такой тупой как я думал!
методом логики и чуток научного тыка я все таки заставил этот скрипт работать так как мне нужно:
если сервер в оффе - ОФФ,
если в онлайне и пуст - ФРИ
если в игре - ОН
Поздравляю сам себя!
Но получилось только так - когда сервер в ефире то все пашет норм, но только он в оффе - так вылазит ворнинг на 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>";
}
?>
Re: Нужна помощь в PHP!
Добавлено: 2008-08-28 19:05:11
harmless
При
Оно за сабой тянет ворнинг
Код: Выделить всё
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 сокет открывается без вопросов
Все работает только при включеном сервере!
При оффе он опять выдает ошибку а заней уже что сервер свободен(не офф)
Ну так вот, прошу помочь(так как это будет наааамного быстрее, чем я сам буду тыкаться в разные стороны)
Жду ваших претензий,предложений и ,конечно же, пожеланий

Re: Нужна помощь в PHP!
Добавлено: 2008-08-28 20:54:52
zg
http://ru.php.net/function.fread
а теперь подумай к чему приведёт такой код
Код: Выделить всё
$r=socket_get_status($fp);
$r=$r["unread_bytes"];
$st.=fread($fp,$r);
если socket_get_status() вернёт false?
ну собственно к тому, что
Length parameter must be greater than 0
для отладки юзай error_reporting(E_ALL);
Re: Нужна помощь в PHP!
Добавлено: 2008-08-29 1:57:43
harmless
Так!
Своего я добился наполовину!
Мне еще учиться и учиться
Вобщем есть такой скрипт, который пашет на 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
или даже вообще!?
Re: Нужна помощь в PHP!
Добавлено: 2008-08-29 2:19:24
krilya
в начале скрипта
или аналогичная опция в php.ini
Re: Нужна помощь в PHP!
Добавлено: 2008-08-29 2:32:27
harmless
Эти функции выводят все ошибки!!!
а мне не нужно чтоб они выводились
Re: Нужна помощь в PHP!
Добавлено: 2008-08-29 2:33:22
harmless
Извеняюсь был не прав!

Re: Нужна помощь в PHP!
Добавлено: 2008-12-17 16:58:50
BigBrother
Kак можно добавить поддерживаемый модуль для php. Нужна поддержка fsockopen, а ее в списке, который выводит /usr/bin/php -m нет. Есть способы, добавить нужный модуль, без пере компиляции PHP?
Re: Нужна помощь в PHP!
Добавлено: 2008-12-17 17:11:40
zg
Код: Выделить всё
zg# grep socket /usr/ports/lang/php5-extensions/Makefile
SOCKETS "sockets support" off \
zg#
Re: Нужна помощь в PHP!
Добавлено: 2008-12-17 17:32:03
Volodymyr
Re: Нужна помощь в PHP!
Добавлено: 2008-12-17 17:43:20
Volodymyr
harmless писал(а):Вобщем есть такой скрипт, который пашет на 100%
В нем я не сомневаюсь!
В 100% работающих скриптах нет ворнингов.
harmless писал(а):Вот только теперь прошу помощи как убрать любые ворнинги и ероры с вывода при оффе
Попробуй таки отследить причини ворнингов и сделать обработчик. Ну а если совсем в лом то:
хотя лучше разобраться в проблеме, когда вілетают ворнинги.
Re: Нужна помощь в PHP!
Добавлено: 2008-12-17 19:43:58
zg
Volodymyr писал(а):В 100% работающих скриптах нет ворнингов.
100% рабочий скрипт тот, в котором нет фатал и парз ерроров.

Re: Нужна помощь в PHP!
Добавлено: 2008-12-17 20:08:05
Volodymyr
zg писал(а):100% рабочий скрипт тот, в котором нет фатал и парз ерроров.

Не хочу дискутировать по этому поводу. Но варнинги и нотизы это маяки на проблемные места. Так что со скриптом, удалось побороть проблему без глушения @ ?
Re: Нужна помощь в PHP!
Добавлено: 2008-12-18 12:43:59
zg
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 