老师让我做一个网页防篡改系统的php编程。但是从来都没学过php,更没编过网页。看起来简单但做起来相当棘手。在此拜托各位大虾。
要求:大概需要2个页面。
第一个页面,用php访问一个目录下的所有文件,显示所有文件名并计算出该文件的MD5码,并把这些MD5码储存在数据库中。
第二个页面,还是用php访问该目录中的所有文件(某些文件的内容有所修改),显示所有文件名和MD5码。然后将这次的MD5码与上次储存在数据库中的MD5进行比较。如果相同表示文件没被修改过,如果不同表示文件被修改过。显示出这个结果。
我用的是XAMPP(Apache+MySQL+PHP+PERL)平台来搭建的。
可加好友,或发邮件[email protected]

解决方案 »

  1.   

    基本上看看PHP Filesystem 函数和mysql函数、md5相关信息以后,随便都知道怎么写了啊!
      

  2.   


    1.创建表:至少应包含文件的绝对路径与相应的md5值这两个字段
    2.写一个遍历文件夹下所有文件的方法:我这有一个,文件路径作为参数,便会返回一个包含此文件夹中所有文件路径的一维数组:/**
    * parmeter $dir 文件夹路径
    * parmeter &$dir_array 获取的文件夹下所有文件的数组
    */
    function scanfile($dir,&$dir_array = array()){
    if (is_dir($dir)){
    $scandirs = scandir($dir);
    foreach ($scandirs as $scandir){
    if ($scandir != '.' and $scandir != '..'){
    $scandir = $dir.'/'.$scandir;
    if (is_file($scandir)){
    $dir_array[] = $scandir;
    }elseif (is_dir($scandir)){
    scanfile($scandir,$dir_array);
    }
    }
    }
    }
    }3.遍历这个文件数组,使用md5_file($filename)函数生成文件的md5码,连同相应的文件路径(建议使用绝对路径)存入数据库
    4.再次访问文件夹下的文件时根据文件路径找到数据库中的相应结果行,如果有,就把现在的使用md5_file($filename)函数生成的md5码与数据库中的比较,不相同的话就说明文件是被修改过的.这是基本思路,然后学点PHP语法,百度一下就搞定了
      

  3.   

    MD5入库判断精确度确实高,但是如果要求严格度不是很高的话,可以考虑用COOKIE的文件修改时间来达到这种效果,参考代码如下:<?php
    function getchange($dir){
       foreach(glob($dir) as $files)
    {
        $file=pathinfo($files);
    $filename=$file['filename'];
    setcookie($filename,date("Y-m-d h:i:s",filemtime($files)),time()+3600);
     if(strtotime($_COOKIE[$filename])!=strtotime(date("Y-m-d h:i:s",filemtime($files))))
     echo "<font color='red'>文件:".$files."被修改过,修改时间为:".date("Y-m-d h:i:s",filemtime($files))."</font><br/>";
     else
     echo "文件:".$files."<br/>";
    }
    }
    getchange("system/*.*");//获取站点根目录下system目录下的所有文件,不包括目录,如果要目录就用system/*
    ?>