PHP 获取远程文件大小常用方法总结
php有很多方法可以获取远程文件大小的,最常用的就有fsockopen、file_get_contents、curl函数,下面我来给各位总结一下.
1、fsockopen,代码如下:
<?php function getFileSize( $url ){ $url = parse_url ( $url ); if ( $fp = @ fsockopen ( $url [ 'host' ], empty empty ( $url [ 'port' ])?80: $url [ 'port' ], $error )){ fputs ( $fp , "GET " .( empty 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; } } //调用方法 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 ; }查看更多关于PHP 获取远程文件大小常用方法总结 - php文件操作的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did27769