Нашел этот PHP-скрипт на GitHub https://github.com/ao/favicons и, кажется, работает хорошо. Легко встраивается в другие скрипты, которым может понадобиться фавикон.
ПРИМЕЧАНИЕ. Кажется, уважаемый пользователь советует не использовать этот код... См. комментарий ниже...
Проблема, с которой я сталкиваюсь, заключается в том, что cachine работает неправильно. Если вы посмотрите на index.php, вы увидите:
<?php
error_reporting(0);
// Change the location where images are stored/retrieved
//$_CACHE_PATH = "../favicon_cache"; // one directory up
$_CACHE_PATH = "cache"; // current directory
if (!isset($_GET['url'])) die();
if (substr( $_GET['url'], 0, 4 ) !== "http") {
$_GET['url'] = "http://".$_GET['url'];
}
$parse = parse_url($_GET['url']);
$domain = $parse['host'];
if (isset($_GET['refresh'])) {
@unlink('../'+$_CACHE_PATH+'/'.$domain);
}
if (isset($_GET['debug'])) {
require 'FaviconDownloader.php';
$_favicon = new FaviconDownloader($_GET['url']);
$_favicon->debug();
die();
}
if (file_exists($_CACHE_PATH+'/'.$domain)) {
//show cached copy first!
header('Content-Type: image/png');
echo file_get_contents($_CACHE_PATH+'/'.$domain);
die();
}
require 'FaviconDownloader.php';
$favicon = new FaviconDownloader($_GET['url']);
if ($favicon->icoExists){
if (!file_exists($_CACHE_PATH+'/'.$domain)) {
file_put_contents($_CACHE_PATH+'/'.$domain, $favicon->icoData);
}
header('Content-Type: image/png');
echo file_get_contents($_CACHE_PATH+'/'.$domain);
} else {
header('Content-Type: image/png');
echo file_get_contents('default.png');
}
?>
Весь index.php: https://github.com/ao/favicons/blob/master/index.php
Независимо от того, на что я меняю папку кеша, все фавиконы все равно пишутся в корневую папку. Пробовал несколько настроек с кодом, но ничего не работает. Удаление error_reporting(0); в верхней части index.php не показывает никаких дополнительных ошибок (показывает только: ресурс интерпретируется как документ, но передается с типом MIME image/png в консоли разработчика).
Моя папка кеша доступна для записи и правильно назначена владельцу, поэтому я уверен, что это не проблема.
Начал задавать вопрос/открывать проблему на GitHub, но вижу, что у другого человека такая же проблема, но нет ответа от автора. В надежде, что кто-то здесь с лучшими навыками PHP, чем я, может указать мне правильное направление.
Хорошо, спасибо, что проголосовали за мой вопрос. Просто нужен совет.
Трудно понять, почему люди голосуют против вопроса. Не мой код, только попросил совета, как исправить.
Я бы предположил, что это действительно очевидная синтаксическая ошибка, вопросы о которой не по теме, поэтому я проголосовал за закрытие. Вероятно, также поэтому единственный ответ, который вы получили, был от пользователя с низкой репутацией через полчаса после того, как я дал вам ответ в комментариях. Я повторю свой совет не доверять никакому коду, написанному этим человеком, если он совершает такую ошибку. И никогда не думайте, что вы знаете, кто голосует за или против вашего вопроса. Вы не знаете.
Вы должны использовать оператор точки (.) для объединения строк, например
echo file_get_contents($_CACHE_PATH+'/'.$domain);
следует изменить на
echo file_get_contents($_CACHE_PATH.'/'.$domain);
Спасибо @ReZa. Я уже пытался заменить все + на . но не повезло. Фавикон перестает отображаться и странно, никаких ошибок не отображается и не регистрируется.
Вы отключили отчеты об ошибках с помощью error_reporting(0); чтобы вы не видели ошибок @Woody
Еще раз спасибо @ReZa. У меня на самом деле отчеты об ошибках закомментированы на моем тестовом сервере. У автора скрипта на GitHub он активен, у меня нет. Но, похоже, мне нужно было перевести ClouldFlare в режим разработки, чтобы увидеть мои изменения. Кажется, сработало с вашим советом :)
Даже самый простой учебник скажет вам, что
+
не является оператором конкатенации в PHP. Кто бы это ни написал, вы не хотите использовать их код. Для всего.