0

いろいろな形で守りたいメディアコンテンツのあるサイトを作ろうとしています。100%になることは決してないことは承知していますが、imagejpegで画像を提供できるようにしたいので、メディアアドレスの実際のアドレスを視聴者に提供したり、アドレスをコピーしたりすることはできません。この方法で画像を表示します。

主なものは、実際のメディアリンクアドレスを非表示にすることです。

このような画像を出力しますNEW_SIZE_IMAGE.PHP/NEW_SIZE_IMAGE_THUMB.PHP:

    // Content type
    header('Content-Type: image/jpeg');

    // Output
    imagejpeg($thumb);

これは、ヘッダーの性質上、iframe内でのみ実行できます。iframeを使用すると、動的変数をページに渡すという問題が発生します。これはPOSTではないためです。画像はページ上の個別のiframe内に読み込まれます。

これが親指の写真の私の問題です。それから、小さなボックスを介して実行する高解像度の写真にも同様の問題があります。

私はこのMAIN_SITE.PHPのように画像ナビゲーションを実行します:

    <a onclick="TINY.box.show({url:'../image_holder_pop.php',width:800,height:600})">
    <iframe width="300" height="200" src="../new_size_image_thumb.php"></iframe>
    <br />
    <h2><br />HIGH RES LINK</h2></a>

IMAGE_HOLDER_POP.PHP

   <iframe width="800" height="600" src="../new_size_image.php"></iframe>

これを機能させるには、変数をnew_size_img.php/new_size_img_thumb.phpファイルに渡す必要があります。

編集:問題の写真: 私の問題の写真-tinyboxのphp画像

4

2 に答える 2

0

PHPに渡して実行したいこの変数を正確に何を期待するかは、やや不明確です。私はあなたがあなたが望むのはどの画像であるか、あるいはある種のユーザー識別子などを単に示したいと思っていると思います...

そのような変数をPHPに渡したい場合querystringは、リクエストのを使用できます。(GETリクエストに対して機能します)

たとえば<img>、次の要素を作成できますsrchttp ://example.com/new_size_image.php?image=imagename&otherparam=1&otherparam2=2

ここで、imagenameは画像の識別子であり、otherparam1と2はオプションの引数です。次のように、PHPでこれらの変数にアクセスできます。

$imagename = $_GET['image'];
$otherparam = $_GET['otherparam'];
$otherparam2 = $_GET['otherparam2'];

次に、これを使用して、クライアントに提供する画像を特定できます。

次に、なぜiframeが必要だと思うのか混乱しています。何も難読化したり、ユーザーがリンクをコピーするのを阻止したりすることはありません。画像を使用する方がはるかに優れています。適切なヘッダーを設定するだけです。たとえば、$filenameロードする画像へのパスである引数をとるこの関数を試してください。

function outputImage( $filename ) {
    header('Content-Description: File Transfer');
    header("Content-type: image/jpeg");
    header('Content-Disposition: attachment; filename='.basename($filename ));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename ));
    ob_clean();
    flush();
    readfile($filename );
    exit;
}

(これは関連する質問からです:ランダムな画像へのURL

セキュリティに関する注意:クエリ文字列を使用してスクリプトに渡す画像(?image=最初のブロックからの画像)を使用する場合は、ディスク上のファイルの場所を渡さないようにしてください。渡さない場合は、十分な知識のあるユーザーがスクリプトが選択したファイルを送信するようにするリクエストを作成します。代わりに、などのある種の識別子を使用することをお勧めし?image=123456ます。

<img>これにより、次のように、このスクリプトのURLを要素として使用できるようになります。

<img src="http://example.com/new_size_image.php?image=imagename&otherparam=1&otherparam2=2" width="300" height="200" />

編集

本当にGETを使用したくない場合は、AJAXでjQueryを使用して画像を読み込むことができます。次に、サーバーへのPOSTリクエストを作成して、base64でエンコードされた画像を返します。この画像はページに挿入されます。これは、<img>タグに実際には画像のURLが含まれず、代わりに生のbase64でエンコードされたデータが含まれることを意味します。あまりきれいではありませんが、やや難解です。

jQueryとAJAXを使用して画像を読み込むには、次の応答を確認してください:https ://stackoverflow.com/a/12714338/747811

このアプローチを採用した場合は、画像を提供するたびにエンコードを計算するのではなく、base64でエンコードされたファイルとして画像を保存することをお勧めします。画像をエンコードするには、次のようなものを使用できます:http: //www.freeformatter.com/base64-encoder.html

それらをPHPでエンコードするには、次を使用します:http base64_encode(): //php.net/manual/en/function.base64-encode.php

于 2013-03-02T21:31:23.663 に答える
0

ハッシュと画像IDの関係を作成するデータベースを使用して、IDを難読化できます。

置く代わりに、たとえばYoutubeのように行いますnew_img.php?id=123new_img.php?hash=0guww7g4ow

現在の画像テーブルに列を追加する必要がありhash(IDを使用している場合は、すでに列があると思います)、既存の画像ごとにハッシュを作成する必要があります。

36進数で10文字のハッシュを生成するには(10 ^ 36の組み合わせ、これで十分だと思います)、私は次のことに慣れています。

$hash = substr(str_shuffle(base_convert(str_shuffle(sha1(str_shuffle(md5(rand() . microtime())))), 16, 36)), 0, 10);

次に、reader.phpハッシュをGET引数として作成し、ハッシュと画像の関係を作成します。最後に、imagejpeg(またはさらに単純なreadfile)を使用して表示します。

お役に立てれば。

于 2013-03-03T08:14:09.670 に答える