1. 程式人生 > >獲取下載url的真實檔名和副檔名

獲取下載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;
        }
    }