EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

цикл while
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
цикл while
Автор Сообщение
-=Virtus pro=-
Два пингвина
Два пингвина


Зарегистрирован: 18.02.2008
Сообщения: 427
Откуда: Россия, г Омск
4217 Монеты

СообщениеДобавлено: Чт, 30 Июл, 2009 16:50    Заголовок сообщения: цикл while Ответить с цитатой

Здравствуйте. Помогите разобраться с проблемой.
Расскажу все , что бы не было вопросов по коду. (писал сам ) Smile

Суть- мониторинг серверов кс.

Вот одна из функция, но я пока использую только ее.

Код:

function serverInfo($server) {
   list($ip,$port) = explode(":", $server);
   $timeStart = getmicrotime();
   $fp = @fsockopen('udp://'.$ip, $port);
   if($fp) {
      stream_set_timeout($fp, 2);
      fwrite($fp,"\xFF\xFF\xFF\xFFTSource Engine Query\0\r");
      $temp = fread($fp, 4);
      $status = socket_get_status($fp);
      if($status['unread_bytes']>0) {
         $temp = fread($fp, $status['unread_bytes']);
         $version = ord(getChar($temp));
         $array = array();
         $array['ping'] = (int)((getmicrotime() - $timeStart)*1000);
         $array['status'] = "on";
         if($version == 109) {
            $array['ip'] = getString($temp);
            $temp = substr($temp, 1);
            $array['name'] = getString($temp);
            $temp = substr($temp, 1);
            $array['map'] = getString($temp);
            $temp = substr($temp, 1);
            getString($temp);
            $temp = substr($temp, 1);
            getString($temp);
            $temp = substr($temp, 1);
            $array['players'] = ord(getChar($temp));
            $array['max_players'] = ord(getChar($temp));
         } elseif($version == 73) {
            getChar($temp);
            $array['name'] = getString($temp);
            $temp = substr($temp, 1);
            $array['map'] = getString($temp);
            $temp = substr($temp, 1);
            getString($temp);
            $temp = substr($temp, 1);
            getString($temp);
            $temp = substr($temp, 3);
            $array['players'] = ord(getChar($temp));
            $array['max_players'] = ord(getChar($temp));
         }
      } else
         $array['status'] = 'off';
         $err=1;
   }
   return $array;
}


она инклудится в файл этот файл.

Код:
<?php


echo"      <div id='content'>
      
         <div id='content-id'>
            <center><table border='0' align='center' cellpadding='0' cellspacing='0' class='stat sortable' id='myleaderboard'>
   <th>#</th><th width=200>Имя сервера</th><th width=150>Адрес</th><th width=100>Карта</th><th width=100>Пинг</th><th>Страна</th></tr>";
$i=1;
while($r=dbarray_fetch($servers_adres)) {
$serv=serverInfo("$r[adress]");


echo"
         <tr>
            <td>$serv[id]</td>

            
            <td><a href='plaers.php?id=$i'>$serv[name]</a></td>
            <td>$serv[ip]</td>
            <td>$serv[map]</td>
            <td>$serv[ping]</td>
            <td><img src='images/flags/RU.png' height='12' width='16' alt='Russia' title='Russia''></td>
         </tr></tr>";
         
}

echo"               </tbody></table></center>



   
   <hr class='clear'>
   
   </div>
   </div>
   </div>
   </div>   
   <div id='footer'>Всего серверов в базе  $serv_num</div>
</div></body></html>";
?>



еще туда вызываются функции эти (вдруг не все поймете)
Код:


$settings = dbarray(dbquery("SELECT * FROM ".DB_SETTINGS));
$servers = dbarray(dbquery("SELECT * FROM ".DB_SERVERS));
$servers_adres = dbquery("SELECT * FROM amx_servers");

//Определяем сколько серверов находится в БД
$serv_num=dbrows($servers_adres);

// MySQL функции
function dbquery($query) {
   $result = @mysql_query($query);
   if (!$result) {
      echo mysql_error();
      return false;
   } else {
      return $result;
   }
}

function dbresult($query, $row) {
   $result = @mysql_result($query, $row);
   if (!$result) {
      echo mysql_error();
      return false;
   } else {
      return $result;
   }
}
function dbarray($query) {
   $result = @mysql_fetch_assoc($query);
   if (!$result) {
      echo mysql_error();
      return false;
   } else {
      return $result;
   }
}

function dbarray_fetch($query) {
   $result = @mysql_fetch_array($query);
   if (!$result) {
      echo mysql_error();
      return false;
   } else {
      return $result;
   }
}


Цитата:
Колонки бд amx_servers
id, adress, location, vip , baned , protoko


