2011-12-30 7 views
2

これは本当に愚かですが、私は数十種類の違ったことを試しています。私の人生は私が間違っていることを解決することができません。PHPを使用してpublic_htmlの外部から画像を読み込む?

私は通常のpublic_htmlディレクトリとその下のディレクトリ(そのディレクトリ "USER"と呼ぶ)にアクセスしてcpanelをインストールしています。私は画像でいくつかのことを試しています。

画像ファイルをpublic_htmlの上にUSERディレクトリに配置しました。

if(is_file("../1.jpg")){  
    echo "<img src=\"../1.jpg\" />"; 
}else{ 
    echo "not there"; 
} 

is_fileは、常にファイルを見つけることができます。

私はわずか数行を持つテストPHPスクリプトを書かれています。また、file_existsとis_readableを試しましたが、これらのファイルもすべて見つかりました。

しかし、スクリプトでファイルが表示されても、そのファイルをブラウザに出力する仕組みはできません。または、それがこのようにすることが可能であっても。

ファイルのアクセス権をすべて読み取り可能に変更しました。

私はルートから絶対パスを入れてみました。

imagejpegを使ってみました。

これらのどれも機能しません。

なぜ私はpublic_htmlの中に画像を置くのではないのだろうかと疑問に思うかもしれませんが、このスクリプトは私が行っているテストです。他のドメインやアカウントの画像を扱う際には、同じサーバー(専用サーバー)です。

私はおそらくそれが許可のものか何かであることを理解することができます。その場合、スクリプトがファイルを見つけることができる理由を理解できません - とにかく私はおそらく非常にばかげた、または基本的なものを見落としています。だから誰かが正しい方向に私を指すことができれば、私はそれを感謝します。

ありがとうございました

答えて

11

これはできません。 imgタグを出力すると、それは単純にサーバー上のテキストです。これはブラウザに送信され、ブラウザはsrc="..."部分にリストされているファイルを取得しようとします。これはHTTPリクエストを介して行われるため、イメージがドキュメントルートの外側にある場合、定義によって直接ファイルを取得することはできません。

単純にsrc="../../../../picture.jpg"を実行し、ドキュメントルートの外にイメージを取得できた場合は、設定ファイル、パスワードファイルなど、サーバー上のANYファイルを取得できます。それは、狂人としての資格を得るのに十分な大きさのセキュリティホールです。

ドキュメントルート以外のファイルにアクセスする場合は、スクリプトを使用してファイルにアクセスする必要があります。最も簡単な方法は、持っていることです。

image.php:

<?php 
header('Content-type: image/jpeg'); 
readfile('/path/to/picture/outside/doc/root/file.jpg'); 

とあなたのhtmlで:

<img src="image.php"> 

などに外部ディレクトリをマップするためにApacheのエイリアスディレクティブを使用するなど、他の厄介なオプションがあります「内部」のもの、URLの書き換えなどがありますが、それだけで状況はさらに複雑になります。

+0

こんにちは、お返事に感謝します。それは私のために物事を明確にしました。 –

関連する問題