これを行うのは悪いですか?
index.php
<img src = "image.php"/>
image.php
header('location: /location/to/another/image.jpg');
あなたはおそらくこれを見て、「なぜ彼はこれをやりたいのか」と考えているでしょう。上記は私がやっていることの単純なシナリオです。これを行うことが「許容できる」かどうかを知りたいだけですか?
確かにそれは可能ですが、PHP は画像のバイト数と適切なヘッダー (コンテンツ タイプなど) を返すこともできることに注意してください。あなたが求めているのは、単純に画像リクエストを PHP で「解析」することだけです。したがって、image.php リクエストが唯一のリクエストになる可能性があります。
fpassthru については、PHP のドキュメント ページのサンプル スクリプトを参照してください。
ひどいことではありませんが、ページの読み込みが遅くなるため、必要のないときにリンク/ URL をリダイレクトしないようにすることをお勧めします (画像ごとに 1 回ではなく 2 回の ping を実行するようなものです)。
また、そのようなことを行うように Web サーバーを構成することをお勧めします。私はnginxを使用しており、1つのサイトの一部に対してそれを行っています(ユーザーが未公開のファイルを表示するためにサインインしていることを確認します). しかし、これは実際のリダイレクトではなく、その特定のファイルを提供する必要があることをサーバーに伝えるだけの x-accel-redirect ヘッダーを使用しています。
このページにアクセスするユーザーの数によって異なります。acidzombie24が述べたように、そのようなリダイレクトはサーバーの速度を低下させます。ただし、サーバーが適切に構成され、Connection: keep-alive
サポートされている場合、2番目の接続は必要ありませんが、同じ接続で2番目の要求のみが必要になります。
私の理解では、URLの最後に一意のIDを追加することで、ブラウザがこれらの画像をキャッシュしないようにしようとしています。
リダイレクトするときは、ヘッダーでブラウザにこのリクエストを忘れて別のURLへのリクエストを開始するように指示するため、1つの画像リクエストごとに2つのリクエストを受け取ることになります。
ブラウザにリダイレクトを強制する代わりにimage.php
、画像ファイルをロードするだけで、ブラウザのリダイレクトと同じ効果があります(つまり、キャッシュはありません)が、別のリクエストは必要ありません。
HTMLの場合:
<img src="image.php?id=whatever" />
でimage.php
:
readfile( 'location/to/another/image.jpg'); // local file system path needed
終わり。ブラウザによるキャッシュはなく、別のリクエストの追加のオーバーヘッドもありません。