Для любого данного сайта «example.domain.tld» или просто «domain.tld» мне нужно сделать следующее в PHP:
Есть идеи? Я нахожусь в тупике от ненадежного файлового формата и местоположения значков, но если это вообще возможно, я хочу избежать загрузки всего источника страницы с помощью file_get_contents, чтобы найти его в заголовках. Также преобразование в png кажется нетривиальным.
Благодаря,
скуловая кость
Как это обычно бывает, я нашел непродолжительное решение вскоре после того, как задал вопрос – пусть Google сделает для вас работу:
http://www.google.com/s2/favicons?domain=URL
возвращает 16×16 png
Найдено: http://www.controlstyle.com/articles/programming/text/php-favicon/
Я собираюсь попробовать его для своего проекта, и я отчитаюсь и расскажу, работает ли он!
ура
Iain
Как сказал Iain Fraser, класс Favicon от controlstyle.com не работает со всем тестовым случаем.
В принципе, если это предусмотрено, тег значка ярлыка <link>
может содержать разные типы URL-адресов:
http://www.domain.com/images/fav.ico
//www.domain.com/images/fav.ico
/images/fav.ico
../images/fav.ico
Кроме того, веб-страница может содержать <base href="..." />
который изменяет способ обращения с относительным URL-адресом и абзацем …
Поэтому я написал класс PHP, который работает со всеми этими случаями. Во-первых, он пытается получить URL-адрес favicon из атрибута <link>
и отпасть от URI-файла favicon по умолчанию (//www.domain.com/favicon.ico) в случае сбоя.
Вы можете взять его на моем сайте здесь: http://www.finalclap.com/faq/477-php-favicon-find-download или установить его с помощью композитора: composer require vincepare/favicon-downloader
.
Как использовать :
<?php require 'FaviconDownloader.class.php'; $favicon = new FaviconDownloader('http://stackoverflow.com/questions/19503326/bug-with-chrome-tabs-create-in-a-loop'); 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"; } ?>
Покрытие PNG не так уж сложно.
Я не задаю вопрос полностью, это значок fav на вашем сайте или на других сайтах? Если на других сайтах вам придется анализировать полученный HTML-код, а затем как-то загружать значки.
Если favicon не находится в /favicon.ico, я думаю, вам нужно проанализировать HTML.
Для обнаружения типа файла вы можете использовать это расширение , которое определяет тип файла с помощью магических байтов.
Вы можете конвертировать в PNG с помощью библиотеки GD, пример можно найти здесь .
Если ваша установка PHP включает библиотеку GD, вы можете преобразовать изображение в PNG с помощью функции imagepng .