2016-03-27 4 views
1

スクリプトで画像を見た後に、ビューアのHTTP_USER_AGENTを取得したいと思います。htaccessリダイレクト後に画像から奇妙な文字を取得する

は、ここで私は別のフォルダに画像ファイルやスクリプトを分離したディレクトリ

/www 
|-- /other.org 
|-- /example.com 
    |-- /sub 
     |-- .htaccess 
     |-- agentlog.php 
     |-- /i 
      |-- photo.png 

です。すべてのファイルのルートはドメインのサブディレクトリにあります。したがって、http://example.com/subの場合、画像はhttp://example.com/sub/iに格納されます。 .htaccessファイルは、すべての画像をHTTP_USER_AGENTというPHPファイルにリダイレクトし、データベースに格納し、.htaccessによってリダイレクトされないサブドメインを介して画像を表示します。

さらに詳しく説明すると、ユーザーはブラウザにhttp://example.com/sub/photo.pngと入力すると、その画像のように見え、視聴者は何も気付かず、リダイレクトすることもありません。しかし、何が起こるかは

.htaccessphoto.pnghttp://example.com/sub/i/photo.pngに存在するかどうかをチェックし、画像が存在する場合http://example.com/sub/agentlog.phpagentlog.phpという名前のファイルへの要求をリダイレクトして、agentlog.phpますが、ログインして、データベースに保存することでユーザーの種類のときphoto.pnghttp://i.example.com/photo.pngを表示します。ここで、http://i.example.com/www/sub/iを示します。ここで

はここ.htaccessファイル

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^i\. [NC] 
RewriteCond %{DOCUMENT_ROOT}/i/$1 -f 
RewriteRule ^(.+\.(?:jpe?g|png|gif))$ agentlog.php [NC,L] 

されるSQLコードなしagentlog.phpファイル

<?php 
$path = $_SERVER['REQUEST_URI']; 
$agent = $_SERVER['HTTP_USER_AGENT']; 
$ext = pathinfo($_SERVER['REQUEST_URI'], PATHINFO_EXTENSION); 
$filename = basename($path); 

header("Content-Type: image/$ext"); 

$img = "http://i.example.com/$filename"; 
readfile($img); 

すべてが画像を除いてうまく機能は、実際には、.htaccessリダイレクト自体は表示されませんされています。それは実際の画像そのものではなく、

�PNG IHDR�^���� �IDATx��ݯ��u���............ 

を示しています。

イメージに直接アクセスすると、問題は.htaccessにあると思いますが、この作業を行うには他にどのようなルールを書くべきか分かりません。

さらに詳しい情報が必要な場合は、追加して嬉しいです。どうすれば解決できますか?または、これを行う方法はありますか?私はすでにContent Headerを入れていますが、なぜ動作しないのか分かりません。

+0

私はリクエストがあります。なぜなら 'readfile(" url ")'を 'readfile(" file_path ")'に変更するのはなぜですか?私がURLの前にreadfileを使用していないので、試してみてください。 –

+0

@LionelChanこんにちは、私は試しても違いはありません、私はまだイメージの単語のバージョンを取得します。 – pleasega

+0

PHPコードから '$ _SERVER [" DOCUMENT_ROOT "]'を印刷して、あなたが得たものを教えてください – anubhava

答えて

2

終了タグ?>を使用している場合は、後で空白文字または改行文字があるかどうかをチェックします。終了タグを省略することは良い方法と考えられます。

編集

これを試してください: -

 $img = "http://i.example.com/$filename"; 
     header("Content-Type: image/$ext"); 
     header('Content-Length: ' . filesize($img)); 
     ob_clean(); // Clean (erase) the output buffer. 
     flush(); // Flush system output buffer. 
     readfile($img); // Output the file to browser. 
     exit; // Stop execution of the script 
+0

こんにちは空白や改行がない、私は終了タグを省略していると違いはありません、画像はまだ表示されません。 – pleasega

+0

Add:これをチェックしてください - http://stackoverflow.com/questions/5877138/broken-image-with-readfile-and-file-get-contents –

+0

@LionelChanこんにちは、私はそれを試しました、それでも同じです。私はまだ問題が何かを知りません。 – pleasega

0

すべてが画像を除いてうまく機能し、実際、 .htaccessのリダイレクト自体は表示されません。とにかく、あなたの.htaccessが私の環境で それが必要に動作しない代わりに、画像の/ ...

text/plainで - それは、ヘッダのエラー(MIMEタイプエラー)です

�PNG IHDR�^���� �IDATx��ݯ��u���............

を示しこのようなものになる:

RewriteEngine On 

RewriteCond %{REQUEST_URI} (.+\.(?:jpe?g|png|gif)) 
RewriteRule ^(.+\.(?:jpe?g|png|gif))$ agentlog.php [NC,L] 

そしてPHPコードこの

ようなものになることができます210
<?php 
$path = $_SERVER['REQUEST_URI']; 
$agent = $_SERVER['HTTP_USER_AGENT']; 
$ext = pathinfo($_SERVER['REQUEST_URI'], PATHINFO_EXTENSION); 
$filename = basename($path); 

header("Content-Type: image/".$ext); 

readfile($filename); 
?> 
関連する問題