我正在使用以下代码尝试从php网页中的按钮点击执行两个不同的命令。
<?php
if (isset($_POST['button'])) { exec('/usr/local/bin/node desktop/server.js'); } ?>
<form method="POST">
<p>
<input type="hidden" name="button" value="1">
<input type="submit" value="Start Video">
</p>
</form>
<?php
if (isset($_POST['button'])) { exec('/usr/local/bin/node desktop/test.js'); } ?>
<form method="POST">
<p>
<input type="hidden" name="button" value="1">
<input type="submit" value="Test">
</p>
</form>
我可以获得第一个执行ok启动服务器的命令,但它工作正常但是当我点击第二个时没有任何反应。我已经单独在网页上尝试了每一个,它们都可以自己正常工作,但我想要做的是启动服务器然后运行其他脚本,但是由于某些原因它不会允许我?
答案 0 :(得分:1)
请注意,nodejs应用程序通常不会停止。那个exec将等待被调用程序的结束。两者的组合将冻结PHP,直到nodejs进程完成。根据您的Web服务器,可以有更多或更少的同时PHP进程或线程,但通常这个数量是有限的,因此您应该避免这种情况。还有另一个原因可以避免这种情况:您的浏览器将尝试永久加载页面(直到超时),因为它永远不会收到页面的结尾。
如果在命令行的末尾添加&符号,则可以简单地避免此问题:
exec('/usr/local/bin/node desktop/server.js &');
这将使nodejs在后台开始进度,并且您的PHP脚本可以继续。