0

同じディレクトリに PHP ファイルと画像があります。PHPファイルのヘッダーをjpegとして設定し、画像を「プル」するにはどうすればよいですか。したがって、file.php に移動すると、画像が表示されます。file.php を file_created.jpg に書き換えると、動作する必要があります。

4

2 に答える 2

7

別の回答で提案されているように file_get_contents を使用するのではなくreadfileを使用して、いくつかの HTTP ヘッダーを出力してうまく再生します。

   <?php
    $filepath= '/home/foobar/bar.gif'
    header('Content-Type: image/gif');
    header('Content-Length: ' . filesize($filepath));
    readfile($file);
   ?>

readfile はファイルからデータを読み取り、出力バッファーに直接書き込みますが、file_get_contents は最初にファイル全体をメモリにプルしてから出力します。ファイルが非常に大きい場合、 readfile を使用すると大きな違いが生じます。

もっとかわいくしたい場合は、最終変更時刻を出力し、着信 HTTP ヘッダーでIf-Modified-Sinceヘッダーをチェックし、空の 304 応答を返して、ブラウザーに既に現在のバージョンがあることを伝えることができます....これを行う方法を示す完全な例を次に示します。

$filepath= '/home/foobar/bar.gif'

$mtime=filemtime($filepath);

$headers = apache_request_headers(); 
if (isset($headers['If-Modified-Since']) && 
    (strtotime($headers['If-Modified-Since']) >= $mtime)) 
{
    // Client's cache IS current, so we just respond '304 Not Modified'.
    header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT', true, 304);
    exit;
}


header('Content-Type:image/gif');
header('Content-Length: '.filesize($filepath));
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT');
readfile($filepath);
于 2009-01-15T14:15:49.687 に答える
1

次のように簡単にする必要があります。

<?php
    $filepath= '/home/foobar/bar.jpg';
    header('Content-Type: image/jpeg');
    echo file_get_contents($filepath);
?>

正しい MIME タイプを判別する方法を理解する必要があるだけです。これは非常に簡単なはずです。

于 2009-01-15T14:06:56.240 に答える