我的自动生成图像有问题。
我有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();
答案 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;在浏览器中出现延迟的错误。