用PHP 获取远程文件是发现一个问题。当获取 几兆大小文件时没问题。但如果文件超过好几百兆时就会出现超时或假死现象。难道通过PHP就不能获取远程大文件的大小码?哪位大虾有获取远程大文件大小的方法吗?
比如我想获得:ftp://dygod1:[email protected]:2063/xxx.rmvb
qvodsou.cc 这个网站也时通过采集获得的数据。但原网站没有显示文件大小。它的却能获取到文件大小。请问时怎样做到的呢?【通过观察,其网站用得语言是PHP或JAVA 】
比如我想获得:ftp://dygod1:[email protected]:2063/xxx.rmvb
qvodsou.cc 这个网站也时通过采集获得的数据。但原网站没有显示文件大小。它的却能获取到文件大小。请问时怎样做到的呢?【通过观察,其网站用得语言是PHP或JAVA 】
解决方案 »
- PHP中英文网站问题
- 急救:如何解决PHP的Out of dynamic memory in yy_create_buffer()问题?!
- Parse error: syntax error, unexpected $end
- ★★请问,PHP可以识别二维码图片吗?★★
- 怎么单独设定php接受的值的字体颜色?
- 有关jpgraph的问题
- 求一个html转pdf的源程序或控件,支持中文的最好了
- thinkphp中URL重写时的分页问题
- 求一个微信公共平台给公共号发消息成功的代码
- js的Ajax方法的返回值为什么在IE下正常,而在FF和chrome下却返回空值?
- 织梦中的标记不能嵌套,那怎么解决我这个问题(请进)!
- 用过‘织梦’进行二次开发的进来一下 急啊!!!在线等
本函数通过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
你这个很好用。。我测试了一个1GB的文件 。很快。但为什么无法获取FTP文件呢 。。想电影天堂的文件就是无法获取的 0 0还有其他的方法码》
以前 我也用的 获取文件信息 。。 有可能我是直接测试的 FTP文件。qq914111374 的方法也只能获得 http的文件 。如果我用他获取电影天堂FTP 的文件信息时也会出现假死。。会不会是协议不一样的原因还是。。?
echo getFileSize("/Article/UploadFiles/201001/20100104122349734.gif")
?>
括号里参数是什么呀!!本地文件路径还是 远程文件路径呀
我需要的远程FTP文件的大小 ftp://dygod1:[email protected]:2063/xxx.rmvb
就像这样的 。他们都是有 账号和密码 的 ^_^
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] ;