2

我是使用 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") ;
4

1 回答 1

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()or正确转义它escapeshellcmd()。由于escapeshellarg()添加了单引号,这在这里可能没有用,但escapeshellcmd()通常用于转义整个命令,至少可以转义任何内部引号或其他可能出现的错误字符$dn

于 2012-08-21T13:19:54.860 回答