首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP shell_exec()命令中引号的用法

PHP shell_exec()命令中引号的用法
EN

Stack Overflow用户
提问于 2015-12-15 08:59:23
回答 1查看 774关注 0票数 0

我在PHP中的shell_exec()函数遇到了一个有趣的情况。此命令有效:

代码语言:javascript
运行
复制
$res = shell_exec("mdb-export -D \"%d/%m/%y\" ".$this->mdbFileName." ".$tableName." &> " . $outputFile);

但是,此命令不起作用:

代码语言:javascript
运行
复制
$res = shell_exec("mdb-export -D \"%d/%m/%y\" ".$this->mdbFileName." \"".$tableName."\" &> " . $outputFile);

当在shell中输入命令时(无论采用哪种方式-在表名两边加引号或不加引号),它都能正常工作。我真的很想知道为什么第一组转义引号不影响shell_exec():

代码语言:javascript
运行
复制
\"%d/%m/%y\"

但第二组:

代码语言:javascript
运行
复制
\"".$tableName."\"

不允许执行shell_exec。仅供参考:脚本中的所有文件名变量都是完整的文件路径。在shell中测试时,它们是以完全相同的方式输入的。有什么想法吗?

EDIT:失败时,shell_exec返回NULL,不执行命令。

EN

回答 1

Stack Overflow用户

发布于 2015-12-15 09:53:36

经过进一步测试,$tableName变量似乎包含了额外的空格。程序的另一部分是从MDB文件中提取表名,并在后面留下一个空格。

当回显$tableName变量时,一切看起来都很好,因为空格是不可见的。在运行没有用引号括起表名的shell_exec时,会执行命令,因为如果参数之间有额外的空格,则不会发生错误。但是,当用引号将变量括起来时,mdb-export程序开始查找:

代码语言:javascript
运行
复制
"tableName " 

而不是

代码语言:javascript
运行
复制
"tableName" 

导致一个无声的,但彻底的失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34279320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档