我从命令行看到"getconf ARG_MAX"返回一个大数字(2,097,152字节),我传递的参数是exec的一小部分(229,650),但我的exec一直在死亡,我不知道为什么。
示例代码:$strReallyLongParamList = 'ARG1 ARG2-IS-200K ARG3 ARG4';exec("/道路//我/background-process.php"。strReallyLongParamList美元);//log from backgroundprocess .php never happened…代码似乎在exec调用
时死亡PHP是受内部限制还是直接传递给Ubuntu?
我已经把我的exec调用分成更小的批次,所有的工作都很好,所以看起来我在PHP exec中遇到了某种限制。
这篇文章:http://www.in-ulm.de/~mascheck/various/argmax/从shell的角度分析了这个问题,但对潜在的问题给出了一些见解,即ARG_MAX的大小是参数加上环境。
希望能有所帮助。
传递给命令行的任何变量参数都应使用escapeshellarg
进行转义我想这应该能解决问题。
我猜这个错误来自于你不能直接执行PHP文件的事实:
exec('/path/to/my/background-process.php '.$strReallyLongParamList);
你必须做如下的事情,即执行一个实际的程序,比如PHP解释器:
exec('php /path/to/your/background-process.php '.$params);
但是老实说,我不认为使用exec来完成这样的任务是一个好主意,如果你不知道你在做什么,它的安全风险太大了。你到底想做什么?