从文件中读取数组

时间:2013-07-27 07:56:06

标签: php arrays file

我在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 个答案:

答案 0 :(得分:1)

您需要先将文本转换为数组,因为您现在正在执行的操作包含正则表达式模式中的,

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

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

如果从文本文件中删除,,则可以执行

$stop_ips_masks = file('array.txt');

答案 1 :(得分: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;
    }

答案 2 :(得分:0)

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

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

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

$array = file('array.txt');

答案 3 :(得分: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;
}
?>