PHP – получение значка сайта и преобразование его в png при необходимости

Для любого данного сайта «example.domain.tld» или просто «domain.tld» мне нужно сделать следующее в PHP:

  • Если на сайте есть значок, получите его, где бы он ни находился
    • Если это еще не PNG, конвертируйте его в PNG
    • Сохраните его в /favicons/example.domain.tld.png
  • Если на сайте нет значков, ничего не делайте.

Есть идеи? Я нахожусь в тупике от ненадежного файлового формата и местоположения значков, но если это вообще возможно, я хочу избежать загрузки всего источника страницы с помощью file_get_contents, чтобы найти его в заголовках. Также преобразование в png кажется нетривиальным.

Благодаря,

скуловая кость

Related of "PHP – получение значка сайта и преобразование его в 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-адресов:

  • полный абсолютный URL: http://www.domain.com/images/fav.ico
  • абсолютный URL с относительной схемой: //www.domain.com/images/fav.ico
  • абсолютный путь: /images/fav.ico
  • относительный URL: ../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 .