Запуск файла PHP на XAMPP по сравнению с командной строкой php - PullRequest
3 голосов
/ 28 марта 2012

У меня есть chatdemo.php, который включает файл сокета socket.php. Внутри файла socket.php есть строка

socket_bind($master, $address, $port);

, где $address = "localhost" и $port=1300.

Однако, когда я ставлю на браузер (а apache из XAMPP равен up) http://localhost/demo/chatdemo.php он говорит:

Warning: socket_bind() [function.socket-bind]: unable to bind address [48]:
Address already in use in /Applications/XAMPP/xamppfiles/htdocs/demo/socket.class.php on line 23
socket_bind() failed

Итак, вместо этого я перешел в командную строку и сделал

php -q /demo/chatbot.demo.php
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Los_Angeles' for 'PDT/-7.0/DST' instead in /demo/socket.php on line 21
Server Started : 2012-03-27 17:24:24
Listening on   : localhost port 13000
Master socket  : Resource id #5

Поэтому вопрос таков: почему я не могу запустить этот chatdemo.php в своем браузере на локальном хосте (используя XAMPP), тогда как я могу выполнить его в командной строке с помощью php (не-XAMPP) ?

1 Ответ

1 голос
/ 28 марта 2012

Вы даже не должны пытаться запустить сервер (который прослушивает порт и принимает соединение) через веб-сервер. Веб-сервер обрабатывает запрос и при необходимости вызывает ваш PHP-скрипт. Ваш сценарий имеет 30 секунд, чтобы закончить его. Это ожидаемое поведение. Но когда вы запускаете сервер. История другая. Работает круглосуточно. Подумайте о веб-сервере, он работает 24/7. Конечно, ваш сервер может иметь гораздо меньше времени выполнения, чем этот. Но если вы запустите его на веб-сервере, то 1 поток будет на долгое время заблокирован для каждого запроса.

Серверы должны работать автономно. В вашем случае он должен запускаться из командной строки.

Дальнейшее чтение.

  1. Клиент-серверная архитектура
  2. Состояния сокетов и модель клиент-сервер

Для предупреждения в командной строке просто измените настройки date.timezone в php.ini в соответствии с вашим местоположением. Я использую

date.timezone = "Asia/Dhaka"  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...