首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP、system或passthru全部删除单引号或双引号。

PHP、system或passthru全部删除单引号或双引号。
EN

Stack Overflow用户
提问于 2011-12-15 22:58:50
回答 4查看 2.4K关注 0票数 2

当我尝试通过php的exec/passthru/system函数执行对shell的命令时,它似乎会从命令中删除引号。

代码语言:javascript
复制
$str_file = '1323988284_700.csv';
exec("/usr/bin/lftp -e 'set ftp:passive-mode true; set ftp:ssl-protect-data yes; put /web/files/{$str_file}; bye;' -u user,pass ftp://ftp.site.com/uploaddir/");

下面是检查过程的输出

代码语言:javascript
复制
ps faxxx | grep lftp
4486 ?        S      0:00  |       \_ /usr/bin/lftp -e set ftp:passive-mode true; set ftp:ssl-protect-data yes; put /web/files/1323988284_700.csv; bye; -u user,pass ftp://ftp.site.com/uploaddir/

正如您所看到的,它显示了运行中的过程,其中包含了单引号。这会导致lftp出错。

现在它只是挂起,直到我杀死它,我相信这是因为如果我在命令中键入进程列表中显示的内容,它将出错,并将您留在lftp shell中。

PHP Safemode关闭

我试过下面的引文

代码语言:javascript
复制
\'
\\'
\\\'
\\\\'
''
'''
''''

更新

我想在进一步测试的时候再加一句。如果我创建一个shell脚本(run_ftp.sh)并通过php运行该脚本,它也会从run_ftp.sh中删除引号。所以这让我觉得不是php造成了这个问题。

SELinux关机了。linux/bash是否有其他安全措施可以导致这种情况?

EN

回答 4

Stack Overflow用户

发布于 2012-07-11 22:44:11

有人看过lftp手册页吗?

它在“选项”项下说:

-e命令

-c命令执行给定的命令和出口

所以您的lftp挂起是因为您使用的是-e而不是-c。

它与PHP无关,也与去掉引号的shell无关。外壳总是这样做的,这就是它的工作原理。来自PS的输出并不意味着可以复制和粘贴。

票数 1
EN

Stack Overflow用户

发布于 2013-03-13 22:07:51

我找到了一个使用打开函数的解决方案。更复杂,但对我来说很好。

代码语言:javascript
复制
$command = "lftp -u $USER,$PASSWORD -e 'get /tmp/backup-2012-08-15.zip; bye' sftp://$HOST";

$io = array();            
$p = proc_open($command,
           array(1 => array('pipe', 'w'),
                 2 => array('pipe', 'w')), $io);

/* Read output sent to stdout. */
while (!feof($io[1])) {
    echo "STDOUT: ".fgets($io[1]);
}
/* Read output sent to stderr. */
while (!feof($io[2])) {
    echo "STDERR: ".fgets($io[2]);
}

fclose($io[1]);
fclose($io[2]);
proc_close($p);

这段代码的灵感来源于PHP外壳工具。PDT:抱歉,我的英语

票数 1
EN

Stack Overflow用户

发布于 2011-12-15 23:09:38

有一个自我解释的UNIX SHELL Quote教程,试试看!

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

https://stackoverflow.com/questions/8527817

复制
相关文章

相似问题

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