我有一个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)在命令行上执行?
答案 0 :(得分:1)
您甚至不应该尝试通过Web服务器运行服务器(侦听端口并接受连接)。 Web服务器,处理请求并根据需要调用PHP脚本。您的脚本有30秒的时间来完成它。这是预期的行为。但是当你运行服务器时。故事不同。它全天候运行。想想Web服务器,它全天候运行。当然,您的服务器可以比此更少的运行时间。但是如果你在一个Web服务器下运行它,那么每个请求都会长时间阻塞该线程1。
服务器应该独立运行。在你的情况下,它应该从命令行运行。
进一步阅读。
对于命令行中的警告,只需根据您所在的位置更改date.timezone
中的php.ini
设置即可。我用
date.timezone = "Asia/Dhaka"