2012-08-12 67 views
1

我試圖創建通過PHP的exec一個.tgz的文件()一個TGZ文件;函數在AJAX Web界面中,但是,我的代碼沒有製作任何文件,也沒有寫出任何錯誤。創建通過PHP的exec()

這個代碼在外殼:

tar cvfz destination/testfolder.tgz source/testfolder 

我設置destination/testfolder.tgzsource/testfolder作爲PHP變量,因爲他們改變基於用戶輸入的,所以我的代碼看起來是這樣的:

$q=$_GET["q"]; 
$part = explode("/", $q); 
$source = $q; 
$dest = "destination/" .$part[1].".tgz"; 
exec("tar cvfz " . $dest . " " . $source); 

我呼應"tar cvfz " . $dest . " " . $source和複製/粘貼成外殼,裏面的作品,所以我很困惑,我在做什麼錯。

+2

可能是一個權限問題 – 2012-08-12 20:36:46

+2

只是作爲一個觀察,你必須要非常小心,並直接將一個'_GET'可變進外殼。我可以輕鬆通過'; rm -rf /'到GET變量中,然後整個服務器將被刪除。 – David 2012-08-12 20:37:10

+1

像Dagon說的那樣,它可能是權限。 _Temporarily_做'chmod -R 777/path/to/the/directory'來查看是否有問題。然後,出於安全原因逐步退出權限。 – David 2012-08-12 20:38:01

回答

1

的問題是,對於相同的安全問題提到@大衛,PHP的exec()函數具有非常有限的權限 - 它甚至不能創建文件。相反chmodding文件爲777,這是非常危險甚至是暫時的,我建議你要麼在沙箱或在任何非有害的位置創建一個臨時文件夾,然後CH 自己它給用戶/組PHP解釋器的用戶/組的權限有所限制(例如chmod 700爲目錄,600爲內部文件)。

+0

這和其他評論將爲我工作,我可能只是將他們留給默認文件夾(因爲這是個人使用),但謝謝! – John 2012-08-12 20:51:27