我制作的PHP Blocker无法正常工作

时间:2017-11-07 02:46:47

标签: php php-7 php-5.3

此代码正常运行:

https://www.skools.cu.ma/contents/posts/Comma.php

<?php
    require ('./../../blocks/block_function.php');
?>

https://www.skools.cu.ma/blocks/block_function.php

<?php
    $badcomment_comma_post = array("137.97.11.13", "222.222.222", "333.333.333");
    if ( in_array ($_SERVER['REMOTE_ADDR'], $badcomment_comma_post) ) { 
       die("<script>window.location = 'https://www.skools.cu.ma/blocks/bad_comment.php';</script>You have been blocked");
    }
?>

但是当我尝试分离ip地址和重定向器代码时,它没有用,我没有收到PHP错误消息:

https://www.skools.cu.ma/blocks/block_function.php

<?php 
    $file = file_get_contents('./../../blocks/bad_commented_ip.txt'); 
    $badcomment_comma_post = array($file);
    if ( in_array ($_SERVER['REMOTE_ADDR'], $badcomment_comma_post) ) {
        die("<script>window.location = 'https://www.skools.cu.ma/blocks/bad_comment.php';</script>You have been blocked");
    }
?>

https://www.skools.cu.ma/blocks/bad_commented_ip.txt

"137.97.11.13", "222.222.222", "333.333.333"

请帮帮忙?

1 个答案:

答案 0 :(得分:1)

您遇到的问题是:

$file = file_get_contents('./../../blocks/bad_commented_ip.txt'); 
$badcomment_comma_post = array($file);

实际上正在做的事情(如果你print_r($badcomment_comma_post);)正在使用整个文件的值制作一个数组元素。不是每个IP的多个数组元素:

Array
(
    [0] => "137.97.11.13", "222.222.222", "333.333.333"
)

如果您的文件实际上采用"137.97.11.13", "222.222.222", "333.333.333"格式,请考虑以下示例:

// Example 1, explode!
$file = file_get_contents('./../../blocks/bad_commented_ip.txt');
$cleaned = str_replace(array('"',' '),'',$file);
$badcomment_comma_post = explode(',',$cleaned);

正在做的是读取文件,删除所有引号和空格,然后使用逗号进行爆炸以制作所需的数组。

另一种方法是使用文件中的json(但文件内容不完全正确):

// Example 2, json!
$file = file_get_contents('./../../blocks/bad_commented_ip.txt');
$json = '['. $file .']';
$badcomment_comma_post = json_decode($json);

那么它的作用是取文件内容,将它们包装在括号中,以便它更好的json格式,然后最终将json数组解码为php数组。

以上两个示例将输出print_r($badcomment_comma_post);

Array
(
    [0] => 137.97.11.13
    [1] => 222.222.222
    [2] => 333.333.333
)