У меня есть приложение чата, реализованное в PHP
с помощью WebSockets
( http://code.google.com/p/phpwebsocket/ ), и на моем локальном хосте, когда я его тестирую, я должен запустить сервер WebSockets с помощью команды "php server.php"
, который запускает сервер на локальном хосте, и файл продолжает работать до тех пор, пока я не нажму« Ctrl + c »на моем терминале Ubuntu. Я имею в виду, что он продолжает запускать цикл while, что вполне нормально bcoz, сервер должен быть в состоянии слушать запросы.
Теперь я сомневаюсь, что я разместил это приложение на общедоступном хостинге, который не дает мне SSH
доступ, я имею в виду, что я не могу получить интерфейс, похожий на терминал, где я использовал свою команду, поэтому КАК я запустил этот скрипт server.php
запустить мой сервер сейчас?
И да, одна вещь, о которой я упомянул, мне просто нужно запустить сценарий один раз, затем скрипт будет продолжать работать, а также хостинг-провайдер позволяет настраивать cron jobs
.
Пожалуйста, помогите, спасибо заранее.
Не имея SSH-доступа к вашему общедоступному хостингу, это довольно flaky. Тем не менее …
Вы можете использовать exec
для запуска чего-либо в командной строке из запускаемого сценария. Например, если у вас есть действие контроллера, которое вы вызываете из URL-адреса, например http://mysite.com/server/start , вы можете вставить строку:
$lastLine = exec("php server.php");
Конечно, эта команда не вернется, пока команда не завершится, поэтому вы никогда не получите ответ от этого скрипта (если только он не сработает). Поэтому я бы использовал popen
, который будет раскошеливать процесс и сразу же вернуться, позволяя вашему контроллеру вернуть ответ.
$handle = popen("php server.php", "r");
В какой-то момент вам, вероятно, захочется остановить этот сервер. Вы можете использовать posix_kill
и posix_kill
с небольшим волшебством CLI Unix, чтобы это сделать, возможно, в другом действии контроллера, которое вы вызываете из URL-адреса, например http://mysite.com/server/stop , вы можете вставлять:
$output = passthru('ps ax | grep server\.php'); $ar = preg_split('/ /', $output); if (in_array('/usr/bin/php', $ar)) { $pid = (int) $ar[0]; posix_kill($pid, SIGKILL);
На самом деле существует множество способов заставить демона работать без доступа к оболочке, но хостинговые компании заблокируют доступ к оболочке, потому что они не хотят, чтобы вы запускали демонов!
Вы должны сделать это на сервере, доступном на сервере. Я имею в виду, у вас должен быть VPS для вашего приложения, а общий хостинг вам не подходит.