Как получить значки сайта с PHP?

Я хочу получить, запросил веб-сайт favicon с PHP. Мне рекомендовали использовать сервис favicon от Google, но он не работает. Я хочу что-то сделать самостоятельно, но не знаю, как использовать регулярное выражение.

Я нашел класс в Google, который работает в большинстве случаев, но имеет неприемлемый уровень ошибок. Вы можете посмотреть здесь: http://www.controlstyle.com/articles/programming/text/php-favicon/

Может кто-нибудь, пожалуйста, помогите мне в получении значка с помощью regex, пожалуйста?

Быстро и грязно:

<?php $url = 'http://example.com/'; $doc = new DOMDocument(); $doc->strictErrorChecking = FALSE; $doc->loadHTML(file_get_contents($url)); $xml = simplexml_import_dom($doc); $arr = $xml->xpath('//link[@rel="shortcut icon"]'); echo $arr[0]['href']; 

Используйте S2 service предоставляемую Google. Это так просто, как это

 http://www.google.com/s2/favicons?domain=www.yourdomain.com 

Скребуть это было бы намного проще, пытаясь сделать это самостоятельно.

Я делал что-то подобное, и я проверил это с кучей URL-адресов, и все, казалось, работали. URL не обязательно должен быть базовым URL-адресом

 function getFavicon($url){ # make the URL simpler $elems = parse_url($url); $url = $elems['scheme'].'://'.$elems['host']; # load site $output = file_get_contents($url); # look for the shortcut icon inside the loaded page $regex_pattern = "/rel=\"shortcut icon\" (?:href=[\'\"]([^\'\"]+)[\'\"])?/"; preg_match_all($regex_pattern, $output, $matches); if(isset($matches[1][0])){ $favicon = $matches[1][0]; # check if absolute url or relative path $favicon_elems = parse_url($favicon); # if relative if(!isset($favicon_elems['host'])){ $favicon = $url . '/' . $favicon; } return $favicon; } return false; } 

Согласно Википедии , существует 2 основных метода, которые могут быть использованы веб-сайтами для получения значка, полученного браузером. Первый, как сказал Стив, имеет значок, сохраненный как favicon.ico в корневом каталоге веб-сервера. Во-вторых, ссылка на значок с помощью тега HTML-ссылки.

Чтобы охватить все эти случаи, лучшая идея состояла в том, чтобы сначала проверить наличие файла favicon.ico, а если он отсутствует, найдите либо <link rel="icon" либо <link rel="shortcut icon" в источнике (ограничен узлом заголовка HTML), пока вы не найдете значок. Вам решать использовать ли регулярное выражение или какой-либо другой вариант поиска строк (не говоря уже о встроенных в PHP). Наконец, этот вопрос может вам помочь.

Похоже, http://www.getfavicon.org/?url=domain.com ( FAQ ) надежно скрежет значки веб-сайта. Я понимаю, что это сторонний сервис, но я думаю, что это достойная альтернатива сервису favicon Google.

Я внедрил собственный favicon-grabber, и я подробно описал использование в другом сообщении StackOverflow здесь: Получить значок веб-сайта с помощью JS

Спасибо, и дайте мне знать, если это поможет вам. Кроме того, любая обратная связь с благодарностью.

Первый метод, в котором мы можем искать его из fevicon.ico, если он найден, чем он будет показывать его еще не

 <?php $userPath=$_POST["url"]; $path="http://www.".$userPath."/favicon.ico"; $header= get_headers($path); if(preg_match("|200|", $header[0])) { echo '<img src="'.$path.'">'; } else { echo "<span class=error>Not found</span>"; } ?> 

В другом методе вы можете искать значок и получать этот файл значков

  <?php $website=$_POST["url"]; $fevicon= getFavicon($website); echo '<img src="http://www.'.$website.'/'.$fevicon.'">'; function getFavicon($site) { $html=file_get_contents("http://www.".$site); $dom=new DOMDocument(); @$dom->loadHTML($html); $links=$dom->getElementsByTagName('link'); $fevicon=''; for($i=0;$i < $links->length;$i++ ) { $link=$links->item($i); if($link->getAttribute('rel')=='icon'||$link->getAttribute('rel')=="Shortcut Icon"||$link->getAttribute('rel')=="shortcut icon") { $fevicon=$link->getAttribute('href'); } } return $fevicon; } ?> 

См. Этот ответ: https://stackoverflow.com/a/22771267 . Это простой в использовании класс PHP для получения URL-адреса favicon и его загрузки, а также информация о значении типа файла favicon или о том, как был найден значок (URL по умолчанию, <link> ):

 <?php require 'FaviconDownloader.class.php'; $favicon = new FaviconDownloader('https://code.google.com/p/chromium/issues/detail?id=236848'); if($favicon->icoExists){ echo "Favicon found : ".$favicon->icoUrl."\n"; // Saving favicon to file $filename = 'favicon-'.time().'.'.$favicon->icoType; file_put_contents($filename, $favicon->icoData); echo "Saved to ".$filename."\n\n"; } else { echo "No favicon for ".$favicon->url."\n\n"; } $favicon->debug(); /* FaviconDownloader Object ( [url] => https://code.google.com/p/chromium/issues/detail?id=236848 [pageUrl] => https://code.google.com/p/chromium/issues/detail?id=236848 [siteUrl] => https://code.google.com/ [icoUrl] => https://ssl.gstatic.com/codesite/ph/images/phosting.ico [icoType] => ico [findMethod] => head absolue_full [error] => [icoExists] => 1 [icoMd5] => a6cd47e00e3acbddd2e8a760dfe64cdc ) */ ?> 

Если вы хотите получить значок с определенного веб-сайта, вам просто нужно извлечь favicon.ico из корня своего веб-сайта. Вот так:

 $domain = "www.example.com"; $url = "http://".$domain."/favicon.ico"; $icondata = file_get_contents($url); ... you can now do what you like with the icon data 

Нашел эту тему … Я написал плагин WordPress, который включает в себя множество вариаций при извлечении значка. Поскольку существует много кода GPL: http://plugins.svn.wordpress.org/wp-favicons/trunk/

Он позволяет запускать сервер, на котором вы можете запросить значки с помощью запросов xml rpc, чтобы любой клиент мог запрашивать значки. У него есть плагиновая структура, поэтому вы можете попробовать google, getfavicon и т. Д., Чтобы узнать, поставляет ли одна из этих сервисов что-либо. Если нет, то он переходит в режим выбора значка с учетом всех http-статутов (301/302/404) и лучше всего найти значок в любом месте. После этого он использует функции библиотеки изображений для проверки внутри файла, если это действительно изображение и какой образ (иногда расширение является неправильным), и он подключается, поэтому вы можете добавить после преобразования изображения или дополнительных функций в конвейер.

файл для извлечения http делает некоторую логику вокруг того, что я вижу выше: http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php

но это только часть трубопровода.

может стать довольно сложным, как только вы погрузитесь в него.

 $url = 'http://thamaraiselvam.strikingly.com/'; $doc = new DOMDocument(); $doc->strictErrorChecking = FALSE; @$doc->loadHTML(file_get_contents($url)); $xml = simplexml_import_dom($doc); $arr = $xml->xpath('//link[@rel="shortcut icon"]'); if (!empty($arr[0]['href'])) { echo "<img src=".$arr[0]['href'].">"; } else echo "<img src='".$url."/favicon.ico'>"; 

Я немного изменил второй метод Vivek и добавил эту функцию, и она выглядит так:

 <?php $website=$_GET['u']; $fevicon= getFavicon($website); echo '<img src="'.path_to_absolute($fevicon,$website).'"></img>'; function getFavicon($site) { $html=file_get_contents($site); $dom=new DOMDocument(); @$dom->loadHTML($html); $links=$dom->getElementsByTagName('link'); $fevicon=''; for($i=0;$i < $links->length;$i++ ) { $link=$links->item($i); if($link->getAttribute('rel')=='icon'||$link->getAttribute('rel')=="Shortcut Icon"||$link->getAttribute('rel')=="shortcut icon") { $fevicon=$link->getAttribute('href'); } } return $fevicon; } // transform to absolute path function... function path_to_absolute($rel, $base) { /* return if already absolute URL */ if (parse_url($rel, PHP_URL_SCHEME) != '') return $rel; /* queries and anchors */ if ($rel[0]=='#' || $rel[0]=='?') return $base.$rel; /* parse base URL and convert to local variables: $scheme, $host, $path */ extract(parse_url($base)); /* remove non-directory element from path */ $path = preg_replace('#/[^/]*$#', '', $path); /* destroy path if relative url points to root */ if ($rel[0] == '/') $path = ''; /* dirty absolute URL */ $abs = "$host$path/$rel"; /* replace '//' or '/./' or '/foo/../' with '/' */ $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#'); for($n=1; $n>0; $abs=preg_replace($re, '/', $abs, -1, $n)) {} /* absolute URL is ready! */ return $scheme.'://'.$abs; } ?> 

Конечно, вы называете это https://www.domain.tld/favicon/this_script.php?u=http://www.example.com Все еще не удается поймать все параметры, но теперь абсолютный путь разрешен. Надеюсь, поможет.