此代码正常运行:
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"
请帮帮忙?
答案 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
)