我是一个使用PHP的新人。我想在PHP中使用awk。
我有一个名为a
的文件。内容是:
www.b.com * record=600,IN,A,1.2.3.4record=600,IN,A,5.6.7.8
www.1.com u record=600,IN,A,1.2.3.4
www.1.com w record=600,IN,A,1.2.3.4
现在我使用PHP来处理它。
<?php
$dn = "www.1.com";
$hello = shell_exec("awk '{ if ( $1==".$dn.")print $1}' a") ;
echo $hello;
?>
它不起作用 - 你能告诉我为什么吗? 如果我以其他方式使用它,它确实有用。
$hello = shell_exec("awk '{ if ( $1==\"www.b.com\")print $1}' a") ;
答案 0 :(得分:6)
awk
将$dn
视为字符串文字,因此您需要引用awk
中的字符串,这是您在测试示例中所做的:
$dn = "www.1.com";
$hello = shell_exec("awk '{ if ( $1==\"".$dn."\")print $1}' a") ;
// ---------------------------------^^^-------^^^
// Surround in escaped double quotes...
echo $hello;
如果字符串$dn
来自任何类型的用户或浏览器输入,请务必先使用escapeshellarg()
或escapeshellcmd()
正确转义它。由于escapeshellarg()
添加了单引号,这可能在这里没有用,但通常用于转义整个命令的escapeshellcmd()
至少可以转义任何内部引号或其他可能出现的错误字符{ {1}}。