Заголовки PHP JPEG, чтобы остановить загрузку изображения - PullRequest
0 голосов
/ 21 декабря 2009

В настоящее время я использую приведенный ниже скрипт для вывода содержимого JPEG прямо из файла. Я делаю это потому, что я использую mod_rewrite / php для маскировки имени исходного файла. Это работает частично, как и ожидалось, за исключением того, что Safari настаивает на загрузке фотографии, а не просто позволяет мне видеть ее в браузере. Я пропускаю заголовок? Кроме того, какие изменения я могу сделать, чтобы улучшить производительность?

    error_reporting(0);

    // Find which image we're trying to get
    $_GET['id'];

    // In the real script, I do some proccessing here
    $filename = $_GET['id'] . '.jpg';

    // Getting headers sent by the client.
    $headers = apache_request_headers(); 

    // Checking if the client is validating his cache and if it is current.
    if (isset($headers['If-Modified-Since']) && (strtotime($headers['If-Modified-Since']) == filemtime($filename))) {

        // Client's cache IS current, so we just respond '304 Not Modified'.
        header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($filename)).' GMT', true, 304);

    } else {

        // Image not cached or cache outdated, we respond '200 OK' and output the image.
        header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($filename)).' GMT', true, 200);
        header('Content-Length: '.filesize($filename));
        header('Content-Type: image/jpeg');
        print file_get_contents($filename);

    }

?>

Спасибо!

1 Ответ

1 голос
/ 21 декабря 2009

Не могу сказать, почему Safari рассматривает ваши изображения как вложения / загрузки. Я на самом деле проверил его в последнем Safari 4 на SL, и он работает нормально. Вы можете попытаться прослушать HTTP-разговор и убедиться, что в него не лезут дополнительные заголовки (например, content-disposition). Также может потребоваться проверить настройки конфигурации Safari, может быть, что-то тонкое отличается от других ваших браузеров?

По теме выступления:

Сначала я бы попытался полностью исключить PHP. Посмотрите, можете ли вы использовать модули / конфигурацию вашего веб-сервера для достижения своей цели.

Если вы не можете обойтись без PHP, то вы можете попытаться позволить веб-серверу обрабатывать фактическую доставку. Вы можете сделать это в nginx с X-Accel-Redirect и в lighttpd и apache с X-Sendfile.

...