AWS:命令在命令行中工作,但不是PHP的可执行文件
问题描述:
我试图让一个简单的PHP表单创建数据库的备份。根据我迄今为止的研究,最好的方法是使用PHP的exec函数。当我运行我的PHP脚本时,它在用户apache
下运行,并且exec函数的第二个和第三个参数分别返回并且空数组和1
。AWS:命令在命令行中工作,但不是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");
注:
-
$password
不包含-p
标签,如果密码设置(是的,没有它和密码之间有一个空格)。 - 我试图通过
chown
命令给文件创建目录(或者包含这些exec命令的.php脚本)到apache,但它没有区别。
什么尝试的建议?我怀疑只是给用户apache
ec2-user
已足够的权限,但还没有想出如何做到这一点,并且我的编辑/etc/sudoers
迄今为止只是破碎的东西。
答
从别处得到这个答案,并为我工作:
首先你不应该需要sudo来运行的mysqldump。我认为这是 在这里不起作用的东西 - 它提示输入密码并且 失败。删除它,这应该工作正常,如果一切正常 设置。