2016-11-03 6 views
0

セキュリティ上の理由から、Webルートディレクトリの外に保存されたユーザーイメージを表示しようとしています。 show_imgs.phpに移動したとき、私のブラウザは、不器用なシンボルの束を返し、無限ループに入っているように見えますが、hereの提案を試しました。Webルートの外部からのイメージを表示できませんか?

私のコードとその唯一の違いは、私のコードがループしていることです。それがそれと関係があるかどうかは分かりません。

マイコード:

$image_array = ["img_1.png", "img_2.png", "img_3.png"]; 

$i = 1; 
foreach($image_array as $image) { 

    //Specify absolute path 
    $image_path = "/absolute/path/to/img_$i.png"; 

    //Get file contents. I have also tried readfile() in place of this. 
    $contents = file_get_contents($image_path); 

    //Perhaps this is causing the infinite loop? 
    header('Content-type: image/png'); 

    //Display contents of file (aka the image) 
    echo $contents; 

    $i++; 
} 

そしてもちろん、私は(私が何をすべき多くのセキュリティチェックがある場合はそう言って下さい)セキュリティのためfile_get_contentsを使用する前に、ファイルサイズやMIMEタイプの検証を追加することになるでしょう。

答えて

0

複数の画像をループして送信することはできません。 1つのPHPファイルは1つのヘッダーと1つのイメージを出力します。別の画像を取得するにはもう一度呼び出す必要があります。

「あなたのような画像を呼び出すことができますこの方法:」images.phpはそれで読んヘッダーとイメージを持っているPHPファイルである

/image.php?file=myfile.jpg

images.php:

$file = basename(urldecode($_GET['file'])); 
$fileDir = '/path/to/files/'; 

if (file_exists($fileDir . $file)) { 
    // Note: You should probably do some more checks 
    // on the filetype, size, etc. 
    $contents = file_get_contents($fileDir . $file); 

    // Note: You should probably implement some kind 
    // of check on filetype 
    header('Content-type: image/jpeg'); 

    echo $contents; 
} 

my.html:だから私はimages.phpでこれらの操作を行うと、その後display_the_imagesで画像を呼び出す必要があります言っている

<img src="images.php?file=myimage.jpg" alt=""> 
+0

.php?これをURLで実行してからGETを使うか、display_the_images.phpのPHPスクリプトだけで済ませることができますか? – faceymcface

+0

なので、1つのファイル(例ではimages.phpですが、好きな名前をつけても構いません)にはphpがあり、docルートの外にあるイメージを "読み込んで読み出す"でしょう。あなたのhtmlファイルに通常画像を置く場所に... GET varを付けたphpファイルを置いて、images.phpにどの画像を取得させるかを知らせます。 – WEBjuju

+0

これは機能しました!ありがとうございます – faceymcface

関連する問題