php获取远程文件类型,获取远程文件类型 for PHP

该代码示例展示了如何利用PHP的fsockopen函数获取远程文件的类型,通过发送HEAD请求并解析响应头中的Content-Type字段。如果遇到重定向,会递归处理新的URL,直到找到最终的文件类型。
摘要由CSDN通过智能技术生成

PHP 内部有函数可以得到远程文件类型,但是需要其它库的支持,或者是更改PHP的环境,下面有使用fsockopen函数来实现获取远程文件类型,代码如下:

class RemoteFile{

var $url;

var $host;

var $path;

function  __construct($url) {

$this->url = $url;

$this->parse();

}

function parse(){

$matches = parse_url($this->url);

$this->host = $matches['host'];

$this->path = isset($matches['path'])?$matches['path']:'';

}

function tag_substr($string,$start_string,$end_string){

$start_pos = strpos($string,$start_string);//查看是否有起始标记

if($start_pos === false){

return '';

}

$start_pos+=strlen($start_string);

$end_pos=strpos($string,$end_string,$start_pos);//查看是否有结束标记

if($end_pos===false){

return substr($string,$start_pos);

}

return substr($string,$start_pos,$end_pos-$start_pos);

}

function GetFileType(){

$header = "HEAD ".$this->path." HTTP/1.1\r\n";

$header.= "Host: ".$this->host."\r\n";

$header.= "Connection: Close\r\n\r\n";

$fp = @fsockopen($this->host,80,$errno,$errstr);

if($fp){

fwrite($fp,$header);

$html='';

while(!feof($fp)){

$html.=fgets($fp);

}

fclose($fp);

if(strpos($html,'Content-Location:')!==false){

$html=str_replace('Content-Location:','',$html);

}

$location=$this->tag_substr($html,'Location: ',"\r\n");

if(strlen($location)>5){

$this->url = $location;

$this->parse();

$type=$this->GetFileType();

}else{

$type=$this->tag_substr($html,"Content-Type: ","\r\n");

}

return $type;

}else{

return 'text/html';

}

}

}

$file = new RemoteFile('http://img1.51cto.com/group_images/group_images/125661077813.jpg'); $type = $file->GetFileType(); echo $type; ?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值