Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Функция popen(), сервер Counte Strike 1.6

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Проблемка с запуском
DbIm
Отправлено: 14 Апреля, 2011 - 17:54:26
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




Здаравствуйте, прошу вас помочь по теме "Запуск сервера командой popen()
OS: Windows Server 2008 R2 x64
Server: Counter Strike 1.6, Appserv.
Проблема: При использовании скрипта popen() на запуск сервера, сервер запускается, но при подключении к нему игроки не могут зайти.
Запуск командой popen()
CODE (htmlphp):
скопировать код в буфер обмена
  1. popen("cd ./server/ & start.bat", 'r');

Лог конслоли клиента при подключении
CODE (htmlphp):
скопировать код в буфер обмена
  1. Last 32 messages parsed.
  2. 109405 0018 svc_deltapacketentities
  3. 109405 0008 svc_time
  4. 109405 0013 svc_clientdata
  5. 109405 0018 svc_deltapacketentities
  6. 109417 0008 svc_time
  7. 109417 0013 svc_clientdata
  8. 109417 0018 svc_deltapacketentities
  9. 109435 0008 svc_time
  10. 109435 0013 svc_clientdata
  11. 109435 0018 svc_deltapacketentities
  12. 109439 0008 svc_stufftext
  13. 109439 0022 svc_time
  14. 109439 0027 svc_setangle
  15. 109439 0034 svc_clientdata
  16. 109439 0047 svc_deltapacketentities
  17. 158692 0000 svc_stufftext
  18. 158714 0000 svc_print
  19. 158714 0041 svc_serverinfo
  20. 158714 8309 ScreenShake
  21. 158714 8316 SendAudio
  22. 158714 8419 ScreenShake
  23. 158714 8426 SetFOV
  24. 158714 8428 RoundTime
  25. 158714 8431 svc_updateuserinfo
  26. 158714 16644 svc_setangle
  27. 158714 16651 RoundTime
  28. 158714 16654 ClCorpse
  29. 158714 16758 Radar
  30. 158714 16766 NVGToggle
  31. 158714 16768 svc_updateuserinfo
  32. 158714 18400 Geiger
  33. BAD:  18402:svc_bad
  34. Host_Error: CL_ParseServerMessage:

Содержиме файла start.bat :
CODE (htmlphp):
скопировать код в буфер обмена
  1. start /D"D:\servera\Public_Server" hlds1.bat

Содержимое файла hlds1.bat :
CODE (htmlphp):
скопировать код в буфер обмена
  1. start hlds.exe -console -game cstrike +hostname "Test server start" +map "de_dust2" +sv_lan 0 +ip ***.**.***.*** +maxplayers 32 +port 27020 +rcon_password "*****" -secure -noipx +exec listip.cfg

Консоль сервера к сожелению посмотреть не могу, так как при запуске сервера через popen() она попросту не открывается(Кстати если можно, то скажите почему она не открывается)
Вродебы тема совсем не по разделу так ведь?, но при запуске напрямую "start.bat" с самого хоста сервер спокойно включается и на него можно зайти.
CODE (htmlphp):
скопировать код в буфер обмена
  1. popen("cd ./server/ & start.bat", 'r');

Проверена и должна работать, проверена в этой теме http://php.su/forum/topic.php?fo...1&topic=3289
Вопрос: в чём проблема и как можно её решить?(Заранее спасибо)
P.S. В PHP шарю как крот, методом проб и ошибок.
 
 Top
valenok Модератор
Отправлено: 14 Апреля, 2011 - 18:50:58
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




proc_open даст гораздо больше информации и доступ к выводу вашей консоли.
Как видите, проблема не в php , который исправно сервер запускает, а где-то за его пределами.


-----
Truly yours, Sasha.
 
My status
 Top
DbIm
Отправлено: 14 Апреля, 2011 - 20:04:39
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




А можно пример запуска серез proc_open? Так как учится легче по примерам)
 
 Top
valenok Модератор
Отправлено: 14 Апреля, 2011 - 20:21:09
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




http://uk2.php.net/proc_open
там большой разноцветный пример посреди страницы.
Вам нужно только команду 'php' (первый параметр) заменить на свою команду которую Вы привели и убрать аргументыкомандной строки fwrite(pipes[0])


-----
Truly yours, Sasha.
 
My status
 Top
DbIm
Отправлено: 14 Апреля, 2011 - 21:08:59
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




Эх, блин так ничего и не понял в этом proc_open посмотрел example ничего не понял, прошу напишите пример для любого bat файла, очень интерессно как же можно понормальному запустить сервер с сайта(. Если не хотите напишите что не напишите, так как в таком случае сразу пойду прошаривать интернет дальше......
(Добавление)
CODE (htmlphp):
скопировать код в буфер обмена
  1. $num = 5;
  2. $descriptorspec = array(
  3. 0 => array("pipe", "r"),
  4. 1 => array("pipe", "w"),
  5. 2 => array("file", "./error.txt", "a")
  6. );
  7.  
  8. $process = proc_open("start.cmd", $descriptorspec, $pipes);
  9.  
  10. if (is_resource($process)) {
  11.  
  12. fwrite($pipes[0], $num);
  13. $result = stream_get_contents($pipes[1]);
  14.  
  15. echo $result;
  16. fclose($pipes[0]);
  17. fclose($pipes[1]);
  18.  
  19. proc_close($process);

Ошибок такой код не выдает да и толком ничего не делает( страница только грузится долго и в процесах висит cmd.exe как останавливаю страницу cmd.exe пропадаети ничего так и не грузится(

(Отредактировано автором: 14 Апреля, 2011 - 21:31:33)

 
 Top
nikob
Отправлено: 15 Апреля, 2011 - 09:52:58
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Апр. 2011  


Помог: 1 раз(а)




Цитата:

$process = proc_open("start.cmd", $descriptorspec, $pipes);

start.cmd поменяйте на свою команду

а вообще выше приведенный код неверный. Там не закрыт блок if (...) { }

(Отредактировано автором: 15 Апреля, 2011 - 09:54:06)

 
 Top
DbIm
Отправлено: 15 Апреля, 2011 - 20:52:00
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1. $num = 5;
  2. $descriptorspec = array(
  3. 0 => array("pipe", "r"),
  4. 1 => array("pipe", "w"),
  5. 2 => array("file", "./error.txt", "a")
  6. );
  7.  
  8. $process = proc_open('start C:/AppServ/www/server/start.bat', $descriptorspec, $pipes);
  9.  
  10. if (is_resource($process)) {
  11. }

Сделал вот так, такой же эффект как и у popen(), или что-то не так?
 
 Top
valenok Модератор
Отправлено: 15 Апреля, 2011 - 22:34:05
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Все так, кроме того, что вы решили не читать вывод консоли из $pipe[1]
Можете к примеру просто перенаправить весь вывод своего сервера в файл
дописав в свой батник что-то в стиле
server.exe > file1.txt
и посмотреть на что ругается сам сервер.


-----
Truly yours, Sasha.
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB