执行命令 returns 127 错误代码
Exec command returns 127 error code
为了简单起见,我有一个 linux 脚本,它调用一个 php 脚本,只有一个 zip 命令:
My bash file :
#!/bin/bash
php zip.php
My PHP file 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 文件,return 出现 127 错误。
- 从 PHP 脚本执行 zip 命令(使用 exec 函数)在第二个参数中传递少量 pdf 文件(少于 1500 个文件)时运行良好。
- 从 PHP 脚本(通过 exec 函数)执行 zip 命令时,如果我将 * 放在第二个参数中,即使我有 4000 个 pdf 符号 *.
我看到它不是命令未找到错误,因为它在少量 pdf 文件上运行良好,但它与 2en 参数或整个命令的长度有关。
有人可以帮忙。
试试这个:
<?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
Hi Friend,
It seems the PHP is not getting the file path or file doesn't have permission.
错误代码 127:
127 表示 "command not found"
或
apache 用户没有执行命令的权限
解决方案
解决方案是确保您正在使用的命令可以在您的 $PATH 中找到。如果该命令不在您的路径中,请包含它或使用它的绝对完整路径。
或
授予 apache 用户执行命令的权限
问题是命令行的最大长度是 65535 字节。我不知道为什么你的命令行测试有效,也许你已经用短文件名试过但一个完整的命令不能超过这个限制。
我发现你的问题的原因是因为我调用了一个带有 heredoc 作为标准输入的命令行,而且 heredoc 的长度很容易 运行 消失所以我使用 popen( ) 但这对你没有帮助。我还没有使用过 zip 实用程序,但是快速浏览一下它的联机帮助页说它会将文件附加到现有档案中,因此如果您想要最大效率,或者每 100 甚至 100 之后,您应该能够在每 64k 之后拆分命令行每个文件,如果你想要一个简单的算法。
为了简单起见,我有一个 linux 脚本,它调用一个 php 脚本,只有一个 zip 命令:
My bash file :
#!/bin/bash
php zip.php
My PHP file 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 文件,return 出现 127 错误。
- 从 PHP 脚本执行 zip 命令(使用 exec 函数)在第二个参数中传递少量 pdf 文件(少于 1500 个文件)时运行良好。
- 从 PHP 脚本(通过 exec 函数)执行 zip 命令时,如果我将 * 放在第二个参数中,即使我有 4000 个 pdf 符号 *.
我看到它不是命令未找到错误,因为它在少量 pdf 文件上运行良好,但它与 2en 参数或整个命令的长度有关。
有人可以帮忙。
试试这个:
<?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
Hi Friend, It seems the PHP is not getting the file path or file doesn't have permission.
错误代码 127:
127 表示 "command not found"
或
apache 用户没有执行命令的权限
解决方案
解决方案是确保您正在使用的命令可以在您的 $PATH 中找到。如果该命令不在您的路径中,请包含它或使用它的绝对完整路径。
或
授予 apache 用户执行命令的权限
问题是命令行的最大长度是 65535 字节。我不知道为什么你的命令行测试有效,也许你已经用短文件名试过但一个完整的命令不能超过这个限制。
我发现你的问题的原因是因为我调用了一个带有 heredoc 作为标准输入的命令行,而且 heredoc 的长度很容易 运行 消失所以我使用 popen( ) 但这对你没有帮助。我还没有使用过 zip 实用程序,但是快速浏览一下它的联机帮助页说它会将文件附加到现有档案中,因此如果您想要最大效率,或者每 100 甚至 100 之后,您应该能够在每 64k 之后拆分命令行每个文件,如果你想要一个简单的算法。