簡體   English   中英

如何從函數file_get_content()獲取圖像擴展

[英]How to get the image extention from function file_get_content()

我有一個類似這樣的網址

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

以前我使用以下代碼獲取擴展名

$img_details= pathinfo($url);

但這將不再起作用,因為url還具有其他變量。 因此,在這種情況下,如何獲取圖像名稱和擴展名。

我知道我應該先使用下載文件

$contenido = file_get_contents($url);

但是不知道如何從中獲取文件名/擴展名

提前致謝

$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

已回答: 使用cURL和php獲取外部文件的mime類型

上面的答案都集中在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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM