-
PHP 获取远程文件大小常用方法总结
php有很多方法可以获取远程文件大小的,最常用的就有fsockopen、file_get_contents、curl函数,下面我来给各位总结一下.
1、fsockopen,代码如下:
- <?php
- function getFileSize($url){
- $url = parse_url($url);
- if($fp = @fsockopen($url['host'],emptyempty($url['port'])?80:$url['port'],$error)){
- fputs($fp,"GET ".(emptyempty($url['path'])?'/':$url['path'])." HTTP/1.1rn");
- fputs($fp,"Host:$url[host]rnrn");
- 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;
- }
- }
- //调用方法
- echo getFileSize("http://www.phpfensi.com/")
- ?>
2、使用file_get_contents(),代码如下:
- <?php
- $file = file_get_contents($url);
- echo strlen($file);
- ?>
3. 使用get_headers(),代码如下:
- <?php
- $header_array = get_headers($url, true);
- //返回结果
- Array
- (
- [0] => HTTP/1.1 200 OK
- [Date] => Sat, 29 May 2004 12:28:14 GMT
- [Server] => Apache/1.3.27 (Unix) (Red-Hat/Linux)
- [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
- [ETag] => "3f80f-1b6-3e1cb03b"
- [Accept-Ranges] => bytes
- [Content-Length] => 438
- [Connection] => close
- [Content-Type] => text/html
- )
- $size = $header_array['Content-Length'];
- echo $size;
- ?>
4.curl,代码如下:
- function remote_filesize($uri,$user='',$pw='')
- {
- // start output buffering
- ob_start();
- // initialize curl with given uri
- $ch = curl_init($uri);
- // make sure we get the header
- curl_setopt($ch, CURLOPT_HEADER, 1);
- // make it a http HEAD request
- curl_setopt($ch, CURLOPT_NOBODY, 1);
- // if auth is needed, do it here
- if (!emptyempty($user) && !emptyempty($pw))
- {
- $headers = array('Authorization: Basic ' . base64_encode($user.':'.$pw));
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
- }
- $okay = curl_exec($ch);
- curl_close($ch);
- // get the output buffer
- $head = ob_get_contents();
- // clean the output buffer and return to previous
- // buffer settings
- ob_end_clean();
- echo '<br>head-->'.$head.'<----end <br>';
- // gets you the numeric value from the Content-Length
- // field in the http header
- $regex = '/Content-Length:s([0-9].+?)s/';
- $count = preg_match($regex, $head, $matches);
- // if there was a Content-Length field, its value
- // will now be in $matches[1]
- if (isset($matches[1]))
- { //开源代码phpfensi.com
- $size = $matches[1];
- }
- else
- {
- $size = 'unknown';
- }
- //$last=round($size/(1024*1024),3);
- //return $last.' MB';
- return $size;
- }
出处:http://www.phpfensi.com/php/20140913/5543.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式