Exec命令返回127错误代码

时间:2018-03-29 10:12:07

标签: php linux exec

简单来说,我有一个只用zip命令调用php脚本的linux脚本:

  

我的bash文件:

#!/bin/bash
  php zip.php 
  

我的PHP文件zip.php:

<?php
exec("zip file.zip file_1.pdf file_2.pdf file_n.pdf",$aOut,$errorCode);

这就是我得到的:

  • 直接从bash脚本执行zip命令,运行第二个参数传递的4000个pdf文件。
  • 从PHP脚本(使用exec函数)执行zip命令,第二个参数传递了4000个pdf文件,并返回127错误。
  • 从PHP脚本执行zip命令(使用exec函数),在第二个参数(少于1500个文件)中传递少量pdf文件时运行良好。
  • 如果我把*放在第二个参数中,即使我有4000个以符号*为目标的pdf,也会运行从PHP脚本(通过exec函数)执行zip命令。

我看到它不是命令未找到错误,因为它与少量pdf文件运行良好,但它与2en参数或整个命令的长度有关。

有人可以帮忙。

4 个答案:

答案 0 :(得分:1)

问题是命令行的最大长度为65535字节。我不知道您的命令行测试为什么起作用,也许您尝试使用短文件名进行尝试,但是一个完整的命令不能超过此限制。

我发现您的问题的原因是因为我调用了一个以Heredoc作为标准输入的命令行,而且,heredoc的长度很容易耗尽,因此我使用popen()重写了该调用,但这并没有帮你。我还没有使用zip实用程序,但是快速浏览一下它的联机帮助页便说它会将文件追加到现有的档案文件中,因此,如果您要获得最大效率,则应该能够在每64k之后或者每100,甚至什至之后分割命令行每个文件,如果您需要简单的算法。

答案 1 :(得分:0)

试试这个:

<?php
exec("zip file.zip file_1.pdf file_2.pdf file_n.pdf >/dev/null 2>&1 &",$aOut,$errorCode);

>/dev/null 2>&1 &将在后台运行此命令。和php只是发送命令到Linux

答案 2 :(得分:0)

  

嗨朋友,   看来PHP没有获取文件路径或文件没有权限。

答案 3 :(得分:0)

错误代码127:

127表示“未找到命令”

apache用户无权执行命令

解决方案

解决方案是确保在$ PATH中找到您正在使用的命令。如果命令不在您的路径中,请包含它或使用绝对完整路径。

授予apache用户执行命令的权限