簡體   English   中英

轉義 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:]\.]*\).*\"\(.*\)\"$/\1 \2/' | 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM