Я использую следующий код PHP, чтобы захватить og:image
недвижимость с веб-страницы:
$site_html = file_get_contents($some_url);
$html = new DOMDocument();
$html->loadHTML($site_html);
$meta_og_img = null;
foreach ($html->getElementsByTagName('meta') as $meta) {
if ($meta->getAttribute('property') == 'og:image') {
$meta_og_img = $meta->getAttribute('content');
}
}
Я ожидаю, что нужно og:image
информацию о загрузке каждой страницы, поэтому было бы лучше (с точки зрения времени загрузки страницы и т. д.) либо (1) получить og:image
с внешнего сайта каждый раз, когда пользователь загружает страницу или (2) получить og:image
и сохранить его на моем сервере?
Во-вторых, если я буду хранить og:image
изображение на моем сервере, как мне организовать, где оно находится?
Например, если мне нужно og:image
с URL следующей веб-страницы, как и где я буду хранить данные og:image
на моем сервере:
Link: http://www.huffingtonpost.com/2014/10/20/hong-kong-negotiations-go_n_6016982.html?utm_hp_ref=canada&ir=Canada
og:image: http://i.huffpost.com/gen/2187192/thumbs/o-UMBRELLA-COPS-facebook.jpg
Буду ли я хранить URL-адрес в таблице базы данных и дать ему уникальный идентификатор, такой, чтобы каталог сервера og:image
тогда будет что-то вроде:
/var/www/html/og_images/<ID>/image.jpg
Благодарю.
Лучше хранить его или получать каждый раз: определенно лучше хранить как можно больше удаленной информации, хранящейся локально. Чем больше необходимо удаленных вызовов, тем медленнее время загрузки страницы. Если вас беспокоит наличие самого последнего изображения, то есть несколько способов асинхронной загрузки содержимого, которое не влияет на работу пользователя.
Что касается хранения, есть несколько направлений, по которым вы можете пойти с этим. Вам необходимо определить, сколько изображений вы будете хранить и каково количество места. Если у вас достаточно дискового пространства, то вы, безусловно, можете хранить образы на локальном жестком диске, но тогда вам следует учитывать, что по мере увеличения трафика будет больше запросов на изображения, поступающие на сервер.
Более разумное решение — изучить использование решения, такого как Amazon S3, и обслуживать статические файлы непосредственно из их CDN, CloudFront. Тогда вы не будете нести дополнительный трафик на ваш веб-сервер только для доставки статических файлов.
Вы могли бы, вероятно, сохранить все в вашей базе данных.
$url = 'http://www.huffingtonpost.com/2014/10/20/hong-kong-negotiations-go_n_6016982.html?utm_hp_ref=canada&ir=Canada';
$ogImageUrl = 'http://i.huffpost.com/gen/2187192/thumbs/o-UMBRELLA-COPS-facebook.jpg';
$image = file_get_contents('http://i.huffpost.com/gen/2187192/thumbs/o-UMBRELLA-COPS-facebook.jpg');
$escaped_url = mysql_real_escape_string($url);
$escaped_ogImageUrl = mysql_real_escape_string($ogImageUrl);
$query = 'INSERT INTO `og_images` (`url`, `og_image_url`, `image`)
VALUES ('.$escaped_url.', '.$escaped_ogImageUrl.', $image)";
Я не знаю, хорошая ли идея хранить изображения в БД.
Сводится к вопросу: «капать или не капать»? Увидеть Хранение изображений в БД — да или нет? за аргументы за / против.
Аргумент Pro: очень простой запрос SELECT.
Вы можете хранить только ссылки и указатель на папку кэша.
Вы можете хранить только ссылки и указатель на внешний CDN.
Все эти решения зависят от варианта использования и ожидаемого трафика.
Если это сайт с низким трафиком, может быть достаточно сохранения в db
Если это сайт с высоким трафиком, лучше выбрать уровень CDN.