2014-01-22 164 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。我认为这是 在这里不起作用的东西 - 它提示输入密码并且 失败。删除它,这应该工作正常,如果一切正常 设置。

相关问题