PHP 文件处理(综合)
1.获取远程文件大小:
php获得远程文件大小的函数
php获得远程文件大小的函数
文件的大小函数为:filesize()
文件是否存在的函数为:file_exits();
但是这两个函数只针对本地
那么:远程文件是否存在,远程文件大小 如何得知呢?
搜索了一下,有人居然说,把远程文件下载过来再判断这个远程文件的大小,这是什么歪理。
庆幸大部分人还是清醒的,一般应该使用判断header反馈的信息进行判断。
php中如何获得header信息呢? php的函数真多,这个也不例外
(1).最简单的获取远程文件大小办法
$a_array = get_headers(url,true);
url就是网址了,至于第二个参数
就可以得到类似下面的这个数组
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
)
所以,你可以很舒服的拿到远程文件的大小
$file_sizeofurl = a_array['Content-Length'];
(2).用curl获取远程文件大小
如果服务器禁止get_headers 怎么办?
换一种办法,用curl
我总觉得curl就像一个虚拟的用户,什么都能模仿
下面直接给出一个老外的函数
请注意
echo '
head-->'.$head.'<----end
';
这句是我加的,为了知道header里面到底包含了什么东西
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 (!empty($user)
&& !empty($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 '
head-->'.$head.'<----end
';
// 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]))
{
$size = $matches[1];
}
else
{
$size = 'unknown';
}
//$last=round($size/(1024*1024),3);
//return $last.' MB';
return $size;
}
(3).fsock获取远程文件大小的办法
先给函数
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.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;
}
}
哪个获取远程文件大小最快?
针对同一个url进行测试,curl > fsock > getheader
针对不同url测试,结果还是 curl > fsock > getheader
当然也许这个测试是不准确的,但getheader函数是明显要慢一些的
考虑到curl模块没有fsock那么普及,所以我自己还是用后面一个
速度上的差别大约是 curl比fsock快0.2秒,fsock比getheader快0.2秒。
PHP 文件处理(综合)的更多相关文章
- xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证
xilinx Vivado的使用详细介绍(2):创建工程.添加文件.综合.实现.管脚约束.产生比特流文件.烧写程序.硬件验证 Author:zhangxianhe 新建工程 打开Vivado软件,直接 ...
- Java学习笔记——SequenceInputStream类合并文件的综合举例分析
SequenceInputStream 介绍 SequenceInputStream 类表示其他输入流的逻辑串联,即文件的合并. 它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾, ...
- Python 文件操作综合案例
# 案例 # 文件的复制 # 要求 # 将一个文件, 复制到另外一个副本中 # 步骤分析 # 1. # 只读模式, 打开要复制的文件 import os import shutil path = &q ...
- FPGA---ucf文件编写
摘要:本文主要通过一个实例具体介绍ISE中通过编辑UCF文件来对FPGA设计进行约束,主要涉及到的约束包括时钟约束.群组约束.逻辑管脚约束以及物理属性约束. Xilinx FPGA设计约束的分类 Xi ...
- MXF素材文件交换格式深入研究
MXF素材文件交换格式深入研究 2012-09-03 | 访问次数:262 | 新闻来源:电科网 [摘要]DCI规定数字电影需采用MXF封装音视频等节目素材内容.为了深 ...
- stm32f10x.h文件分析理解
今天再看过半年前自己写的这篇发现自己当时理解有误,stm32f10x.h与库开发并未存在太大关系,只是一个最为重要的寄存器地址到寄存器结构体变量的映射. stm32f10x.h 这个头文件是STM32 ...
- JavaScript---网络编程(11)--DHTML技术演示(4)-单选框/下拉菜单/添加文件
本节讲述单选框/下拉菜单/添加文件,综合css,html和JavaScript. 单选框: 实现的功能是:(类似平时的性格测试) 先隐藏一部分页面,然后通过点击单选框来显示. 再通过选项的选择-(每个 ...
- 数字集成电路设计-8-一个简单sobel图像边缘检测加速器的设计,实现,仿真与综合
引言 图像视频处理等多媒体领域是FPGA应用的最主要的方面之一,边缘检测是图像处理和计算机视觉中的基本问题,所以也是最常用的,随着数据量的不断增加以及对实时性的要求,一般软件已经不能满足实际需要,这时 ...
- Tcl与Design Compiler (九)——综合后的形式验证
本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 这里来讲一下forma ...
- Tcl与Design Compiler (十二)——综合后处理
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 概述 前面也讲了一些综合后的需要进行的一些工作,这 ...
随机推荐
- C# 后台线程更新UI控件
/********************************************************************************* * C# 后台线程更新UI控件 * ...
- RabbitMQ引入
引入MQ话题 可能很多人有疑惑:MQ到底是什么?哪些场景下要使用MQ? 前段时间安装了RabbitMQ,现在就记录下自己的学习心得吧.首先看段程序: class Program { static vo ...
- 【C#】Lambda
介绍 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 . 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对 ...
- [agc23E]Inversions
Atcoder description 给你\(n\)和\(\{a_i\}\),你需要求所有满足\(p_i\le a_i\)的\(1-n\)排列的逆序对个数之和模\(10^9+7\). \(n \le ...
- org.springframework.orm.hibernate3.HibernateTemplate
当session中出现两个相同标示的(相同主键)的对象,一个是持久态,一个是瞬时态,想更新瞬时态对象到数据库,如果不做处理,则报出异常,session中出现两个相同标示的不同对象异常.处理方法.(业务 ...
- ballerina 学习十九 安全编程
ballerina 内部提供了几种常用的安全开发模型,token 认证(jwt) basic auth jwt 安全 参考代码 import ballerina/http; http:AuthPr ...
- ajax请求返回Json字符串运用highcharts数据图表展现数据
[1].[图片] Json字符串和highcharts数据图表展现.jpg 跳至 [1] code=26754#44745" rel="nofollow"> [2] ...
- 【转】在Visual Studio中怎样快速添加代码段
原文网址:http://blog.csdn.net/yl2isoft/article/details/9735527 以前一直只知道,键入prop,再按两次tab键,会生成自动属性代码. 今天闲着无事 ...
- 【转】第七章、Linux 文件与目录管理
原文网址:http://vbird.dic.ksu.edu.tw/linux_basic/0220filemanager.php 第七章.Linux 文件与目录管理 最近升级日期:2009/08/26 ...
- TongWEB与JOnAS 对比,国产中间件战斗机东方通TongWEB源码解析
转自网址: http://bbs.51cto.com/thread-489819-1-1.html 首先需要声明的是,本人出于技术爱好的角度,以下的文字只是对所看到的一些情况的罗列,偶尔附加个人的一些 ...