0

我正在尝试exec()在 php 中使用,但看起来我所有的努力都是徒劳的!

请帮助我:我的代码有什么问题?

$cmd = "mysqldump -u root my_db table1 table2 > /home/aditi/Desktop/databasedump.sql";              
$res = exec($cmd , $ot , $res);

但我没有看到这个文件。但是当我在控制台上这样做时没有问题。

任何帮助将不胜感激。

4

4 回答 4

1

代码是正确的。确保正在执行 PHP 文件的用户具有写入指定文件夹的权限。

于 2012-09-13T10:46:21.857 回答
1

几个可能的原因:

  • 转储密码丢失:$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 有权访问用于写入转储的文件夹。

于 2012-09-13T10:46:27.363 回答
1

您是否检查过其他使用 exec 的简单命令,例如 echo exec("pwd");。如果这不起作用,请检查您的域是否启用了安全模式。如果是,请关闭安全模式。如果该代码正在运行,请检查文件夹的路径和权限。

于 2012-09-13T11:04:52.547 回答
1
  1. 正如@Kalai 指出的那样,尝试其他简单的命令来查看是否exec有效。

  2. sudo作为 PHP 用户并从 shell 执行同一行以查看它是否在 PHP 脚本之外工作。相关:https ://serverfault.com/questions/252552/sudoers-syntax-to-run-shell-script-as-php-user

于 2012-09-13T11:09:13.043 回答