`
zhengdl126
  • 浏览: 2542408 次
  • 性别: Icon_minigender_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秒。

 

<!-- Begin related post,if you'v install the plugin,here will show the related post.Plugin download at:http://wordpress.org/extend/plugins/wordpress-23-related-posts-plugin/-->
分享到:
评论

相关推荐

    PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例

    用curl函数读取远程文件 用file_getcontents提交数据 用php生成扭曲,有角度的验证图片(支持中文) 用正则加亮关键字 程序运行过程中直接输出 缩略图带版权信息函数 缩略图类 获得用户操作系统的换行符 ...

    获取远程文件大小的php函数

    除了提供的`getFileSize()`函数外,还有其他方法可以获取远程文件大小,例如使用cURL库。cURL库提供了更高级的功能,如SSL支持、HTTP代理、重定向处理等,但其使用相对复杂一些。 总结一下,本篇文章介绍了一个简单...

    JS获取文件大小方法小结

    本文主要探讨了三种不同的JS方法来获取文件大小,这些方法主要适用于浏览器环境,尤其是Internet Explorer。 方法一:利用ActiveX控件 在较旧版本的IE浏览器中,可以使用ActiveX技术来访问本地文件系统。ActiveX...

    php获取远程文件的内容和大小

    您可能感兴趣的文章:php下载远程文件类(支持断点续传)PHP 远程文件管理,可以给表格排序,遍历目录,时间排序获取远程文件大小的php函数PHP 获取远程文件内容的函数代码PHP 网络开发详解之远程文件包含漏洞php带...

    php下载远程大文件(获取远程文件大小)的实例

    总结来说,这个PHP实例展示了如何利用HTTP头部信息获取远程文件大小,并使用文件流分块下载大文件。在实际应用中,还可以考虑增加错误处理、进度条显示、断点续传等功能,以提高用户体验。了解并掌握这些技巧对PHP...

    浅谈php fopen下载远程文件的函数

    这个示例展示了如何使用 `fopen()` 下载远程文件,但需要注意的是,这种方法可能会受到网络条件、服务器配置、文件大小等因素的影响,实际应用中应考虑异常处理和错误检测。 此外,`fopen()` 有时候无法处理大型...

    php获取远程文件大小

    除了cURL之外,PHP还提供了其他几个用于文件操作的函数,如`fopen`,`fgets`,`ftell`等,理论上也可以用来估算远程文件大小。但由于这些方法涉及到实际读取文件内容,如果文件非常大或网络环境不佳,可能会消耗大量...

    PHP 获取远程文件大小的3种解决方法

    以下是一个使用file_get_contents()函数获取远程文件大小的示例代码: ```php &lt;?php $file = file_get_contents($url); echo strlen($file); ?&gt; ``` 在上述代码中,$url变量应包含远程文件的URL地址。当file_get_...

    基于PHP的小哦远程文件下载程序源码 php版.zip

    【标题】"基于PHP的小哦远程文件下载程序源码 php版.zip" 提供的是一个用PHP语言编写的轻量级远程文件下载程序的源代码。这个程序允许用户通过Web界面来下载存储在服务器上的文件,提高了文件管理的便捷性。 【描述...

    PHP实例开发源码-小哦远程文件下载程序源码 php版.zip

    该压缩包文件“PHP实例开发源码-小哦远程文件下载程序源码 php版.zip”包含了一个基于PHP的远程文件下载程序的源代码。通过这个程序,用户可以实现在服务器端下载远程网络上的文件,无需直接访问源站点,提高了下载...

    一个PHP的远程图片抓取函数分享

    这部分代码的实现过程中,使用了几个关键的PHP函数,如`fopen()`用于打开本地文件准备写入,`fwrite()`用于将图片数据写入文件,`fclose()`用于关闭文件,以及`strlen()`计算图片数据的大小。这些函数在PHP中常用于...

    9个PHP必须知道的函数

    5. `file_get_contents()`: 用于读取文件内容,可以是本地文件也可以是远程URL,对于简单的文件读取操作非常便捷。 6. `json_encode()` 和 `json_decode()`: 这两个函数用于JSON数据的编码和解码,是PHP与...

    PHP文件管理系统源码.zip

    为了记录文件元数据(如文件名、大小、创建日期等),系统常与数据库结合。MySQL是常用的数据库,通过PDO(PHP Data Objects)扩展进行连接和查询。 7. 搜索功能 实现文件搜索,可能需要索引文件内容,使用全文搜索...

    php检索或者复制远程文件的方法

    PHP中检索或复制远程文件是常见的功能需求,可以通过PHP的copy函数实现。copy函数用于将文件从一个位置复制到另一个位置,当目标位置是远程服务器上的文件时,可以指定完整的URL来复制远程文件到本地服务器。在本文...

    php在线管理文件

    《PHP在线管理文件系统详解》 在Web开发领域,PHP是一种广泛应用的服务器端脚本语言,尤其在构建动态网站和...通过不断优化和扩展,这样的系统可以满足各种复杂的文件管理需求,为用户提供便捷的远程文件管理服务。

    php远程下载文件并保存

    ### PHP远程下载文件并保存知识点解析 #### 一、函数定义与参数说明 该脚本定义了一个名为`getFile`的函数,用于实现从远程服务器下载文件,并将其保存到本地指定目录的功能。 - **函数签名**: ```php ...

    php获得文件大小和文件创建时间的方法

    除此之外,PHP的这些文件函数不能用来获取远程文件的属性。它们只能作用于本地服务器文件系统中的文件,这意味着你必须保证要查询的文件是在本地服务器上有访问权限的。 总结一下,PHP提供了多个函数来获取文件的...

Global site tag (gtag.js) - Google Analytics