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

StackOverflow https://stackoverflow.com/questions/1276688

Вопрос

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

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

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

Спасибо,

Мала

Это было полезно?

Решение

Как обычно, вскоре после того, как я задал вопрос, я нашел приемлемое решение — пусть Google сделает всю работу за вас:

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

возвращает png размером 16x16

Другие советы

Нашел это: http://www.controlstyle.com/articles/programming/text/php-favicon/

Я собираюсь попробовать это в своем проекте, отчитаюсь и скажу вам, сработает ли это!

Ваше здоровье

Иэн

Как сказал Иэн Фрейзер, класс 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-адрес значка из <link> атрибут и возврат к URI значка по умолчанию (//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 не так уж и сложно.

Я не совсем понимаю вопрос: это значок избранного на вашем сайте или на других сайтах?Если на других сайтах вам придется проанализировать полученный HTML, а затем каким-то образом загрузить значок.

Если значок не находится по адресу /favicon.ico, я думаю, вам придется проанализировать HTML.

Для определения типа файла вы можете использовать это расширение, который определяет тип файла с помощью магических байтов.

Вы можете конвертировать в PNG с помощью библиотеки GD, пример можно найти. здесь.

Если ваша установка PHP включает библиотеку GD, вы можете преобразовать изображение в PNG, используя команду изображениеpng функция.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top