尽管没有返回错误代码,但 PHP exec 命令无效

Posted

技术标签:

【中文标题】尽管没有返回错误代码,但 PHP exec 命令无效【英文标题】:PHP exec command has no effect despite returning no error code 【发布时间】:2012-03-13 13:43:47 【问题描述】:

我正在运行一个命令,通过 phpexec 函数将 id3 元数据添加到 mp3 文件,如下所示:

exec('id3v2 [options, filename etc go here] 2>&1', $output, $result);

该命令当前对目标文件没有影响(即它们的 id3 标签没有被更新)。但是,它返回 0 作为 $result,不输出任何错误,如果我从命令行运行完全相同的命令,它会按预期工作。

如果有人能建议我做错了什么,我将非常感激!

【问题讨论】:

命令执行后$output包含什么? 啊!当我早些时候检查它似乎是空的,但现在它说: fopen: ../../assets/mp3/p163tjjijs1oe61eq81q3q16rt7to5.mp3: id3v2: Permission denied 【参考方案1】:

检查$output

这可能是路径或访问权限问题。例如,如果您使用 web-server 权限运行此脚本,它可能无权更改文件。

【讨论】:

谢谢。我想你是正确的。现在我看看它,上面写着: fopen [filename]: id3v2: Permission denied ...你知道我需要做什么来允许它吗?我正在通过 PHP 使用其他命令行工具(例如 lame、sox),它们运行良好。我需要以某种方式授予 id3v2 更多权限吗? 你需要给 php 文件的读写权限。如果安全没有问题,只需 chmod 777 /path/to/dir 好的。可能的安全问题是什么? (这个目录在web根目录之外,只包含mp3文件) 也许这是您想要添加的勒索剪辑的集合,而其他人使用同一台计算机。 777 会让其他用户打开您的文件并了解所有秘密 不。您必须为 file (而不是目录)授予读写权限。类似chmod 777chown apache.apache。 perlfect.com/articles/chmod.shtml【参考方案2】:

运行 PHP 的用户是否有权写入这些文件并执行“id3v2”?

【讨论】:

我真的不确定。你知道我怎么检查这个吗? (抱歉,我对 shell 命令有点陌生)我一直在通过 PHP 的 exec 命令(在同一个网站/服务器上,因此可能是同一个用户)使用其他工具(lame,sox),并且他们一直在使用问题。 @Nick F - 如果其他应用程序工作并且直接使用命令行工作,那么下一个合乎逻辑的原因是您的 PHP 脚本。也许您没有正确格式化 exec 命令。您能否在终端中运行的命令和 PHP sn-p 与 Exec.它可能与未引用的文件路径一样简单。另外,我不确定 "2>&1" 是做什么的,我有一段时间没有使用 Linux,但我认为 & (&) 产生了一个后台作业。 谢谢,实际上这个问题已经解决了。原来这与 PHP 使用的用户有关。相关目录/文件上的“chown”修复了问题(见上文)。【参考方案3】:

试试http://www.php.net/manual/en/language.operators.execution.php

或者,如果 id3v2 返回一些你可以做的事情http://php.net/manual/en/function.shell-exec.php

【讨论】:

以上是关于尽管没有返回错误代码,但 PHP exec 命令无效的主要内容,如果未能解决你的问题,请参考以下文章

linux 下 php执行 exec 无反应 返回值为空

PHP exec等待返回键

如何解决php执行exec函数ffmpeg命令不生效的问题

php exec:不返回输出

在计算引擎上从 PHP 的 exec() 调用时,gsutil 不起作用

如何检索 PHP exec() 错误响应?