get_headers函数很不错,在我们写一些php代码时,可能会需要获取远程文件的一些信息,比如文件大小、最后修改时间等等,而php内置的相关函数都不支持远程文件,于是我们就用上了get_headers函数。
首先,我们要用到前面的两个自定义函数remote_file_exists(检查远程文件是否存在)、dump(格式化输出数组内容),这两个函数的具体代码都在前面有说过,并且在dump那篇文章中,最后的一段例程代码就是获取远程文件信息头的内容并格式化输出的结果。结果如下:
Array
(
[0] => HTTP/1.1 200 OK
[Date] => Thu, 26 Aug 2010 05:58:47 GMT
[Server] => Apache
[Last-Modified] => Mon, 23 Aug 2010 03:01:54 GMT
[ETag] => "20a9e05-e220-4c71e4a2"
[Accept-Ranges] => bytes
[Content-Length] => 57888
[Connection] => close
[Content-Type] => image/jpeg
)
在例程中我提供的远程文件是一个图片文件(我狗女儿的照片),我们得到了如上的一个数组,下面说一下这个数组中我们比较常用的几个内容。
“[0] => HTTP/1.1 200
OK”,文件状态,200是正常存在,404是不存在,其它的还有几种,与我无关,所以我没有去具体看。
“[Last-Modified] => Mon, 23 Aug 2010 03:01:54
GMT”,文件最后一次修改更新的时间,这个内容应当是比较有用的,如果是要获取本地文件的最后修改更新时间,我们应当使用“filectime”函数。
“[Content-Length] => 57888”,文件的大小,计量单位是“[Accept-Ranges] =>
bytes”,php中获得文件大小的函数“filesize”是不支持远程文件的,所以我们也需要这组数据。
“[Content-Type] =>
image/jpeg”,文件类型,判断文件类型有很多种方法,这个方法我觉得也不错,只可惜每一种方法都需要“switch”来实现类型的一一对应才能表现在页面上。
O了,有了上面一组数据,我们可以写出两个函数了,一个是获取远程文件大小的函数,一个是获取远程文件最后修改更新时间的函数。这两个函数代码如下:
// CHECK REMOTE FILE SIZE (RETURN BYTES)
function remote_filesize($url_file){
if (!remote_file_exists($url_file)) return false;
$headInf = get_headers($url_file,1);
return $headInf['Content-Length'];
}
// CHECK REMOTE FILE LAST MODIFIED TIME (RETURN UNIX
TIMESTAMP)
function remote_filectime($url_file){
if (!remote_file_exists($url_file)) return false;
$headInf = get_headers($url_file,1);
return strtotime($headInf['Last-Modified']);
}
上面的两个自定义函数中都使用了“remote_file_exists”这个判断远程文件是否存在的自定义函数(参见前文),函数中首先要判断一下我们要查的文件是否存在,如果不存在还查个P啊,当然返个false喽。然后通过“get_headers”来获取文件头信息并将这个信息数组赋给“$headInf”,两个函数到这里都是完全一样的,在这之后就简单了,你需要返回数组中的哪一段信息或需要将信息处理一下再返回就都随意了。我这里第一个是返回文件大小的,第二个是将文件最后修改更新时间转化为UNIX时间戳来返回的。
好了,看看自己有什么需要的,去写一个吧,将来这几个都会被我应用到,所以都写出来了。