【发布时间】:2011-09-07 06:59:54
【问题描述】:
我有一个托管图像的网站,可以直接共享和链接。我在某处读到这是一个坏主意。我怎样才能应用简单的间接方法,同时保持现有链接一段时间,直到它们从 Facebook 上消失?
【问题讨论】:
-
编辑了这个问题,因为它显然不清楚。
标签: php image indirection
我有一个托管图像的网站,可以直接共享和链接。我在某处读到这是一个坏主意。我怎样才能应用简单的间接方法,同时保持现有链接一段时间,直到它们从 Facebook 上消失?
【问题讨论】:
标签: php image indirection
下面的旧答案。
创建无法直接链接到的链接的示例:
$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);
您在生成的链接中放置了两个信息:图像 ID 和链接到期的时间(因此您不能直接链接)。此外,您添加了一个哈希,这样任何人都无法“弄乱”变量,只有您知道如何生成哈希(取决于$secretpassword)。
这些链接会在 5 分钟后过期,或者您将 $expire 设置为任何值。
一个问题是这些链接看起来不太漂亮。我知道如何让它们看起来更漂亮,但这超出了这个问题的范围。
旧答案
我假设您的意思是您共享其他域(如 Facebook)上的图像。
您描述的问题是您正在通过使用其他域的图像(和带宽)“窃取”其他域。我不知道 Facebook 关于直接链接的政策,但对于较小的网站来说,这是一个真正的负担。添加间接性并不能解决这个问题。
解决此问题的唯一方法是将图像上传到图像服务器,可以是免费的,也可以是您自己控制的。您可以让您的用户执行此操作,或者您可以为他们执行此操作。 如果您不控制图像服务器,则很难实现自动化,但是拥有图像服务器可能会非常昂贵(带宽很昂贵)。让用户这样做会给他们带来负担,并且可能会降低您的网站的吸引力,因为他们需要执行额外的步骤。
我认为这些是您的选择。
【讨论】: