php获取图片头信息,php远程获取图片或文件信息(get_headers,fsocketopen,curl)

if(!function_exists("remote_filesize")){

/**

* 获取远程或本地文件信息

* @param string $strUrl 远程文件或本地文件地址

* @param integer $intType 调用方式(1:get_headers 2:fsocketopen 3:curl 4:本地文件)

* @param array $arrOptional

* @return array

* @author mengdj

*/

function remote_filesize($strUrl,$intType=1,$arrOptional=array()){

$arrRet=array(

"length"=>0, //大小,字节为单位

"mime"=>"", //mime类型

"filename"=>"", //文件名

"status"=>0 //状态码

);

switch($intType){

case 1:

//利用get_headers函数

if(($arrTmp=get_headers($strUrl,true))){

$arrRet=array("length"=>$arrTmp['Content-Length'],"mime"=>$arrTmp['Content-Type']);

if(preg_match('/filename=\"(.*)\"/si',$arrTmp['Content-Disposition'],$arr)){

$arrRet["filename"]=$arr[1];

}

if(preg_match('/\s(\d+)\s/',$arrTmp[0],$arr)){

$arrRet["status"]=$arr[1];

}

}

break;

case 2:

//利用fsocket

if(($arrUrl=parse_url($strUrl))){

if($fp=@fsockopen($arrUrl['host'],empty($arrUrl['port'])?80:$arrUrl['port'],$error)){

@fputs($fp,"GET ".(empty($arrUrl['path'])?'/':$arrUrl['path'])." HTTP/1.1\r\n");

@fputs($fp,"Host: $arrUrl[host]\r\n");

@fputs($fp,"Connection: Close\r\n\r\n");

while(!feof($fp)){

$tmp=fgets($fp);

if(trim($tmp)==''){

//此行代码只读到头信息即可

break;

}else{

(preg_match('/(HTTP.*)(\s\d{3}\s)/',$tmp,$arr))&&$arrRet['status']=trim($arr[2]);

(preg_match('/Content-Length:(.*)/si',$tmp,$arr))&&$arrRet['length']=trim($arr[1]);

(preg_match('/Content-Type:(.*)/si',$tmp,$arr))&&$arrRet['mime']=trim($arr[1]);

(preg_match('/filename=\"(.*)\"/si',$tmp,$arr))&&$arrRet['filename']=trim($arr[1]);

}

}

@fclose($fp);

}

}

break;

case 3:

//利用curl

if(($ch=curl_init($strUrl))){

curl_setopt($ch,CURLOPT_HEADER,1);

curl_setopt($ch,CURLOPT_NOBODY,1);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

if(isset($arrOptional['user'])&&isset($arrOptional['password'])){

$headers=array('Authorization: Basic '.base64_encode($arrOptional['user'].':'.$arrOptional['password']));

curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);

}

$tmp=curl_exec($ch);

curl_close($ch);

(preg_match('/Content-Length:\s([0-9].+?)\s/',$tmp,$arr))&&$arrRet['length']=trim($arr[1]);

(preg_match('/Content-Type:\s(.*)\s/',$tmp,$arr))&&$arrRet['mime']=trim($arr[1]);

(preg_match('/filename=\"(.*)\"/i',$tmp,$arr))&&$arrRet['filename']=trim($arr[1]);

(preg_match('/(HTTP.*)(\s\d{3}\s)/',$tmp,$arr))&&$arrRet['status']=trim($arr[2]);

}

break;

case 4:

//本地处理

if(file_exists($strUrl)) {

$arrRet=array(

"length"=>filesize($strUrl),

"mime" =>mime_content_type($strUrl),

"filename"=>basename($strUrl),

"status"=>200

);

}else{

$arrRet=array(

"length"=>0,

"mime" =>'',

"filename"=>basename($strUrl),

"status"=>404

);

}

break;

}

if(isset($arrOptional['getimagesize'])&&$arrRet['status']=='200'){

if(($arrTmp=@getimagesize($strUrl))){

$arrRet['width']=$arrTmp[0];

$arrRet['height']=$arrTmp[1];

$arrRet['type']=$arrTmp[2];

$arrRet['tag']=$arrTmp[3];

$arrRet['bits']=$arrTmp['bits'];

$arrRet['channels']=$arrTmp['channels'];

!isset($arrRet['mime'])&&$arrRet['mime']=$arrTmp['mime'];

}

}

return $arrRet;

}

}

/** End of file remote_filesize.php */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值