Php 转义shell_exec

Php 转义shell_exec,php,escaping,shell-exec,Php,Escaping,Shell Exec,我可以运行以下命令: echo shell_exec ("tail -n 500 /var/log/website.com_access_log | cut -d' ' -f1 | sort | uniq -c | sort -gr | head -10"); 但我无法运行此(在终端中工作): 不返回任何内容或“500”(此处为胡言乱语) 显然,这与逃跑有关。在本例中,PHP仅转义“。 我尝试了escapeshellarg()和escapeshellcmd(),但没有成功(不返回任何内容

我可以运行以下命令:

echo shell_exec ("tail -n 500 /var/log/website.com_access_log | cut -d' ' -f1 | sort | uniq -c | sort -gr | head -10");   
但我无法运行此(在终端中工作):

不返回任何内容或“500”(此处为胡言乱语)

显然,这与逃跑有关。在本例中,PHP仅转义

我尝试了
escapeshellarg()
escapeshellcmd()
,但没有成功(不返回任何内容)。A还使用
\\,\\\,\\\\
测试了转义


这里出了什么问题?我应该逃避什么?

使用单引号可以解决问题。另外,在第一个捕获组中添加
可以捕获IPv6地址

echo shell_exec ('tail -n 500 /var/log/website.com_access_log | sed -e \'s/^\([[:digit:]:\.]*\).*\"\(.*\)\"$/\1 \2/\' | sort | uniq -c | sort -gr | head -10');
产出:

474 127.0.0.1 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0
 19 ::1 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.xx (KHTML, like Gecko) Chrome/64.0.xxx.xxx Safari/xxx.xx
  7 ::1 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.xx (KHTML, like Gecko) Ubuntu Chromium/64.0.xxx.xx Chrome/64.0.xxx.xxx Safari/xxx.xx

可以创建一个生成此命令行的bash脚本,并使用
shell_exec()调用此脚本
应该更容易些?听起来不错,谢谢。如果没有解决方案,我会这么做。还有,为什么不使用单引号来包装cmd,然后你只需要逃出里面的2,这不会影响你的正则表达式。对不起,@lawrencerone我没有看到你的评论。如果你想做你的,我可以删除我的anwser。我总是忘记这个单引号/双引号otes的不同之处。感谢IPv6。顺便说一句,我刚刚搞乱了本地日志(127.0.0.1),这里有一个解决方案,不保存它们@Qiao interest。谢谢。
474 127.0.0.1 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0
 19 ::1 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.xx (KHTML, like Gecko) Chrome/64.0.xxx.xxx Safari/xxx.xx
  7 ::1 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.xx (KHTML, like Gecko) Ubuntu Chromium/64.0.xxx.xx Chrome/64.0.xxx.xxx Safari/xxx.xx