所以我有一个网站需要登录才能查看,该网站有一个照片库。为了保护这些照片,我已经将它们移到了Web根目录之外,并使用php脚本来显示它们。这样的事情。
photogallery.php
echo '<img src="photo.php?id=X"/>';
photo.php
$id = (int)$_GET['id'];
$photo = getPhotoDataFromDb($id);
$path = DIRECTORY.basename($photo['filename']);
// Make sure photo file exists
if (!file_exists($path) || !is_file($path))
{
logError(__FILE__.' ['.__LINE__.'] No photo found in directory ['.$path.'] for photo id ['.$id.'].');
header('HTTP/1.0 404 Not Found');
return;
}
$info = getimagesize($path);
header("Cache-control: public, no-cache;");
header("Content-type: ".$info['mime']);
readfile($path);
一切正常,但 6 到 7 的速度要慢于仅仅通过网络根目录中的目录显示照片。
所以,我的问题是:
答案 0 :(得分:4)
是的,你的方法增加了时间,通过将图像置于循环之外,你强制PHP将每个图像缓冲到内存中,然后将其发送给用户,从而增加服务器的负载并为LARGE创建明显的延迟图像(假设画廊在这里)。
您可以将图片放在网站/应用的根目录中以加快速度。要保护您的图片免受远程热链接的影响,只需使用htaccess
脚本(谷歌即可)。您还可以创建htaccess
和登录权限的组合,以便将未经批准的用户排除在包含图片的文件夹之外。
参考文献:
readfile()
http://php.net/manual/en/function.readfile.php 答案 1 :(得分:1)
图像应直接由文件而不是readfile提供。
答案 2 :(得分:1)
在很多情况下getimagesize();需要很长时间 尽量避免它,并注意是否有任何速度差异。
这种情况最常发生在远程图像上,因此不能完全确定您遇到同样的问题。
答案 3 :(得分:1)
查看https://tn123.org/mod_xsendfile/
我发现sendfile返回文件要快一点,而不是直接在代码中执行。
答案 4 :(得分:0)
尝试使用jquery插件或javascript库代码来显示照片而不是php。 PHP是服务器端语言,因此它必须联系服务器才能获取新图像,这可能会减慢网站速度。