检查目录中的文件被修改


Check Files In Directory Are Modified

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

所以我想做一些东西,可以很容易地让我知道应用程序的任何文件(php、css、html 等(在我的部署后都被修改了。 有人建议什么方法吗?

谢谢

使用 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 和 lillesvin dot net 的 madsen 进行了改进(。

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

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

<?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;
}
?>