PHP exec()在Ubuntu中——是否对你可以传入的参数的大小有限制?


PHP exec() in Ubuntu -- is there a limitation to the size of arguments you can pass in?

我从命令行看到"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来完成这样的任务是一个好主意,如果你不知道你在做什么,它的安全风险太大了。你到底想做什么?