加载大量PHP生成的图像

时间:2015-02-13 13:15:02

标签: php image

我的自动生成图像有问题。

我有PHP脚本,它获取图像的url哈希,并通过" m"生成此图像的请求维度和修改。 url中的参数。它可以改变尺寸,像这样的东西。

只需一张或几张图片就可以了:例如:http://www.jaarda.eu/upload/pluginGallery/129b12182490d9e191b3a7cdd4fcf704?m=wh_400-400

但是大量的我没有加载一些物品的问题。查看http://www.jaarda.eu/

我不认为,这是服务器问题,CPU不会最大化,内存也是如此。脚本,生成图像甚至发送缓存标题,但仍然没有变化 - 页面上有大量的图片,如jaarda.eu是问题。当脚本触发时 - 生成图片的其他维度并非每次都生成 - 图像仅生成一次,然后保存在服务器上以供再次使用。我甚至尝试使用我的VPS的多倍增加功率而没有变化。

Safari中没有显示此问题,只有IE,Chrome等...

这是我的脚本的结尾,其中是功能缓存和类型发送:

$modified = filemtime($file);
            if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
                $request_modified = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
                if ($modified <= $request_modified) {
                    //header('HTTP/1.1 304 Not Modified');
                    header('HTTP/1.1 304 Not Modified', true, 304);
                }
            }           
            header("Last-Modified: ".gmdate('D, d M Y H:i:s', $modified)." GMT");
            header("Cache-Control: public, max-age=7200");
            header("Expires: " . gmdate('D, d M Y H:i:s', time()+7200) . ' GMT');           
            header('Content-Length: ' . filesize($file));
            header('Content-Type: '.$type);
            readfile($file);

非常感谢您的想法,如何解决这个问题。

修改

我通过在代码中使用ob_函数来改善我的情况,但它仍然不完美。它更好,只有两个图像中的一个没有加载,但仍然不完美。使用ctrl + f5重新加载时问题仍然存在于chrome中,所以非常感谢大家的想法。

$modified = filemtime($file);
        ob_start(""); 
        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
            $request_modified = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
            if ($modified <= $request_modified) {
                //header('HTTP/1.1 304 Not Modified');
                header('HTTP/1.1 304 Not Modified', true, 304);
            }
        }           
        header("Last-Modified: ".gmdate('D, d M Y H:i:s', $modified)." GMT");
        header("Cache-Control: public, max-age=7200");
        header("Expires: " . gmdate('D, d M Y H:i:s', time()+7200) . ' GMT');           
        header('Content-Length: ' . filesize($file));
        header('Content-Type: '.$type);
        ob_end_clean();
        ob_clean(); 
        flush();
        readfile($file);
        exit(); 

2 个答案:

答案 0 :(得分:1)

您应该为m=wh_400-400添加一些尺寸验证,因为我确实尝试了其他一些尺寸,例如wh=3000-3000并且它有效并且您知道如果您要存储这些图像意味着什么。

要回答您的问题,您应该尝试使用htaccess:

# BEGIN Expire headers
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 7200 seconds"
    ExpiresByType image/jpg "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    AddType image/x-icon .ico
    ExpiresByType image/ico "access plus 2592000 seconds"
    ExpiresByType image/icon "access plus 2592000 seconds"
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType text/css "access plus 2592000 seconds"
    ExpiresByType text/javascript "access plus 2592000 seconds"
    ExpiresByType text/html "access plus 7200 seconds"
    ExpiresByType application/xhtml+xml "access plus 7200 seconds"
    ExpiresByType application/javascript A259200
    ExpiresByType application/x-javascript "access plus 2592000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
</IfModule>
# END Expire headers

# BEGIN Cache-Control Headers
<IfModule mod_headers.c>
    <FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz|ttf)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>

    <FilesMatch "\\.(css)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>

    <FilesMatch "\\.(js)$">
        Header set Cache-Control "max-age=2592000, private"
    </FilesMatch>

    <filesMatch "\\.(html|htm)$">
        Header set Cache-Control "max-age=7200, public"
    </filesMatch>

    #Disable caching for scripts and other dynamic files
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
        Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
        Header set Pragma "no-cache"
        Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
        #Header merge Cache-Control no-cache env=CGI
        #Header merge Cache-Control no-cache env=NO_CACHE
        #Header merge Cache-Control no-store env=NO_STORE
    </FilesMatch>
</IfModule>
# END Cache-Control Headers

答案 1 :(得分:0)

我从控制台获得的错误是:资源被解释为图像但是使用MIME类型text / html传输

所以问题是,你的var $类型来自哪里?尝试调试你发送的内容,我相信你已经发送了&#39;在浏览器中出现延迟的错误。