我需要将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;
}
?>