Heim >Backend-Entwicklung >PHP-Problem >PHP ermittelt, ob es sich bei dem Link um ein Bild handelt

PHP ermittelt, ob es sich bei dem Link um ein Bild handelt

尚
Original
2019-10-28 16:21:056258Durchsuche

PHP ermittelt, ob es sich bei dem Link um ein Bild handelt

Methode 1

Direkter regelmäßiger Abgleich von URL-Links, unabhängig davon, ob sie mit .png, .gif, .jpg, .jpeg enden.

preg_match('/.*(\.png|\.jpg|\.jpeg|\.gif)$/', $url);

Dies ist der einfachste Weg, aber nicht genau genug, da nicht alle Bildlinks mit dem Bildnamen + der Erweiterung enden.

Methode 2

Verwenden Sie CURL, um den Antwortheader der Bild-URL abzurufen

Erstellen Sie zunächst einen Curl und geben Sie die Informationen der Headerdatei als Daten aus stream

$url = "http://*************";  //图片的链接地址
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //是否跟着爬取重定向的页面
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //将curl_exec()获取的值以文本流的形式返回,而不是直接输出。
curl_setopt($ch, CURLOPT_HEADER,  1); // 启用时会将头文件的信息作为数据流输出
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); //设置超时时间
curl_setopt($ch, CURLOPT_URL, $url);  //设置URL
$content = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);  //curl的httpcode
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); //获取头大小
curl_close($ch);

Zu diesem Zeitpunkt enthält der Inhalt die Header-Informationen und den binären Inhalt des Bildes und fängt dann die Header-Informationen entsprechend der Größe des Headers ($ headerSize) ab, und der Rest ist die Binärdatei Inhalt des Bildes.

$headers = substr($content, 0, $headerSize); //根据头大小截取头信息

Die Ausgabestruktur der Header-Informationen ist wie folgt

HTTP/1.1 200 OK
Server: JSP3/2.0.14
Date: Sun, 30 Jul 2017 06:54:47 GMT
Content-Type: image/jpeg
Content-Length: 152094
Connection: keep-alive
ETag: "7751852900776331536"
Last-Modified: Tue, 02 May 2017 10:33:16 GMT
Expires: Wed, 18 Jul 2018 06:25:38 GMT
Age: 879492
Cache-Control: max-age=31536000
Accept-Ranges: bytes
Error-Message: OK
Ohc-Response-Time: 1 0 0 0 0 0

Sie können sehen, dass es einen Inhaltstyp gibt: Bild/JPEG, und dann die Header-Informationen verarbeiten und den gewünschten Inhalt herausnehmen

$head_data=preg_split('/\n/',$headers);  //逐行放入数组中
$head_data = array_filter($head_data);  //过滤空数组
$headers_arr = [];
foreach($head_data as $val){  //按:分割开
    list($k,$v) = explode(":",$val); //:前面的作为key,后面的作为value,放入数组中
    $headers_arr[$k] = $v;
}
$img_type = explode("/",trim($headers_arr['Content-Type']));  //然后将获取到的Content-Type中的值用/分隔开
if ($httpcode == 200 && strcasecmp($img_type[0],'image') == 0) {//如果httpcode为200,并且Content-type前面的部分为image,则说明该链接可以访问成功,并且是一个图片类型的
    $type = $img_type[1];
    .............
} else {//否则........
 ............
}

Methode 3

Mit der PHP-Funktion get_headers() können Sie die Antwort-Header-Informationen direkt abrufen, aber im Vergleich zu Curl können Sie kein Timeout festlegen.

<?php
$url = &#39;http://www.example.com&#39;;

print_r(get_headers($url));

print_r(get_headers($url, 1));
?>
rrree

Empfohlen: PHP-Server

Das obige ist der detaillierte Inhalt vonPHP ermittelt, ob es sich bei dem Link um ein Bild handelt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn