GNU/Linux >> Linux の 問題 >  >> Linux

PHP アプリケーションで Web ルート ディレクトリの外にある画像を表示するにはどうすればよいですか?

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'>";
}

Linux
  1. root ユーザーがコマンドを実行しているかどうかを C/C++ アプリケーションで判断するにはどうすればよいですか?

  2. Apache サーバーのルート ディレクトリを変更するにはどうすればよいですか?

  3. ディレクトリ内の最後に変更された 5 つのファイルを一覧表示 (ls) するにはどうすればよいですか?

  1. ウィンドウマネージャを使用してルートとしてプログラムを起動するにはどうすればよいですか?

  2. ディレクトリツリーで最も古いファイルを見つけるにはどうすればよいですか

  3. ディレクトリを Apache Web ルートに追加しますか?

  1. 自分のディレクトリにR3.3.1をインストールする方法は?

  2. ターミナルでファイルまたはディレクトリのフルパスを表示するにはどうすればよいですか?

  3. Linux でシェル アプリケーションの出力を非表示にするにはどうすればよいですか?