2014-01-22 162 views
0

我試圖讓一個簡單的PHP表單創建數據庫的備份。根據我迄今爲止的研究,最好的方法是使用PHP的exec函數。當我運行我的PHP腳本時,它在用戶apache下運行,並且exec函數的第二個和第三個參數分別返回並且空數組和1AWS:命令在命令行中工作,但不是PHP的可執行文件

當我登錄到我的AWS EC2實例並在傳遞給exec函數時複製/粘貼命令時,它執行得很好!我可以告訴的唯一區別是我以用戶ec2-user而不是apache登錄。我開始搞亂/etc/sudoers文件,但是所有這些都破壞了我的svn-post-commit-hook-update-project腳本(我之前創建的腳本是this tutorial)。

僅供參考,這裏有兩個數據庫副本的嘗試我做了,使用PHP和exec函數:

// method 1 
$command = "/usr/bin/sudo /usr/bin/mysqldump -u ".getDBUsername()." $password ".getDBDatabase()." | mysql -u ".getDBUsername()." $password $new_db"; 
$output = array(); 
$return = null; 
$output = exec($command, $output, $return); 
var_dump($output); 

第二次嘗試我甲肝埃馬德是管道的mysqldump的一個.sql文件,然後讀回它,但.sql文件永遠不會被填充(儘管它將被創建)。

// method 2 
$dump_command = "sudo mysqldump -u ".getDBUsername()." $password".getDBDatabase()." > ./temp.sql"; 
$output = null; 
$return_var = null; 
exec($dump_command, $output, $return_var); 
var_dump($output); 
exec("sudo mysql $new_db -u ".getDBUsername()." -p".getDBPassword()." < ./temp.sql"); 

注:

  1. $password不包含-p標籤,如果密碼設置(是的,沒有它和密碼之間有一個空格)。
  2. 我試圖通過chown命令給文件創建目錄(或者包含這些exec命令的.php腳本)到apache,但它沒有區別。

什麼嘗試的建議?我懷疑只是給用戶apacheec2-user已足夠的權限,但還沒有想出如何做到這一點,並且我的編輯/etc/sudoers迄今爲止只是破碎的東西。

回答

0

從別處得到這個答案,併爲我工作:

首先你不應該需要sudo來運行的mysqldump。我認爲這是 在這裏不起作用的東西 - 它提示輸入密碼並且 失敗。刪除它,這應該工作正常,如果一切正常 設置。

相關問題