【问题标题】:Exec command returns 127 error code执行命令返回 127 错误代码
【发布时间】:2018-03-29 10:12:07
【问题描述】:

为了简单起见,我有一个 linux 脚本,它只用一个 zip 命令调用一个 php 脚本:

我的 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 函数)运行良好,在第二个参数中传递少量 pdf 文件(少于 1500 个文件)。
  • 如果我将 * 放在第二个参数中,即使我有 4000 个以符号 * 为目标的 pdf,从 PHP 脚本(通过 exec 函数)执行 zip 命令也会运行。

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

有人可以帮忙。

【问题讨论】:

标签: php linux exec


【解决方案1】:

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

我发现你的问题的原因是因为我正在调用一个以heredoc 作为标准输入的命令行,而且,heredoc 的长度很容易跑掉,所以我使用 popen() 重写了调用,但这并没有帮你。我还没有使用过 zip 实用程序,但是快速查看它的手册页说它会将文件附加到现有的档案中,因此如果你想要最大效率,或者每 100 次或什至如果你想要一个简单的算法,每个文件。

【讨论】:

    【解决方案2】:

    错误代码 127:

    127 表示“找不到命令”

    apache用户没有执行命令的权限

    解决方案

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

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

    【讨论】:

    • 问题是,当我从 PHP 文件执行命令时,它运行的文件很少。当我提供 thousend 文件时,它会崩溃。所以我不认为它的权限
    • 您所说的问题是错误代码 127,提供了原因,如果您想要更具体的解决方案,请提供有关错误详细信息的更多信息。如何获取错误详细信息是另一个问题和答案
    【解决方案3】:

    试试这个:

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

    &gt;/dev/null 2&gt;&amp;1 &amp; 将在后台运行此命令。而php只是向linux发送命令

    【讨论】:

    • 同样的错误..使用短文件名它运行良好,但从更大的数字它会中断
    【解决方案4】:

    你好朋友, 似乎 PHP 没有获取文件路径或文件没有权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 2015-10-30
      • 2018-09-17
      相关资源
      最近更新 更多