2014-12-01 148 views
0

以下命令查找文件的目錄,並壓縮它,它運作良好PHP shell執行創建動態命令

$command = "cd {$root}/files && mkdir -p {$identifier} && zip -jFS -0 {$root}{$zipname} 2491/'test&.txt'"; 
    exec($command); 

但是修改文件作爲變量沒有被允許shell執行,下面的代碼無法正常工作

$container_name = "2491"; 
$files = Array ('0' => 'test&.txt' ,'1' => 'test5.txt','2' => 'test6.txt'); 
$files = " " . $container_name . "/'" . implode("' " . $container_name . "/'", $files) . "'"; 
$files = str_replace('$', '\$', $files); 
$command = "cd {$root}/files && mkdir -p {$identifier} && zip -jFS -0 {$root}{$zipname} {$files}"; 
exec($command); 

$ root,$ identifier,$ zipname不會導致問題,它的$ files有什麼問題?

更新

執行前的var_dump爲$命令:

string(128) "cd /var/www/files && mkdir -p zip--1 && zip -jFS -0 /var/www/files/zip--1/1002_22-06022-06022-_content.zip 2491/'test&.txt'" 

其中,如果我執行的

exec("cd /var/www/files && mkdir -p zip--1 && zip -jFS -0 /var/www/files/zip--1/1002_22-06022-06022-_content.zip 2491/'test&.txt'"); 

運行完美

錯誤的回覆:

zip錯誤:無事可做! (/var/www/files/zip--1/1002_22-06022-06022-_content.zip)

+1

你可以在執行後發佈'$ command'變量的輸出嗎? – preinheimer 2014-12-01 15:51:46

+0

執行該命令之前,轉儲它並檢查它是否與不使用變量時完全相同。 – vaso123 2014-12-01 15:51:46

+0

@preinheimer得到zip錯誤:無事可做! (/var/www/files/zip--1/1002_22-06022-06022-_content.zip)作爲命令執行響應。 – arpitr 2014-12-01 16:04:01

回答

0

我弄明白了,問題是文件名爲'&',這個文件名正在追溯到'&',從而違反了命令。爲了得到它,我使用[htmlspecialchars_decode]傳遞了文件名。 1