【问题标题】:Check Files In Directory Are Modified检查目录中的文件是否被修改
【发布时间】:2015-02-10 17:42:55
【问题描述】:

我需要将 CodeIgniter 编写的 PHP 应用程序部署到客户端的 Web 服务器(CentOS 5 或 6)。由于 PHP 是脚本语言,它不需要编译成二进制代码进行部署。客户可能会在不通知我的情况下自行修改 PHP 程序。如果客户修改了导致应用程序出现故障的程序,我们需要额外的人力来找到他们的修改并修复它。

所以我想做一些可以让我知道应用程序的任何文件(php、css、html 等)在我部署后被修改的东西。有没有人建议的方法?

谢谢,

【问题讨论】:

    标签: php codeigniter centos checksum


    【解决方案1】:

    使用filemtime()

    int filemtime ( string $filename )
    

    这个PHP函数返回一个文件的数据块被写入的时间,即文件内容被改变的时间。

    <?php
    // outputs e.g.  somefile.txt was last modified: December 12 2014 09:16:23.
    
    $filename = 'somefile.txt';
    if (file_exists($filename)) {
        echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
    }
    ?>
    

    要获取目录的最后修改时间,可以这样:

    <pre>
    $getLastModDir = filemtime("/path/to/directory/.");
    </pre>
    

    记下将目录视为文件并实际获取其最后修改日期所需的最后一个点。

    当您只想在网站首页上显示一条“上次更新”消息并且仍将网站的所有文件考虑在内时,这会派上用场。

    要获取某个远程文件的修改日期,您可以使用 codewalker dot com 上记事本的 fine 功能(由 web dot de 的 dma05 和 lillesvin dot net 的 madsen 改进) .

    但是您现在可以使用stream_get_meta_data (PHP>4.3.0) 更轻松地获得相同的结果。

    但是,如果发生某些重定向,可能会出现问题。在这种情况下,服务器 HTTP 响应不包含 Last-Modified 标头,但有一个 Location 标头指示在哪里可以找到文件。下面的函数负责任何重定向,甚至是多次重定向,以便您到达您想要最后修改日期的真实文件。

    <?php
    
    // get remote file last modification date (returns unix timestamp)
    function GetRemoteLastModified( $uri )
    {
        // default
        $unixtime = 0;
    
        $fp = fopen( $uri, "r" );
        if( !$fp ) {return;}
    
        $MetaData = stream_get_meta_data( $fp );
    
        foreach( $MetaData['wrapper_data'] as $response )
        {
            // case: redirection
            if( substr( strtolower($response), 0, 10 ) == 'location: ' )
            {
                $newUri = substr( $response, 10 );
                fclose( $fp );
                return GetRemoteLastModified( $newUri );
            }
            // case: last-modified
            elseif( substr( strtolower($response), 0, 15 ) == 'last-modified: ' )
            {
                $unixtime = strtotime( substr($response, 15) );
                break;
            }
        }
        fclose( $fp );
        return $unixtime;
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 2018-04-02
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多