----------------------------------------------------------
Проблема такова, что если сервер выключен то должен выдать status==off, делаю в начале цикла вот такую проверку if($serv[status]==off)continue;
то есть при статусе off Он должен перейти к следующему элементу. Вот проблема выдает на чтении выключеного сервера

Код:
Notice: Undefined index: id in Z:\home\monitoring\www\servers.php on line 19
Notice: Undefined index: id in Z:\home\monitoring\www\servers.php on line 19
Notice: Undefined index: name in Z:\home\monitoring\www\servers.php on line 22
Notice: Undefined index: ip in Z:\home\monitoring\www\servers.php on line 23
Notice: Undefined index: map in Z:\home\monitoring\www\servers.php on line 24
Notice: Undefined index: ping in Z:\home\monitoring\www\servers.php on line 25


то есть он не может определить элементы из массива, но почему он их проверяет у выключеного сервера? их там и не будет, он по идее должен к следующему элементу же перескочить. пробывал сделать проверку while.... if($serv[status]=='off') {continue;} { тут что в нутри цикла while...} и всеравно ошибка

Подскажите как сделать правильно что бы пропускало выключенный сервер или может ошибочный. И еще вопрос как сделать чтобы скрипт запускался каждые 15 минут. Знаю, скажите в планировщике задач RCON Cpanel'и , но там есть строка параметры запуска, вот что туда вписывать я не знаю. Если не сложно, можете помочь разобраться. А то весь вечер голову ломаю.
_________________
www.amxserv.net - Все для вашего CS сервера

Код:
if(isset($beer)) drink($beer);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Чт, 30 Июл, 2009 18:08    Заголовок сообщения: Ответить с цитатой

-=Virtus pro=-
формат строки запуска для Cron давно всюду описан и без проблем находится однехоньким запросом в Google Wink
_________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Чт, 30 Июл, 2009 19:05    Заголовок сообщения: Ответить с цитатой

Есть зависимость от версии php.
Когда вы делаете fetch отдельной функцией без гловалов и передачи значений по вн. адрессуон может не передвгать внутренний указатель .

Сделаете ф-ию (привожу кусками и чисто алгоритмически)
Код:
function getlistservers(){
// запрос
// if (mysql_error()!=='') return mysql_error
$result=array();
while ($row=..fetch_assoc...) $result[]=$row;
// или $result[$row['adress']]=$row так красивее

return $result
}

На выходе - массив с серверами или стринг при ошибке. Его пинайте через foreach и делайте с ним, что душе угодно.

Такая каша с функциями работы с указателями , там может что угодно не двигать указатель.

PS если вы только учитесь дам совет. Разделяйте логику, логику представоения инфориации и ее вывод.

Как я на первых порах делал.
fnc.php - a-bb работы с mysql. Возвращают в основном массивы или 2 значания ($status, $result) если первое false, значит в $result - саммив с ошибками
etc.php - генерация форм с использованием ф-ий fnc.php
и index.php - логика отдачи страниц, используются функции с etc.php и никаких других.

После этого очень легко перейти к ООП
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
-=Virtus pro=-
Два пингвина
Два пингвина


Зарегистрирован: 18.02.2008
Сообщения: 427
Откуда: Россия, г Омск
4217 Монеты

СообщениеДобавлено: Пт, 31 Июл, 2009 00:34    Заголовок сообщения: Ответить с цитатой

[LP]LordPro.teus,
Спасибо, уже сам тоже догадался в гугл ломануться Smile

lazutov,
Спасибо. В принципе я только начинаю осваивать php. Спасибо за советы. Попробую. Smile


И еще вопрос, хочу в цикле while вывести порядковый номер элемента, крутил счетчик for и так и так, но видимо не так делаю. Был в гугле, результатов 0. Может наведете на правильную мысль.
_________________
www.amxserv.net - Все для вашего CS сервера

Код:
if(isset($beer)) drink($beer);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Пт, 31 Июл, 2009 04:53    Заголовок сообщения: Ответить с цитатой

Код:
$cnt=0;
while(...){
$cnt++;
echo $cnt;
....

}

_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
-=Virtus pro=-
Два пингвина
Два пингвина


Зарегистрирован: 18.02.2008
Сообщения: 427
Откуда: Россия, г Омск
4217 Монеты

СообщениеДобавлено: Пт, 31 Июл, 2009 07:04    Заголовок сообщения: Ответить с цитатой

Благодарю. Очень признателен за помощь.


PS: Насчет пропуска выключенного сервера я проще сделал, просто в функцию проверки сервера в конце поставил if ($array['status']== 'off') continue;

_________________
www.amxserv.net - Все для вашего CS сервера

Код:
if(isset($beer)) drink($beer);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18114 Монеты

