转义 shell_exec
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");
但我不能运行这个(在终端中工作):
echo shell_exec ("tail -n 500 /var/log/website.com_access_log | sed -e 's/^\([[:digit:]\.]*\).*\"\(.*\)\"$/ /' | sort | uniq -c | sort -gr | head -10");
returns 什么都没有或“500”(这里是乱码)
很明显,跟转义有关系。在示例中,只有 "
被转义为 PHP。
我尝试了 escapeshellarg()
和 escapeshellcmd()
但没有成功(returns 什么都没有)。 A 还测试了使用 \, \\, \\
转义 \。
这里有什么问题?我应该逃避什么?
使用单引号解决问题。此外,在您的第一个捕获组中添加 :
允许获取 IPv6 地址。
echo shell_exec ('tail -n 500 /var/log/website.com_access_log | sed -e \'s/^\([[:digit:]:\.]*\).*\"\(.*\)\"$/ /\' | 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
我可以运行这个:
echo shell_exec ("tail -n 500 /var/log/website.com_access_log | cut -d' ' -f1 | sort | uniq -c | sort -gr | head -10");
但我不能运行这个(在终端中工作):
echo shell_exec ("tail -n 500 /var/log/website.com_access_log | sed -e 's/^\([[:digit:]\.]*\).*\"\(.*\)\"$/ /' | sort | uniq -c | sort -gr | head -10");
returns 什么都没有或“500”(这里是乱码)
很明显,跟转义有关系。在示例中,只有 "
被转义为 PHP。
我尝试了 escapeshellarg()
和 escapeshellcmd()
但没有成功(returns 什么都没有)。 A 还测试了使用 \, \\, \\
转义 \。
这里有什么问题?我应该逃避什么?
使用单引号解决问题。此外,在您的第一个捕获组中添加 :
允许获取 IPv6 地址。
echo shell_exec ('tail -n 500 /var/log/website.com_access_log | sed -e \'s/^\([[:digit:]:\.]*\).*\"\(.*\)\"$/ /\' | 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