保護されていないphpファイルからでも出力しようとすると<img src="protected.jpg" />
、HTMLは表示できますが、画像ファイル自体は表示できないという問題があると思います。
あなたがしようとしていることを正しく理解している場合は、次のいずれかが必要です。
編集:プロキシの例:オンラインで例が見つからないようなので、これはPHPからファイルへのアクセスを制御したいときによく使用する関数です(たとえば、これは$からアクセスを検証する必要がある機密データである可能性があります_SESSION または DB 値) :
function send_binary_data($path, $mimetype, $filename = null){
@ob_clean();
if($filename === null) $filename = basename($path);
$size = filesize($path);
//no-cache
header('Cache-Control: no-cache, must-revalidate, public');
header('Pragma: no-cache');
//binary file
header('Content-Transfer-Encoding: binary');
//mimetype
header('Content-Type: ' . $mimetype);
header('Content-Length: ' . $size);
header('Content-Disposition: inline; filename=' . $filename);
header('Content-Description: ' . $filename);
$chunksize = 1 * (1024 * 1024);
$buffer = '';
$handle = fopen($path, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
print $buffer;
}
$result = fclose($handle);
unset($handle);
$handle = null;
die();
}
もちろん、引き続き .htaccess からの直接アクセスを制限する必要がありますが、プロキシの場合は、次のようにすべてのリクエストを保護されていないプロキシ スクリプトにリダイレクトします。
RewriteEngine ON
RewriteRule ^(.*)$ /proxy.php?file=$1 [NC,QSA]
また、proxy.php には次のようなものが含まれます。
if(!isset($_GET['file'])) die('file not set');
$file = $_GET['file'];
//perform all your custom checking, including security checks due to retrieving data from $_GET, and if access is granted :
$path = 'yourpath/'.$file;
$mimetype = 'defineregardingyour/ownrules';
send_binary_data($path, $mimetype);