Heim >Backend-Entwicklung >PHP-Problem >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 = 'http://www.example.com'; 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!