PHP — получение значка сайта и преобразование его в png при необходимости
-
16-09-2019 - |
Вопрос
Для любого сайта «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 функция.