从其他服务器读取文件

时间:2014-03-28 10:18:21

标签: php ip

原因: 我是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文件(数组)? 我们真的很感激代码的一个例子。

由于

2 个答案:

答案 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)

这里你能做什么:

  1. 在您的某台服务器上创建一个已阻止的IP文件。

    • 例如filename = blockip.txt

    • blockip.txt的内容: 91.200.14.59,91.207.7.141 ..

  2. 确保可以通过http协议访问该文件。        例如:http://www.example.com/blockip.txt

  3. 在您的应用程序服务器上,创建一个函数,该函数将读取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地址。

  4. 每当你有了新的IP地址,你只需要更新blockip.txt文件,休息一切都将由函数check_span_user()来处理。