0

我目前正在使用下面的脚本直接从文件中输出 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);

    }

?>

谢谢!

4

1 回答 1

1

我不能说为什么 Safari 将您的图像视为附件/下载。我实际上在 SL 上最新的 Safari 4 中对其进行了测试,它工作正常。您可以尝试嗅探 HTTP 对话,并确保没有额外的标头(例如内容处置)潜入。此外,检查 Safari 配置设置可能是值得的,也许与您的其他浏览器有些细微的不同?

关于性能的话题:

首先,我会尝试完全消除 PHP。看看您是否可以利用您的网络服务器的模块/配置来实现您的目标。

如果您不能没有 PHP,那么您可以尝试让网络服务器处理实际交付。您可以在 nginx 中使用 X-Accel-Redirect 以及在 lighttpd 和 apache 中使用 X-Sendfile 执行此操作。

于 2009-12-21T07:09:21.793 回答