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

问题描述:

我为我的公司创建了这个数据库复制工具,并且一切都在本地完全运行。我rsync'ed它到我们的工具服务器,现在看来它无法执行我与shell_exec传递的shell命令。PHP shell_exec()没有执行 - 没有错误

$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。

+0

您确定您正在寻找这些文件的正确位置吗?你确定你有权写入这些日志文件应该写入的位置吗?正在运行的命令与创建这些文件没有任何关系。在它运行命令之前,shell自己创建这些文件。 –

+0

那么,这是我有一个想法,这与符号链接。我的结构是一个project_folder> www,bin,数据,日志。我的www文件夹与我们的/ www/html文件夹是符号链接的,它是我们的Web服务器的文档根目录。所以,当我做../data(到我的项目文件夹中的数据文件夹)是否正确?或者我应该做某种绝对路径到我的项目文件夹? 我有一个类似的问题让我的项目识别我的query.js文件,必须将它移动到www/includes之前,它是一个目录下来。 – Jacob

+0

实际上,我不知道为什么我之前没有这样做,但是我完全取出了这些文件,并且它可以正常工作。所以它必须是基于权限的。对于那个很抱歉。 – Jacob

Etan说得对。对我而言,这些文件是在它运行之前创建的(但它是完全有意义的)对我来说是新东西。我拿出这些文件,然后命令就运行了。我最终不得不给apache权限写入我的项目中的数据目录。

还围绕着linux权限包装我的头。

谢谢大家。

敢肯定它与您的权限做

ls -ld directory 

如果那是问题的变化模式chmod根据自己的喜好

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