执行bash脚本

时间:2016-12-07 13:03:19

标签: php bash shell mono exec

我有一个连接到NFC支付终端的Raspberry Pi。我已通过命令行成功发送了事务。当我尝试使用exec()或system()在PHP中使用完全相同的东西时,它会挂起。

应该发生的事情如下:我发送一个带url的命令,以美分为单位的价格,以及在付款完成后等待确认所需的超时时间。
我按下回车键,命令被发送,约4秒后付款请求出现在支付终端。我用我的NFC卡点击它,它在Raspberry Pi控制台中显示“APPROVED”。现在我需要通过按'c'确认它或它无效。我现在并不关心最后一部分,但这也得到了解决。我发送的命令是一个.exe文件,但它正在使用mono。 我使用的命令是:

printf 'c' | mono /home/pi/Desktop/PayterPay/PayterPay.exe -u $url -a $price -t $timeout

如上所述,这是有效的。 printf'c'是照顾确认,这也有效。
现在我想在PHP脚本中使用它,所以我尝试

$command="printf 'c' | mono /home/pi/Desktop/PayterPay/PayterPay.exe -u $url -a $price -t $timeout"; 
exec("$command", $out, $return_code);

但是,运行此脚本时,它会挂起/等待大约一分钟。然后它继续正常,我得到付款,我支付,它得到确认,并验证它确实确认。 我认为这与system()和exec()(我试过两种)处理命令的方式有关,但我不明白为什么会有这么长的延迟。直接从命令行运行和使​​用我的PHP脚本之间有什么不同?

TL; DR

我通过exec()和system()运行'mono'命令,它有一个大约一分钟的延迟。这不会发生在命令行上,发出不同命令时也不会发生延迟。除此之外,它做了应有的一切。如何摆脱这种延迟?

UPDATE:

如果我从命令行运行脚本它运行得很好。在浏览器中运行会导致长时间的延迟。我认为它可能与通过浏览器它通过用户www-data运行这一事实有关。但是在命令行中切换到www-data并运行脚本仍然可以立即运行。所以我猜这也不是它落后的原因。

0 个答案:

没有答案