如何从函数file_get_content()获取图像扩展名

时间:2015-04-06 08:34:23

标签: php image image-processing

我有一个像这样的网址

$url ="www.domain.com/image.php?id=123&idlocation=987&number=01";

以前我使用以下代码

获取扩展程序
$img_details= pathinfo($url);

但由于url还有其他变量,因此不再适用。所以在这种情况下如何获取图像名称和扩展名。

我知道我应该首先使用

下载文件
$contenido = file_get_contents($url);

但不知道如何从这个

获取文件名/扩展名

提前致谢

2 个答案:

答案 0 :(得分:0)

$ch = curl_init();
$url = 'http://www.domain.com/image.php?id=123&idlocation=987&number=01';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$results = split("\n", trim(curl_exec($ch)));
foreach($results as $line) {
        if (strtok($line, ':') == 'Content-Type') {
                $parts = explode(":", $line);
                echo trim($parts[1]);
        }
}

返回:image / png

已在Get mime type of external file using cURL and php

中回答

答案 1 :(得分:0)

以上答案都集中在mime类型上,它们在大多数情况下都可以使用,它们都需要额外的资源使用 - 要么获得mime类型的第二次网络调用,要么将更多的磁盘读/写写入磁盘以保存文件使用exif-imagetype函数。并且两者都不会返回作为问题一部分的文件名。这是一个使用curl的下载函数,它将下载的文件作为具有名称,mime类型和内容的数组返回。此外,如果可能,它将尝试从URL获取名称。

样本用法

$file=downloadfile($url);
echo "Name: ".$file["name"]."<br>";
echo "Type: ".$file["mimetype"]."<br>";

代码

function downloadfile($url){
  global $headers;

  $headers=array();
  $file=array("content"=>"","mimetype"=>"","name"=>"");

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'readHeaders');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $file["content"]=curl_exec($ch);
  if(sizeof($headers)){
    foreach($headers as $header){
      if(!strncasecmp($header,'content-type:',13)){
        $file["mimetype"]=trim(substr($header,13));
      }
      elseif(!strncasecmp($header,'content-disposition:',20)){
        $file["name"]=trim(substr(strstr($header,'filename='),9));
      }
    }
  }
  if(!$file["name"]){
    $query=strpos("?",$url);
    $file["name"]=basename(substr($url,0,($query?$query:strlen($url))));
  }
  unset($headers);
  return $file;
}
function readHeaders($ch, $header) {
  global $headers;
  array_push($headers, $header);
  return strlen($header);
}