СообщениеДобавлено: Сб, 01 Авг, 2009 03:46    Заголовок сообщения: Ответить с цитатой

еще сделай экспорт статистики в xml, я ее к своим юзербарам прикручу Smile
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
-=Virtus pro=-
Два пингвина
Два пингвина


Зарегистрирован: 18.02.2008
Сообщения: 427
Откуда: Россия, г Омск
4217 Монеты

СообщениеДобавлено: Сб, 01 Авг, 2009 11:37    Заголовок сообщения: Ответить с цитатой

Еще не побывал делать экспорт в xml файл, позже почитаю документацию о правильной записи в него.
_________________
www.amxserv.net - Все для вашего CS сервера

Код:
if(isset($beer)) drink($beer);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Сб, 01 Авг, 2009 14:11    Заголовок сообщения: Ответить с цитатой

это такой-же текстовый док-т, как и html. Но со своими прелестями
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vohomov
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 17.07.2009
Сообщения: 183

20631 Монеты

СообщениеДобавлено: Вс, 23 Авг, 2009 18:22    Заголовок сообщения: Ответить с цитатой

-=Virtus pro=-
Опять же, ни к чему эта возня с кавычками атрибутов.
Если вам нужно вывести большой объём HTML, то лучше юзать document here.
Например фрагмент вашего кода лучше будет так:
Код:

echo <<<EOF
<tr>
            <td>$serv[id]</td>
            <td><a href="plaers.php?id=$i">$serv[name]</a></td>
            <td>$serv[ip]</td>
            <td>$serv[map]</td>
            <td>$serv[ping]</td>
            <td><img src="images/flags/RU.png" height="12" width="16" alt="Russia" title="Russia"></td>
</tr>
EOF;

Соответсвующее описание такого стиля читайте здесь:
http://ru2.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
P.S. Ещё заметил - plaers на самом деле пишется players . Smile
_________________
Любителям и знатокам географии | Помощь по химии онлайн
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Вс, 23 Авг, 2009 18:25    Заголовок сообщения: Ответить с цитатой

vohomov
Лажа. Не используется, неудобно, не лаконично, не читабельно...
_________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
vohomov
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 17.07.2009
Сообщения: 183

20631 Монеты

СообщениеДобавлено: Вс, 23 Авг, 2009 18:42    Заголовок сообщения: Ответить с цитатой

[LP]LordPro.teus писал(а):
vohomov
Лажа. Не используется, неудобно, не лаконично, не читабельно...

Во-первых, я указал, что это удобно для больших объёмов кода, которые по тем или иным причинам трудно оставить за пределами <?php ... ?> а нужно именно оставить в теле скрипта.
Во-вторых, не используется конкретно Вами. Чем перед каждой двойной кавычкой ставить обратный слеш или пользоваться заметными только в крупных шрифтах одинарными кавычками - лучше юзать doc_here.
Не читабельно? Как раз очень даже наоборот. Причём, думается мне, вы отвечаете так, потому что пользуете непонятный редактор кода с непонятной подсветкой. Ещё бы вам было "читабельно". имхо - здесь всё зависит от подхода к делу.

Лично я, попользовав это достаточно долго, могу сказать, что это удобно и быстро. Кроме того, такую форму вывода удобно использовать для создания шаблонов с подстановкой переменных - видел такое часто в ExBB и не в нём одном.
_________________
Любителям и знатокам географии | Помощь по химии онлайн
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
DEXIF
#!/bin/bash
Согнул ложку


Зарегистрирован: 27.09.2006
Сообщения: 919
Откуда: Минск
49930 Монеты

СообщениеДобавлено: Вс, 23 Авг, 2009 19:15    Заголовок сообщения: Ответить с цитатой

Это действительно неудобно! Это действительно нечитабельно! и редакторы тут не при чём!
_________________


S
|D|EG| Let's Rock! | XAP в ЛИЧКУ, SAPE
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
vohomov
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 17.07.2009
Сообщения: 183

20631 Монеты

СообщениеДобавлено: Вс, 23 Авг, 2009 19:16    Заголовок сообщения: Ответить с цитатой

Ещё один в своём репертуаре.
Цитата:
Для больших объёмов html-кода!!!

И вовсе необязательно так кричать.
_________________
Любителям и знатокам географии | Помощь по химии онлайн
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Вс, 23 Авг, 2009 19:26    Заголовок сообщения: Ответить с цитатой

vohomov
я изучил множество скриптов и в жизни не встречал такого подхода во всей системе, а не в единичных случаях, где обычное экранирование не подходит. Читабельность нулевая. Ориентирование в коде - аналогично. Ффтопку.
_________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
На страницу 1, 2  След.
Страница 1 из 2

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET