獲取下載url的真實檔名和副檔名
最近在學習用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;
}
}