1

我在 php 中有下一个代码

<?
$stop_ips_masks = array(
        "66\.249\.[6-9][0-9]\.[0-9]+", 
        "74\.125\.[0-9]+\.[0-9]+", 
    );
foreach ( $stop_ips_masks as $k=>$v )
{
    if ( preg_match( '#^'.$v.'$#', $_SERVER['REMOTE_ADDR']) )
        echo found;
}
?>

它工作正常。但是我想从txt文件中加载这个数组,所以我写了代码

<?
$stop_ips_masks = file('array.txt');
foreach ( $stop_ips_masks as $k=>$v )
{
    if ( preg_match( '#^'.$v.'$#', $_SERVER['REMOTE_ADDR']) )
        echo found;
}
?>

array.txt 在哪里

"66\.249\.[6-9][0-9]\.[0-9]+",
"74\.125\.[0-9]+\.[0-9]+",

并且此代码不起作用。请帮助我的代码有什么问题?

4

4 回答 4

1

你需要先将你的文本转换成数组,因为你现在所做的包括,你的正则表达式模式

$stop_ips_masks = file_get_contents('array.txt');
$stop_ips_masks = explode("," $stop_ips_masks);

您可能还需要执行修剪操作并删除换行符。如果你坚持一个记录分隔符会更容易。像逗号或换行符。不是都。

如果你,从你的文本文件中删除,那么你可以做

$stop_ips_masks = file('array.txt');
于 2013-07-27T07:59:01.843 回答
0

我相信您的问题是引号和尾逗号。虽然需要在 php 中创建一个数组,但从文件中获取它们是无效的。

    $stop_ips_masks = file('array.txt', FILE_IGNORE_NEWLINES);
    foreach ( $stop_ips_masks as $k=>$v )
    {
          $v = trim(rtrim($v, ","), '"');
          if ( preg_match( '#^'.$v.'$#', $_SERVER['REMOTE_ADDR']) )
          echo found;
    }
于 2013-07-27T08:06:29.353 回答
0

另一种选择是将您的字符串“原始”作为行存储在文件中:

66\.249\.[6-9][0-9]\.[0-9]+
74\.125\.[0-9]+\.[0-9]+

然后读取文件,将每一行放入数组中:

$array = file('array.txt');
于 2013-07-27T16:02:24.007 回答
0

尝试类似的东西;

<?
$file = file('array.txt');
$stop_ips_masks = explode(",",$file);
foreach ( $stop_ips_masks as $k=>$v )
{
    if ( preg_match( '#^'.$v.'$#', $_SERVER['REMOTE_ADDR']) )
        echo found;
}
?>
于 2013-07-27T16:15:59.120 回答