原因: 我是7个网站的网站管理员,为了管理联系表单上不需要的评论,我阻止了评论员的IP。每当我得到一个新的坏IP时,我必须编辑所有7个服务器上的每个联系表单,这非常耗时。我想要的是将IP地址放在我的服务器上的1个文件中,然后阅读我的所有其他网站。
当前代码:(我缩短了IP阵列)
<?php
$deny = array("91.200.14.59", "91.207.7.141");
if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
header("location: index.php?page=error404");
exit();
} ?>
需要回答: 如何让上面的代码从另一台服务器读取IP文件(数组)? 我们真的很感激代码的一个例子。
由于
答案 0 :(得分:0)
我将以相反的方式解决这个问题:在本地保持列表最新(在版本控制存储库中),并使用部署工具推送更改。例如,Ansible是一个简洁的小工具。配置示例:
---
- hosts: comment-forms
tasks:
- name: Ensure blacklist is up to date
copy: src=blacklist.txt
dest=/var/www/conf/blacklist.txt
owner=www-data
group=www-data
mode=440
每当您更新列表时进行部署:
$ ansible-playbook blacklist.yml
一旦你设置它就很容易。这意味着您无需始终从服务器发出昂贵的远程请求。
答案 1 :(得分:0)
这里你能做什么:
在您的某台服务器上创建一个已阻止的IP文件。
例如filename = blockip.txt
blockip.txt的内容: 91.200.14.59,91.207.7.141 ..
确保可以通过http协议访问该文件。 例如:http://www.example.com/blockip.txt
在您的应用程序服务器上,创建一个函数,该函数将读取blockip.txt文件并与远程ip进行比较。 例如:
<?php function check_spam_user($remote_ip){
$x = file_get_content('http://www.example.com/blockip.txt');
if(strpos($x,$remote_ip) === FALSE){
//real user
}
else {
//spammers
}
} ?>
您可以使用任何逻辑来读取文件和比较IP地址。
每当你有了新的IP地址,你只需要更新blockip.txt文件,休息一切都将由函数check_span_user()来处理。