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

该代码示例展示了如何通过PHP的fsockopen函数实现获取远程文件的MIME类型,避免了依赖其他库或修改PHP环境。通过构造HTTP HEAD请求并解析响应头,可以确定远程文件的Content-Type。
摘要由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('https://img1.51cto.com/group_p_w_picpaths/group_p_w_picpaths/125661077813.jpg');

$type = $file->GetFileType();

echo $type;

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值