我正在尝试exec()
在 php 中使用,但看起来我所有的努力都是徒劳的!
请帮助我:我的代码有什么问题?
$cmd = "mysqldump -u root my_db table1 table2 > /home/aditi/Desktop/databasedump.sql";
$res = exec($cmd , $ot , $res);
但我没有看到这个文件。但是当我在控制台上这样做时没有问题。
任何帮助将不胜感激。
代码是正确的。确保正在执行 PHP 文件的用户具有写入指定文件夹的权限。
几个可能的原因:
转储密码丢失:$cmd = "mysqldump -u root -pPassword my_db table1 table2 > /home/aditi/Desktop/databasedump.sql";
运行 shell 时,mysqldump 不在路径中:$cmd = "/usr/bin/mysqldump -u root -pPassword my_db table1 table2 > /home/aditi/Desktop/databasedump.sql";
不要忘记 webserver 进程以另一个用户身份运行,就像在 shell 中运行代码一样。确保网络服务器用户 ID 有权访问用于写入转储的文件夹。
您是否检查过其他使用 exec 的简单命令,例如 echo exec("pwd");。如果这不起作用,请检查您的域是否启用了安全模式。如果是,请关闭安全模式。如果该代码正在运行,请检查文件夹的路径和权限。
正如@Kalai 指出的那样,尝试其他简单的命令来查看是否exec
有效。
sudo
作为 PHP 用户并从 shell 执行同一行以查看它是否在 PHP 脚本之外工作。相关:https ://serverfault.com/questions/252552/sudoers-syntax-to-run-shell-script-as-php-user