1

サーバーの公開部分の外 (public_html ディレクトリの外) にあるディレクトリにいくつかの画像があります。画像の内容をphpファイルで読み込んで、結果をhtmlに出力できるようにしたいです。

たとえば、次のソース コードを含む getimg.php という php ファイルがあります。

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

$dir = '/home/server/images/';
$file_name = addslashes($_GET['file']);

readfile('' . $dir . '' . $file_name . '.jpg');

getimg.php は images ディレクトリにある jpg 画像の内容を読み取り、画像をユーザーに表示したいときに次のコードを使用して参照されます。

<img src="getimg.php?file=name_of_image_file">

getimg.php ファイルは、ユーザーがログインしていること、表示しようとしている画像を実際に所有していることなどを確認するために、いくつかの検証チェックも行います (簡単にするために、これは上に示していません)。このアプローチは、画像ファイルへのアクセスを制御するためのものです。しかし、それは当面の問題ではありません。

ここに問題があります: 上記のアプローチ/コードは Chrome ブラウザーでのみ機能します。画像が IE、FF、Safari、または Opera で正しく表示されません。これが機能しない理由、またはこれを適切に行う方法はありますか?

ノート:

  • 画像が大量にあるため、mysql を使用して画像を保存しないようにしています。ここでは、ファイルシステムを利用できることが非常に望ましいです。

  • ソリューションは、クロス ブラウザ フレンドリーである必要があります。

  • 実際には、画像は jpg、png、または gif ファイルにすることができます。簡単にするために、上記のコードは jpg 画像のみを処理します。

  • 関連性があるとは思えませんが、jQuery は使用していません。いいえ、jQuery を使用するようにサイト全体を変更するつもりはありません。「jQuery を使用する」投稿は、自動的に反対票を受け取ります。jquery は嫌いではありません。自分のサイトに適したソリューションではありません。

アップデート

問題はコード自体にはありませんでした。ログイン検証スクリプトを自動的に含めるようにphp.iniファイルを設定しました。すべてのブラウザにログインしていないため、画像が表示されませんでした。ばかげた間違いですが、理解でき、修正されました。上記のコードは問題なく動作するはずです。また、file_get_contents() の代わりに readfile() を使用するように更新されました。PHP を使用して画像にアクセスできるユーザーを制御する方法を探して Web を閲覧しているすべての人のために、この投稿を残しておきます。

4

3 に答える 3

3

readfile関数を使用します。

http://php.net/manual/en/function.readfile.php

于 2010-10-26T08:33:20.383 に答える
2

これを試して..

if($fileExt == 'jpg'){
$im = imagecreatefromjpeg($filePath);
    if ($im !== false) {
       header('Content-Type: image/jpeg');
       imagejpeg($im);
    }
}
if($fileExt == 'png'){
$im = imagecreatefrompng($filePath);
    if ($im !== false) {
       header('Content-Type: image/png');
       imagepng($im);
    }
}

画像がgifの場合、imagecreatefromgif()もあります

于 2010-10-26T07:45:51.027 に答える
0

私はあなたが以前に概説したアプローチを使用しました、そしてそれはうまくいきます。Chromeで動作するという事実は、ブラウザの問題であることを示しています。3つの提案:

  1. Firefox Liveヘッダー拡張機能を使用するcurl -Iか、getimg.phpが要求されたときにPHPが送信するヘッダーを正確に確認します。コンテンツエンコーディングまたはgzip圧縮の問題が発生する可能性があります。ブラウザが画像をキャッシュするようにヘッダーを送信することもできます。デフォルトでは、PHPはこれを防ぐためにヘッダーを送信します。

  2. RewriteRuleを使用して、src ="file_name.jpg"ieを使用できるようにします。

    RewriteRule ^(。+)。jpg $ getimage.php?file = $ 1.jpg

  3. jQueryを使用します。jQueryは常に機能します。

于 2010-10-26T08:25:36.700 に答える