检查目录中的文件是否已修改

时间:2014-12-12 03:36:04

标签: php codeigniter centos checksum

我需要将CodeIgniter编写的PHP应用程序部署到客户端的Web服务器(CentOS 5或6)。由于PHP是脚本语言,因此无需编译为二进制代码进行部署。客户端有机会自行修改PHP程序而不通知我。如果客户修改了使应用程序无序的程序,我们需要额外的人力来找到他们的修改并修复它。

所以我希望能够轻松地让我知道应用程序的任何文件(php,css,html等)在我的部署后进行了修改。有没有人建议的方法?

谢谢,

1 个答案:

答案 0 :(得分:0)

使用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>

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

当您只想要一次 上次更新&#39;时,这会派上用场。在您网站的首页上留言,并且仍然会考虑您网站的所有文件。

要获取某些远程文件的修改日期,您可以在 codewalker dot com 使用记事本的fine功能(dma05在web dot de和madsen在lillesvin dot处进行了改进净)。

但是现在使用stream_get_meta_data(PHP&gt; 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;
}
?>