3

私はこのphpコード(image.php)を持っています:

if($_SERVER['SERVER_NAME'] == 'site.tld') {

    header('Content-type: image/jpeg');
    echo file_get_contents("image1.jpg");

} else {

    header('Content-type: image/jpeg');
    echo file_get_contents("image2.jpg");

}

*このページ ( image.php) は でホストされていsite.tldます。

さて... このコードは によって呼び出され<img src='http://site.tld/image.php' />ます。

image1.jpg画像が必要な場合site.tldとそうでない場合は表示したいと思いimage2.jpgます。

そのコードはimage1.jpg、コードが呼び出されたドメイン名を表示します。

解決策はありますか?ありがとう。

編集:の出力$_SERVER['SERVER_NAME']site.tld(私のサーバー)任意のWebサイトにあります...

スクリプトが正しく動作しないため、これが問題です。

4

4 に答える 4

4

これを試して:

    $imgPath = "image1.jpg";

    if(stripos($_SERVER["HTTP_REFERER"], 'http://site.tld/')=== false){

       $imgPath = "image2.jpg";

    }

    //echo $_SERVER["HTTP_REFERER"]."<br/>";
    //echo $imgPath."<br/>";

    header('Content-type: image/jpeg');
    echo file_get_contents($imgPath);

その他のオプション (PWhite コメントに基づく) :

http://site.tld/から行うすべての呼び出しはクエリ文字列キーを追加し、このデータも評価します。

内部 site.tld :

<img src='http://site.tld/image.php?myfookey=secret' />

外部 site.tld :

<img src='http://site.tld/image.php' />

image.php

$imgPath = "image1.jpg";

if (!(isset($_REQUEST["myfookey"]) &&  $_REQUEST["myfookey"] == 'secret')){
    $imgPath = "image2.jpg";
} 

header('Content-type: image/jpeg');
echo file_get_contents($imgPath);
于 2012-10-24T21:02:19.693 に答える
1

その理由は

$_SERVER['SERVER_NAME']

サーバーの名前が表示されます(つまり、PHP を実行するサーバー)。

必要なのは、含まれているページの URL ですが<img src='http://site.tld/image.php' />、クライアントのブラウザーがそのような情報をサーバーに送信するかどうかはわかりません。

/編集: サード パーティの Web サイトに自分の写真が表示されないようにする場合は、サーバー構成レベルで行います。たとえば、http ://www.davidairey.com/stop-image-theft-hotlinking-htaccess/

于 2012-10-24T20:50:53.470 に答える
0

まず$_SERVER['SERVER_NAME']、if 条件の出力を確認します。次に、readfile()代わりに使用しfile_get_contents()ます。

于 2012-10-24T20:50:13.303 に答える
0

Apache を使用している場合はUseCanonicalName Off、仮想ホスト構成で設定してみてください (おそらく Apache をリロード/再起動する必要があります)。

于 2012-10-24T20:56:56.830 に答える