我有一个使用 WebSockets
(http://code.google.com/p/phpwebsocket/( 在 PHP
中实现的聊天应用程序,当我测试它时,我必须通过命令运行 WebSockets 服务器"php server.php"
,它在本地主机上启动服务器,文件一直运行,直到我在 Ubuntu 终端上按"Ctrl + c"。我的意思是它继续运行 while 循环,这是很正常的,因为服务器应该监听请求。
现在我的怀疑是我已经在共享主机上托管了这个应用程序,这没有给我SSH
访问权限,我的意思是我无法获得像终端一样的界面来运行我的命令,那么我将如何运行该server.php
脚本来启动我的服务器现在?
是的,我提到的一件事我只需要运行一次脚本,然后脚本将继续运行,并且托管服务提供商也允许设置cron jobs
。
请帮忙,提前谢谢。
没有SSH访问权限来访问您的共享主机是非常不稳定的。可是。。。
您可以使用exec
从触发的脚本在命令行上运行某些内容。例如,如果您有一个从 URL (如 http://mysite.com/server/start(调用的控制器操作,则可以嵌入以下行:
$lastLine = exec("php server.php");
当然,在命令完成之前,此命令不会返回,因此您将永远不会从此脚本获得响应(除非它失败(。所以我会使用 popen
,它将分叉进程并立即返回,允许您的控制器返回响应。
$handle = popen("php server.php", "r");
在某些时候,您可能想要停止此服务器。您可以使用带有一点 unix CLI 魔术的 passthru
和posix_kill
来完成此操作,也许在您从 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);
方法可以在没有 shell 访问权限的情况下运行守护进程,但托管公司将阻止 shell 访问,因为他们不希望您运行守护进程!
您必须在 shell 访问的服务器上使用它。我的意思是,您的应用程序必须有VPS,而共享主机对您没有用。