2013-11-14 8 views

答えて

9

デフォルトでPHPはopen_basedir指令(またはセーフモードで制限されていないが、あなたがそのケージにいないことを望みます)で制限されていない限り、Webルート以外のファイルにアクセスできます。

通常、VirtualHost構成内にopen_basedir制限を挿入することをお勧めします。 Linuxでは:、Windowsでは;で区切って複数のディレクトリを指定できます。どちらかそれらのファイルにアクセスすると呼ばれるPHPファイルの位置への絶対パスまたは相対パスを使用するには

php_admin_value open_basedir /var/www/s/stage:/usr/share/php:/your/dir 

。 (したがって、上記のレベルに達するには../が必要です)。

また、書き込み先のディレクトリがWebサーバーユーザーに割り当てられ、書き込み権限を持っていることを確認してください。同様の内容で、 "image.php" ファイルを作成し、あなたのwwwディレクトリ内

<?php 
    header('Content-Type: image/png'); 
    readfile("../img/" . $_GET['img']); 
?> 

そして

であなたのイメージを呼び出す

は、そうでなければ、2番目のオプションを持っています

<img src="image.php?img=myimage.png" /> 

あなたのPHPファイルはあまり単純ではないことに注意してください:)あなたは複数の画像フォーマットに対処することができますそれらの正しいヘッダーを指定する)、悪意のあるファイルのパス/インクルージョン(入力の検証/サニタイズなしで$ _GETを使用したくない)、余分なキャッシュなどをチェックします。

しかし、あなたの問題をどのようにターゲットにできるかについてのアイデア。そのような単純な

+0

のようなスペースを避けるために便利になる[馴染み見える。](https://stackoverflow.com/質問/ 13357994 /サーバーのルートディレクトリの前にある#アクセス-13358201)のファイルへのアクセス – showdev

+0

可能ですが、それは同じ答えではありません。 – Legionar

3

、この意志出力正しいヘッダを持つ画像、
あなたは、出力バッファ
=>無エコーや廃盤何かをフラッシュする前にヘッダを()に設定する必要があることを覚えて

 
$file = '../../somedirectory/image.jpg‘; 
header('Content-Type:image/jpeg‘); 
header('Content-Length: '.filesize($file)); 
echo file_get_contents($file); 
0

)(ReadFile関数の前にPHPのob_clean()関数を使用

それが問題

関連する問題