php无法获得远程文件大小
来源:互联网 发布:橙光立绘制作软件 编辑:程序博客网 时间:2024/06/05 14:23
今天,用户反映软件打开后就挂掉,分析程序得php无法从服务器获取文件大小,atoi函数中的参数为空,程序挂掉了。
很奇怪的是以前程序都没问题,今天突然所有的用户都出现这个问题,通过@fsockopen()的错误提示,知道了服务器无法解析文件url地址。
将文件的url地址改成本地地址,因为文件都存放在服务器上,所以直接用了本地路径。然后通过filesize函数直接得到文件的大小。
这种方法比@fsockopen()更快,应该说是相当快。
附上php常用获取文件大小的方法:
1、get_headers
<?php 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 ) ?>
2、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])) { $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'],emptyempty($url['port'])?80:$url['port'],$error)) { fputs($fp,"GET ".(emptyempty($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; } elseif(preg_match('/Content-Length:(.*)/si',$tmp,$arr)) { return trim($arr[1]); } } return null; } else { return null; } }
4、file_get_contents
$fCont = file_get_contents($url); echo strlen($fCont)/1024;
- php无法获得远程文件大小
- php获得远程文件大小的函数
- php获得远程文件大小的函数
- php获取远程文件大小
- php获取远程文件大小
- php获取远程文件大小
- php 检测远程文件大小
- 获得文件大小
- 获得文件大小
- 获得文件大小
- php获取远程文件大小的三种方法(实例代码)
- PHP获取远程文件大小 如果加判断文件大小以KB MB GB
- 获得文件大小和目录
- c获得文件大小
- 跨平台获得文件大小
- C++中获得文件大小
- MFC获得文件大小
- 批处理获得文件大小
- debian命令集(三)
- 微信摇一摇功能代码解析
- 课后总结:1.1_编程及java基础常识
- 文件系统:FAT(FAT16),FAT32,VFAT,NTFS
- 关于ARM的22个常用概念--的确经典
- php无法获得远程文件大小
- Hdu 1788 Chinese remainder theorem again
- 课后总结:1.2_标识符
- 怎么获得当前LCU的above和left LCU的分割深度信息?(已更新)
- 一个二三线互联网公司,拿什么追赶百度腾讯?
- 关于打包C++项目
- Java 版本 特征 和 历史
- linux下的ssh命令
- Android APN的设置问题