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

Freigeben: 2023-02-27 21:34:02
Original
6191 Leute haben es durchsucht

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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); //根据头大小截取头信息
Nach dem Login kopieren

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
Nach dem Login kopieren

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 {//否则........
 ............
}
Nach dem Login kopieren

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));
?>
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage