使用exec()在同一页面上执行两个命令

时间:2015-02-15 16:29:39

标签: php node.js

我正在使用以下代码尝试从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启动服务器的命令,但它工作正常但是当我点击第二个时没有任何反应。我已经单独在网页上尝试了每一个,它们都可以自己正常工作,但我想要做的是启动服务器然后运行其他脚本,但是由于某些原因它不会允许我?

1 个答案:

答案 0 :(得分:1)

请注意,nodejs应用程序通常不会停止。那个exec将等待被调用程序的结束。两者的组合将冻结PHP,直到nodejs进程完成。根据您的Web服务器,可以有更多或更少的同时PHP进程或线程,但通常这个数量是有限的,因此您应该避免这种情况。还有另一个原因可以避免这种情况:您的浏览器将尝试永久加载页面(直到超时),因为它永远不会收到页面的结尾。

如果在命令行的末尾添加&符号,则可以简单地避免此问题:

exec('/usr/local/bin/node desktop/server.js &');

这将使nodejs在后台开始进度,并且您的PHP脚本可以继续。