在XAMPP上运行PHP文件而不是php命令行

时间:2012-03-28 00:35:23

标签: php sockets xampp

我有一个chatdemo.php,其中包含socket.php套接字文件。在socket.php文件中有一行

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

其中$address = "localhost"$port=1300

然而,当我放入浏览器(并且来自XAMPP 的apache 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

所以问题是:为什么我不能在我的浏览器上运行localhost上的chatdemo.php(使用XAMPP),而我可以使用php(非XAMPP)在命令行上执行?

1 个答案:

答案 0 :(得分:1)

您甚至不应该尝试通过Web服务器运行服务器(侦听端口并接受连接)。 Web服务器,处理请求并根据需要调用PHP脚本。您的脚本有30秒的时间来完成它。这是预期的行为。但是当你运行服务器时。故事不同。它全天候运行。想想Web服务器,它全天候运行。当然,您的服务器可以比此更少的运行时间。但是如果你在一个Web服务器下运行它,那么每个请求都会长时间阻塞该线程1。

服务器应该独立运行。在你的情况下,它应该从命令行运行。

进一步阅读。

  1. Client-server architecture
  2. Socket states and the client-server model
  3. 对于命令行中的警告,只需根据您所在的位置更改date.timezone中的php.ini设置即可。我用

    date.timezone = "Asia/Dhaka"