php exec 没有按预期工作

标签 php ubuntu exec lamp mysql

我的系统:Ubuntu 11.10,LAMP Stack。

问题:

我在终端中运行以下命令,它会正确备份。

mysqldump -u root  dbBugTracker > BAK/dbw.sql

但我将它包含在我的 php 代码中,如下所示,但它不起作用。

exec('/usr/bin/mysqldump -u root  dbTracker > BAK/dbT.sql');

提示:

  • 我尝试在 exec 中放置第二个参数,但除了单词 Array 之外没有显示任何内容。我打印出来但里面什么也没有。
  • 文件 dbw.sql 实际上是作为 exec 函数的结果创建的,但它是 0 字节。
  • 我尝试使用完整路径而不使用 mysql,结果相同。即 0 个字节。
  • BAK 文件夹在我的项目文件夹中,我什至给了它 777 权限。
  • 甚至尝试了不同的文件名和数据库,但结果是一样的。

我很感激对此的任何意见。谢谢!

更多信息: 我将 2>&1 添加到 exec 行,现在该文件包含一些文本但不包含数据库转储。这是一个错误,我不知道如何处理:( 这是错误

mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect So this is what the output file (dbw.sql) now contains. Once again, it works fine when I run the dump from terminal.

最佳答案

您在命令行上以不同的用户身份运行该转储命令。使用 exec() 时,您正在将它作为 Apache(我假设)运行。尝试向 exec 命令添加一个密码参数,或者在您的数据库中创建一个具有适当权限的特定于 php 的用户。

更新:正如我所猜测的,您在使用 PHP 执行此转储时无法使用 root 用户。因此,创建一个新用户。

首先,从命令行登录到您的数据库。如果您是 root 用户,请不要费心使用 -u root:

mysql

现在您已登录,请继续创建一个新用户供 Apache 使用:

GRANT ALL ON database_name.* TO yourapacheuser@localhost IDENTIFIED BY 'yourpassword';

继续并注销 mysql:

exit

接下来,让我们稍微修改一下您的原始代码...

$db_user = 'newusername';
$db_pass = 'pass';

$command = "mysqldump --add-drop-table -u $db_user -p$db_pass database_name > backup.file.sql";
$output = `$command`;
echo "Your database has now been backed up.";

现在,要执行该文件,请从命令行运行:

php path/to/sqldumpfile.php

希望你能改编这个伪代码。祝你好运!

关于php exec 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10117350/

相关文章:

php - 无法从 laravel 中的 session 获取 $id

PHP 里面的 javascript 函数?

r - 在 Ubuntu xenial 中升级 R

用于创建根符号链接(symbolic link)的 PHP exec 权限

php - imagemagick 在/usr/bin 中执行,但新版本在/usr/local/bin - php exec 路径

javascript - 每个浏览器 session 弹出一次 cookie

phpmyAdmin 错误我不明白

python - 如何从 Python 在终端上执行多个命令

ubuntu - libext2fs 代码不工作

c++ - 在 Linux 中创建子进程并处理可能失败的最佳方法