用PHP  获取远程文件是发现一个问题。当获取 几兆大小文件时没问题。但如果文件超过好几百兆时就会出现超时或假死现象。难道通过PHP就不能获取远程大文件的大小码?哪位大虾有获取远程大文件大小的方法吗?
 
比如我想获得:ftp://dygod1:[email protected]:2063/xxx.rmvb
qvodsou.cc  这个网站也时通过采集获得的数据。但原网站没有显示文件大小。它的却能获取到文件大小。请问时怎样做到的呢?【通过观察,其网站用得语言是PHP或JAVA  】

解决方案 »

  1.   

    转的   
    本函数通过header头信息获取远程文件大小,代码如下:
    <?php 
    function getFileSize($url){  
     $url = parse_url($url); 
     if($fp = @fsockopen($url['host'],empty($url['port'])?80:$url['port'],$error)){
      fputs($fp,"GET ".(empty($url['path'])?'/':$url['path'])." HTTP/1.1\r\n");
      fputs($fp,"Host:$url[host]\r\n\r\n");
      while(!feof($fp)){
       $tmp = fgets($fp);
       if(trim($tmp) == ''){
        break;
       }else if(preg_match('/Content-Length:(.*)/si',$tmp,$arr)){
        return trim($arr[1]);
       }
      }
      return null;
     }else{
      return null;
     }
    }
    ?>
      调用方法很简单,代码如下:
    <?php
    echo getFileSize("/Article/UploadFiles/201001/20100104122349734.gif")
    ?>
      此函数获取远程文件大小的效果非常好,无论远程文件体积有多大,获取速度完全不受影响。
    本文来源网页吧http://www.wangyeba.com
      

  2.   


    你这个很好用。。我测试了一个1GB的文件 。很快。但为什么无法获取FTP文件呢 。。想电影天堂的文件就是无法获取的  0 0还有其他的方法码》
      

  3.   


    以前 我也用的 获取文件信息 。。 有可能我是直接测试的 FTP文件。qq914111374  的方法也只能获得 http的文件 。如果我用他获取电影天堂FTP  的文件信息时也会出现假死。。会不会是协议不一样的原因还是。。?
      

  4.   

    <?php
    echo getFileSize("/Article/UploadFiles/201001/20100104122349734.gif")
    ?>
    括号里参数是什么呀!!本地文件路径还是 远程文件路径呀
      

  5.   


    我需要的远程FTP文件的大小  ftp://dygod1:[email protected]:2063/xxx.rmvb
      就像这样的 。他们都是有  账号和密码 的   ^_^
      

  6.   


        header("content-type:text/html;charset=gbk");
        $username = 'xxxx';//ftp帐号
        $password = 'xxxx';//ftp密码
        $url = 'xxx.xxx.xxx/xx.xxx'; //ftp服务器地址+文件路径+文件名例如: ftp.t35.com/down.zip
        $ftp_server = "ftp://" . $username . ":" . $password . "@" . $url;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $ftp_server);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_NOBODY, 1);    $output = curl_exec($ch);
        curl_close($ch);
        //echo $output ;
        preg_match('/Content-Length: (\d+)/i',$output,$arr);
        echo '文件长度:'.$arr[1] ;