Ubuntu中的PHP exec()——您可以传入的参数大小有限制吗?

Ubuntu中的PHP exec()——您可以传入的参数大小有限制吗?,php,bash,ubuntu,background-process,Php,Bash,Ubuntu,Background Process,我看到命令行中的“getconf ARG_MAX”返回一个大数字(2097152字节),我传递给exec的参数只是这个数字的一小部分(229650),但我的exec一直在消亡,我不知道为什么。它与传入它的较小参数一起工作 示例代码: $strReallyLongParamList='ARG1 ARG2-IS-200K ARG3 ARG4'; exec('/path/to/my/background-process.php'$strReallyLongParamList); //从未发生过通过ba

我看到命令行中的“getconf ARG_MAX”返回一个大数字(2097152字节),我传递给exec的参数只是这个数字的一小部分(229650),但我的exec一直在消亡,我不知道为什么。它与传入它的较小参数一起工作

示例代码: $strReallyLongParamList='ARG1 ARG2-IS-200K ARG3 ARG4'; exec('/path/to/my/background-process.php'$strReallyLongParamList); //从未发生过通过background-process.php从中进行日志记录。。。代码似乎在执行呼叫时消失了

PHP是在内部受到限制还是只是将所有内容传递给Ubuntu


此后,我将我的exec调用分为更小的批处理,所有调用都非常有效,因此我似乎在PHP exec中遇到了某种类型的限制。

传递到命令行的任何变量参数都应该使用


我认为,这应该可以解决问题。

我猜错误来自这样一个事实,即您不能直接执行PHP文件:

exec('/path/to/my/background-process.php '.$strReallyLongParamList);
您必须执行以下操作,即执行实际程序,如PHP解释器:

exec('php /path/to/your/background-process.php '.$params);
但老实说,我不认为使用exec来完成这样的任务是个好主意,如果你不知道自己在做什么,那么安全风险太大了。你到底想做什么?

这篇文章:从shell的角度分析问题,但给出了一些关于潜在问题的见解,即ARG_MAX size是参数加上环境


希望有帮助。

一些示例代码会很好,请编辑您的问题也许您最好将所有逻辑放到shell脚本中,并通过
exec()
执行该脚本?如果您甚至需要考虑参数列表过长的事实,你真的应该考虑使用STDIN来传递那些长的参数……我使用的是DRASH命令和结构表列表=“字段*”相同的问题,其中有数百个表从字段开始。知道229650的号码是从哪里来的吗?不必“非得”打电话给php解释器。。。只需使用文件的第一行指定解释器:
#/usr/bin/php