画像をホストするWebサイトが共有され、直接リンクされています。これは悪い考えだとどこかで読んだことがあります。Facebookから消えるまで既存のリンクをしばらく維持しながら、単純な間接アプローチを適用するにはどうすればよいですか?
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);
生成するリンクには、画像IDとリンクの有効期限が切れる時刻の2ビットの情報を入れます(したがって、リンクを直接送信することはできません)。さらに、ハッシュを追加して、誰も変数を「混乱」させないようにします。ハッシュの生成方法を知っているのはあなただけです(に依存します$secretpassword
)。
これらのリンクは、5分後、または設定した内容で期限切れに$expire
なります。
1つの問題は、これらのリンクがあまりきれいに見えないことです。私はそれらをより美しく見せるための方法を知っていますが、それはこの質問の範囲を超えています。
古い答え
他のドメイン(Facebookなど)にある画像を共有していることを意味していると思います。
あなたが説明する問題は、他のドメインの画像(および帯域幅)を使用して他のドメインから「リーチング」していることです。直接リンクに関するFacebookのポリシーはわかりませんが、サイトが少ない場合は実際の負担になります。間接参照を追加しても、この問題は解決されません。
それを解決する唯一の方法は、無料の画像サーバーまたは自分で制御する画像サーバーのいずれかに画像をアップロードすることです。ユーザーにこれを行わせることも、ユーザーのために行うこともできます。イメージサーバーを制御しない場合、自動化は困難ですが、イメージサーバーを使用すると、非常にコストがかかる可能性があります(帯域幅は高価です)。ユーザーにそれを行わせると、ユーザーに負担がかかり、追加の手順を実行する必要があるため、サイトの魅力が低下する可能性があります。
これらはあなたが持っているオプションだと思います。