【发布时间】:2015-12-15 00:59:22
【问题描述】:
我在 PHP 中使用 shell_exec() 函数遇到了一个有趣的情况。此命令有效:
$res = shell_exec("mdb-export -D \"%d/%m/%y\" ".$this->mdbFileName." ".$tableName." &> " . $outputFile);
但是,这个命令不起作用:
$res = shell_exec("mdb-export -D \"%d/%m/%y\" ".$this->mdbFileName." \"".$tableName."\" &> " . $outputFile);
在 shell 中输入命令时(无论哪种方式 - 表名周围有或没有引号),它都可以正常工作。我真的很想知道为什么第一组转义引号不会影响 shell_exec():
\"%d/%m/%y\"
但是第二组:
\"".$tableName."\"
不允许 shell_exec 执行。仅供参考:脚本中的所有文件名变量都是完整的文件路径。在 shell 中测试时,它们以完全相同的方式输入。有什么想法吗?
编辑:失败时,shell_exec 返回 NULL 并且命令不被执行。
【问题讨论】:
-
不要只是说它不起作用,而是提供错误消息或进一步了解实际问题。
-
嗨,德文郡,没有错误消息。 shell_exec() 返回 NULL 并且命令不被执行。我将编辑我的帖子以反映这一点。
-
尝试在没有重定向的情况下回显它。 shell_exec("echo mdb-export...");看看实际执行了什么。
-
刚从实际脚本中试了一下,得到了一个空的回声。但是,您让我想到了 return var,我尝试将其放入另一个仅包含 shell_exec 的文件中,并且 shell_exec 执行了该命令。我现在认为除了 shell_exec() 之外,我的脚本一定有问题......一旦我弄清楚发生了什么,如果它们与传递给 shell_exec() 的引号的使用有关,我将发布我的发现。
标签: php shell-exec