PHP shell_exec()没有执行 - 没有错误

时间:2015-11-02 19:23:09

标签: php linux shell

我为我的公司创建了这个数据库复制工具,一切都完全在本地运行。我把它同步到我们的工具服务器,现在它似乎无法执行我用shell_exec传递的shell命令。

$command  = "/usr/bin/mysqldump -v -u$dbUser -p$dbPass ";
$command .= "-h$sourceHost -P$sourcePort $sourceDB 2>../data/dump.log ";
$command .= "| /usr/bin/mysql -u$dbUser -p$dbPass ";
$command .= "-h$targetHost -P$targetPort $targetDB 2>../data/error.log";

$output = shell_exec($command);

我捕获了mysql转储的stderr输出,因为mysqldump实际上使用它来显示进度(转储此表,转储此表等)并且我从我的页面上的该文件中读取以显示进度。

甚至都没有创建指定的文件。这让我觉得存在某种权限问题。但是,我可以看到我的目录都具有与此服务器上的其他工具相同的权限。不排除它,但我不确定要进一步评估什么。

我尝试将shell_exec()更改为exec()并添加一个变量来捕获输出(exec($ command,$ shellOutput))并且$ shellOutput为空。

我在脚本形成之后回显了要运行的命令,并且能够在服务器上运行该命令而没有任何问题。

我在这里有点不知所措,因为它甚至没有给我任何反馈意见。关于我可以尝试的任何想法?

要添加上下文,这是$ .ajax调用以启动此转储的页面。在这个shell命令之后,有一个回复的数据库被复制,然后返回。所以页面被正确调用,似乎只是shell命令本身根本就不起作用。

提前致谢。

*另外值得注意的是,我们的目录结构是这样的,我们项目的www文件夹符号链接到服务器的documentRoot。

3 个答案:

答案 0 :(得分:2)

您可以尝试system("ur command 2>&1"); 这应该工作,如果没有输出,为什么它不起作用。

答案 1 :(得分:0)

我确定它与你的权限有关

ls -ld directory

如果问题是将模式chmod更改为您的偏好

答案 2 :(得分:0)

Etan说得对。对我来说,新文件是在它运行之前创建的(但它完全有道理)。我拿出文件,命令运行。我最终不得不授予apache写入项目中数据目录的权限。

仍然围绕着Linux权限。

谢谢大家。