我有一个设备将数据发送到我本地计算机上的端口(现在,它将在以后访问某个站点)以下代码使用PHP从端口接收数据。我必须在URL中输入127.0.0.1/web/1.php(我的文件名)才能生效。当我最终上线时,这将是一个问题,每次收到我的数据时套接字也会关闭。我如何继续倾听,如果没有我在URL中输入php文件,php文件如何运行。
感谢任何建议,我有VB背景,PHP和网络对我来说很新!感谢
这是我目前的PHP
error_reporting(E_ALL);
/* Allow the script to hang around waiting for connections. */ set_time_limit(0);
/* Turn on implicit output flushing so we see what we're getting * as it comes in. */ ob_implicit_flush();
$address = '192.168.1.70'; $port = 10000;
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; }
if (socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; }
if (socket_listen($sock, 5) === false) {
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; }
do {
if (($msgsock = socket_accept($sock)) === false) {
echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}
do {
if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break 2;
}
if (!$buf = trim($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
socket_close($msgsock);
break 2;
}
$talkback = "PHP: You said '$buf'.\n"; $file=fopen("welcome.txt","a+") or exit("Unable to open file!"); fwrite($file, $talkback); fclose($file);
socket_write($msgsock, $talkback, strlen($talkback));
echo "$buf\n";
} while (true);
socket_close($msgsock); } while (true);
socket_close($sock);
答案 0 :(得分:0)
你可以对脚本进行deamonise并从命令行运行 - 根据上面的Colins评论 - PHP可能不是最好的语言 - 但是当我完成它之前我还添加了一个监视器来观察和重新启动脚本,如果因任何原因停止运行。
如果您在Unix上运行,那么使脚本可执行,例如
chmod a+x <script name>
并添加
#!/usr/bin/php
<?php
脚本的开头将允许您从命令行执行它。
然后使用像Deamon Tools这样的包
http://cr.yp.to/daemontools.html
启动并监控脚本是否正在运行。