#php #image #indirection
#php #изображение #косвенный
Вопрос:
У меня есть веб-сайт, на котором размещены изображения, которые являются общедоступными и связаны напрямую. Я где-то читал, что это плохая идея. Как я мог бы применить простой косвенный подход, возможно, сохраняя существующие ссылки на некоторое время, пока они не исчезнут с Facebook?
Комментарии:
1. Отредактировал вопрос, поскольку он был явно неясен.
Ответ №1:
Старый ответ ниже.
Пример создания ссылок, на которые вы не можете напрямую ссылаться:
$expire = 60 * 5; // 5 minutes;
$time = $_SERVER['REQUEST_TIME'] $expire;
$image_id = $image_id;
$secretpassword = "secretpassword";
function generate_link($image_id, $time, $secretpassword) {
$hash = md5($secretpassword . $time . $image_id);
return "image.php?" . http_build_query(array(
'image_id' => $image_id,
'time' => $time,
'hash' => $hash,
));
}
function is_link_valid($image_id, $time, $hash, $secretpassword) {
if ($hash !== md5($secretpassword . $time . $image_id)) {
return false; // hash is invalid
}
if ($time < $_SERVER['REQUEST_TIME']) {
return false; // link has expired
}
}
Используйте как:
generate_link($image_id, $time, $secretpassword);
is_link_valid($_GET['image_id'], $_GET['time'], $hash, $secretpassword);
Вы помещаете два бита информации в создаваемые вами ссылки: идентификатор изображения и время истечения срока действия ссылки (поэтому вы не можете использовать прямую ссылку). Дополнительно вы добавляете хэш, чтобы никто не мог «перепутать» переменные, только вы знаете, как сгенерировать хэш (зависит от $secretpassword
).
Срок действия этих ссылок истекает через 5 минут, или независимо от того, что вы установили $expire
.
Одна из проблем заключается в том, что эти ссылки выглядят не очень красиво. Я знаю способы сделать их более красивыми, но это выходит за рамки данного вопроса.
Старый ответ
Я предполагаю, что вы имеете в виду, что вы делитесь изображениями, которые находятся на других доменах (например Facebook).
Проблема, которую вы описываете, заключается в том, что вы «высасываете» другие домены, используя их изображения (и пропускную способность). Я не знаю политики Facebook в отношении прямых ссылок, но для небольших сайтов это реальная нагрузка. Добавление косвенных ссылок не решит эту проблему.
Единственный способ решить эту проблему — загрузить изображения на сервер изображений, либо бесплатный, либо тот, который вы контролируете самостоятельно. Вы могли бы попросить своих пользователей сделать это, или вы можете сделать это за них. Автоматизировать это сложно, если вы не управляете сервером изображений, но наличие сервера изображений может быть очень дорогостоящим (пропускная способность дорогая). То, что это делают пользователи, накладывает на них нагрузку и может сделать ваш сайт менее привлекательным, потому что им нужно выполнить дополнительный шаг.
Я думаю, что это те варианты, которые у вас есть.
Комментарии:
1. Эти изображения поступают непосредственно с сайта, над которым я работаю (например, фотографии участников). Одна из проблем с прямым доступом к изображениям заключается в том, что любой может ссылаться на них после их распространения. Этого можно избежать, если где-то есть «посредник». Однако, проблема с пиявками.
2. Ах, в таком случае, вы могли бы просто создавать ссылки, которые почти невозможно угадать. Я приведу пример.