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

最初にテキストを配列に変換する必要があります。これは、現在実行していること,に正規表現パターンに a が含まれているためです

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

また、トリム操作を実行して改行も削除する必要がある場合があります。1 つのレコード セパレータに固執する方が簡単です。コンマや改行のように。両方ではありません。

テキストファイルからを削除すると、次の,ことができます

$stop_ips_masks = file('array.txt');
于 2013-07-27T07:59:01.843 に答える
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 に答える
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

あなたの問題は引用符と末尾のコンマだと思います。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 に答える