gpt4 book ai didi

php - AWS : Command works in command line, 但不是 PHP 的 exec

转载 作者:行者123 更新时间:2023-11-30 00:46:50 26 4
gpt4 key购买 nike

我试图允许一个简单的 PHP 表单来创建数据库的备份。根据我迄今为止的研究,最好的方法是使用 PHP 的 exec 函数。当我运行 PHP 脚本时,它在用户 apache 下运行,并且 exec 函数的第二个和第三个参数分别返回空数组和 1

当我登录到我的 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,但没有产生任何影响.

关于尝试什么有什么建议吗?我怀疑只需向用户 apache 授予 ec2-user 的权限就足够了,但还没有弄清楚如何做到这一点,再说一遍,我对 的编辑/etc/sudoers 到目前为止只破坏了一些东西。

最佳答案

在其他地方得到这个答案并为我工作:

First off you shouldn't need to sudo to run mysqldump. I assume that's the thing that's not working here - it's prompting for a password and failing. Remove that and this should work fine if everything else is set properly.

关于php - AWS : Command works in command line, 但不是 PHP 的 exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21296460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com