2012-03-13 65 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