2012-05-28 81 views
0

我想在shell_exec命令中包含用戶定義的變量(從cookie派生)以命名文件。不幸的是,當我運行PHP腳本時,文件名就像「.flv」一樣吐出,沒有前面的變量字符串。我測試過這個cookie,它確實有效,但它看起來沒有被正確地傳遞給exec。任何幫助或建議將不勝感激。在PHP中使用Cookie變量與shell_exec

$shellvar = $_COOKIE["VideoTitle"]; 
$shellvar = escapeshellarg($shellvar); 
shell_exec('/usr/local/bin/ffmpeg -i audio.wav -i videofile.flv $shellvar.flv 2>&1'); 

回答

3

你在PHP中,這意味着它不會解析$ shellvar作爲PHP變量使用單引號。然後,這是傳遞給終端,它試圖使用變量(它不存在),它吐出一個空白變量。因此,請嘗試在shell_exec命令中用雙引號替換單引號。

因此,代碼看起來像:

$shellvar = $_COOKIE["VideoTitle"]; 
$shellvar = escapeshellarg($shellvar); 
shell_exec("/usr/local/bin/ffmpeg -i audio.wav -i videofile.flv $shellvar.flv 2>&1"); 

強制性安全警告:
另外,我懇求你要小心,escapeshellarg是一個很好的命令,但我也建議(最重要的是)只允許使用preg_match的字母和數字(因爲我是偏執狂)。

喜歡的東西

if (preg_replace('/[A-Za-z0-9]*/', '', $shellvar) != "") 
    echo "DISALLOWED CHARACTERS"; 

這樣,您就可以至少體面確保你沒有讓畸形的名字將被傳遞到終端。我還建議以特定用戶身份運行這些命令(這​​些用戶訪問非常少,而不是使用ffmpeg)。

+0

完美!多麼簡單的修復!非常感謝你的幫助。 –

+0

謝謝:),同樣,如果這個答案很有用,點擊Up Down箭頭下方的小複選標記將其標記爲問題的正確答案,並將您的問題標記爲關閉。 – Ben