我需要将CodeIgniter编写的PHP应用程序部署到客户端的Web服务器(CentOS 5或6)。由于PHP是脚本语言,因此无需编译为二进制代码进行部署。客户端有机会自行修改PHP程序而不通知我。如果客户修改了使应用程序无序的程序,我们需要额外的人力来找到他们的修改并修复它。
所以我希望能够轻松地让我知道应用程序的任何文件(php,css,html等)在我的部署后进行了修改。有没有人建议的方法?
谢谢,
答案 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;
}
?>