最近在学习用PHP做一个软件下载的内部管理系统(MVC框架),需要先插入一条软件的下载记录到数据库,然后通过后台shell去自动下载该软件.但是有些下载的url是做了转向的,比如:http://download.phpwind.net/index.php?m=download&a=do&did=511,这种url无法获知真实的文件名和扩展,无法做到后台自动下载,自动保存,在网上找了一下,没有找到现成可用函数。可能是我水平太低,有些可能找到了也没有理解,呵呵。。
言归正传,即然没找到,只好自已写个自用函数。发出来让老鸟们指点。。
第一步:获取该url的header信息。
function file_ext($url)
{
$rs=(get_headers($url));
//信息返回的是一串数组字符串,包括一些http状态等信息。将返回的字符串过滤.
foreach($rs as $r){
//用字符串函数过滤strstr,如果是文件转向,则返回的数组字符串里会有filename=
if(strstr($r,'filename')){
$filename=substr($r,(strrpos($r,'=')+1));
$file_ext=substr($filename,(strrpos($filename,'.')+1));
return array(pass_ext($file_ext),$filename);
}
//如果是301或302重定向,则返回的字符串里会有Location
if(strstr($r,'Location')){
$filename=substr($r,(strrpos($r,'/')+1));
$file_ext=substr($filename,(strrpos($filename,'.')+1));
return array(pass_ext($file_ext),$filename);
}
//如果返回字符串里没有发现这两种类型,则是[url]http://www.kanglesoft.com/download /easypanel/easypanel-1.1.exe[/url]这类真实url。
$filename=substr($url,(strrpos($url,'/')+1));
$file_ext=substr($url,(strrpos($url,'.')+1));
if($file_ext=='zip'||$file_ext=='7z'){
return array($this->pass_ext($file_ext),$filename);
}
//管理系统只支持zip和7z格式,加个判定。
function pass_ext($file_ext)
{
if($file_ext=='zip'||$file_ext=='7z'){
return $file_ext;
}else{
return false;
}
}