2012-03-13 70 views
1

我运行一个命令通过PHP的EXEC功能,ID3元数据添加到mp3文件,就像这样:PHP exec命令没有效果,尽管没有返回错误代码

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

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

如果有人能提出我做错了什么,我会非常感激!

+0

命令执行后包含了什么'$ output'? – Timur 2012-03-13 13:47:38

+0

啊!当我先前检查它似乎是空的,但现在它说: fopen:../../assets/mp3/p163tjjijs1oe61eq81q3q16rt7to5.mp3:id3v2:权限被拒绝 – 2012-03-13 13:50:57

回答

1

检查$output

这可能是路径或访问权问题。例如,如果您使用Web服务器特权运行此脚本,则可能无权更改这些文件。

+0

谢谢。我想你是正确的。现在我看看它,它说: fopen [文件名]:id3v2:权限被拒绝 ...你知道我需要做什么才能允许它吗?我通过PHP使用其他命令行工具(例如lame,sox),并且它们工作正常。我需要以某种方式授予id3v2更多特权或什么? – 2012-03-13 13:55:59

+0

你需要给php读取nad写入文件的权限。如果安全性不成问题,只需chmod 777/path/to/dir – Jake 2012-03-13 14:02:12

+0

好的。可能的安全问题是什么? (这个目录在web根目录之外,并且只包含mp3文件) – 2012-03-13 14:07:13

1

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

+0

我并不确定。你知道我如何检查吗? (对不起,我对shell命令有点新鲜)我通过PHP的exec命令(在同一个网站/服务器上,因此可能是同一个用户)使用了其他工具(lame,sox),并且他们一直在使用no问题。 – 2012-03-13 13:59:13

+0

@Nick F - 如果其他应用程序正常工作并直接使用命令行,那么下一个逻辑原因就是您的PHP脚本。也许你没有格式化执行命令的权利。您可以在终端中运行的命令和运行Exec的PHP代码段并行添加。这可能与文件路径不被引用一样简单。另外,我不确定“2>&1”正在尝试做什么,我有一段时间没有使用Linux,但是我认为&(&符号)产生了一个后台工作。 – 2012-03-13 16:38:33

+0

谢谢,实际上现在已经修复了。事实证明,这与PHP使用的用户有关。“chown”在相关目录/文件解决了问题(参见上文)。 – 2012-03-13 17:15:32