2015-03-02 36 views
0

尝试使用PHP实现自动建议。用awk使用PHP变量为awk正则表达式命令

$input= $_GET["term"]; 
    $suggest=array(); 
    exec('awk \'BEGIN{FS=","}/.$input./{print $2,"-cost-",$1}\' 3.txt',$suggest); 
    echo json_encode($suggest) 

到位$输入测试自动提示的我使用的是charachrecter eg.A生成自动提示列表,做工精细。但是我无法将动态角色作为awk的输入。 。$ input有些问题。无法弄清楚如何写的转义字符

在此先感谢

+0

你确定用GET参数代入shell命令unsanitized是个好主意吗?如果我去你的网站并通过'term ='; rm -Rf /#',你不太可能会喜欢这个结果。 – Wintermute 2015-03-02 19:59:22

回答

1

打开

exec('awk \'BEGIN{FS=","}/.$input./{print $2,"-cost-",$1}\' 3.txt',$suggest); 

分为:自

exec('awk \'BEGIN{FS=","}/'.$input.'/{print $2,"-cost-",$1}\' 3.txt',$suggest); 

你忘了终止第一',这是必需的,您无法在单引号字符串内展开变量。

备注:正如评论中指出的那样,您可能想要盲目地接受GET参数作为shell命令,而没有进行某种安全检查。用户可以并且将很快找到一种方法来利用这个漏洞...

+0

我认为一个更好的解决方案是在执行调用之前调用'putenv(“input = $ input”)'并用'exec('awk -F,-v input =“$ input”\ '$ 0〜input {print $ 2,“-cost-”,$ 1} \'3.txt',$ suggest)'或者更好的是,使用'proc_open'来做同样的事情。免责声明:代码未经测试,生锈的php-fu。 – Wintermute 2015-03-02 20:07:03

+0

感谢您的及时回复。 @Wintermute能否请你提供一些关键词,以便更多地了解安全检查 – user1869714 2015-03-03 14:30:34

+0

@ user1869714是的我倾向于同意Wintermute的评论。由于我对PHP非常生疏,因此我不会试图用任何进一步的建议来破坏答案,但请仔细研究一下。 – 2015-03-03 17:27:01