open_basedir
で制限されていない限り、PHP はデフォルトで Web ルート外のファイルにアクセスできます。 ディレクティブ(またはセーフモードですが、そのケージにいないことを願っています)。
通常、VirtualHost 構成内に open_basedir
を挿入することをお勧めします。 制限。 :
で区切られた複数のディレクトリを指定できます Linux および ;
の場合
php_admin_value open_basedir /var/www/s/stage:/usr/share/php:/your/dir
これらのファイルにアクセスするには、絶対パスまたは呼び出された PHP ファイルの位置からの相対パスを使用します。 (したがって、../
する必要があります 上のレベルに到達します)。
また、書き込み先のディレクトリが Web サーバー ユーザーに割り当てられており、書き込み権限があることを確認してください。
それ以外の場合は、2 番目のオプションがあります:
www ディレクトリ内に、次のような内容の「image.php」ファイルを作成します。
<?php
header('Content-Type: image/png');
readfile("../img/" . $_GET['img']);
?>
そして
で画像を呼び出します<img src="image.php?img=myimage.png" />
PHP ファイルはそれほど単純であってはならないことに注意してください :) 複数の画像形式に対処したい (そしてそれらに正しいヘッダーを提供したい) 場合があるため、悪意のあるファイル パス/インクルージョンをチェックします ($ を使用したくない) _GET (入力の検証/サニタイズなし)、余分なキャッシングなどなど
しかし、これにより、問題をどのようにターゲットにできるかについてのアイデアが得られるはずです。
それと同じくらい簡単に、これは正しいヘッダーで画像を出力します、
出力バッファから何かをフラッシュする前に header() を設定する必要があることを覚えておいてください
=> 前にエコーまたは印刷しない
$file = '../../somedirectory/image.jpg';
header('Content-Type:image/jpeg');
header('Content-Length: '.filesize($file));
echo file_get_contents($file);
私のアプリケーションでは、これらの答えはどれも機能していませんでした.単に画像を表示することができず、理由により、呼び出す新しいphpファイルを追加することは実際には不可能でした.私にとって DID が効果的だったのは
$filename = read_filename_from_database;
$fileDir = "/path/to/files/";
$file = $fileDir . $filename;
if (file_exists($file))
{
$b64image = base64_encode(file_get_contents($file));
echo "<img src = 'data:image/png;base64,$b64image'>";
}