我对通过apache2.4传递到Web浏览器的图片中的伪像有一个奇怪的问题。我们的comany使用中央图片存储存储所有产品图片。该目录安装在mnt / medamazonbild下的Web服务器中。我创建了一个符号链接,该链接指向img / artikel下的Web目录。这可以正常工作,并且该文件夹可以完全访问。
但是,一旦我通过chrome或firefox在目录下请求图片:
172.17.1.27/img/artikel/70399.jpg
输出附带工件。
出于测试目的,我尝试通过image.php中的PHP提供图像:
if (isset($_GET["img"])) {
// get image name
$img = filter_var($_GET["img"], FILTER_SANITIZE_STRING);
// path of image with name and suffix
$path = '/var/www/html/public/img/artikel/' . $img;
header('Content-Type: image/jpeg');
readfile($path);
}
结果是图像没有应有的伪像:
我不想用php处理所有图像的图像输出,因为我担心性能会下降。 如何获得针对Apache的解决方案,以按预期方式交付图像?错误在哪里?
设置:
答案 0 :(得分:1)
我刚刚在 Azure (AKS) 的 Kubernetes 集群上遇到了完全相同的问题。
我们最近从 1.16.X 更新到 19.X.X,我们的 Wordpress 网站上的图片停止工作。尝试在 Chrome 中打开图像路径时,它下载了一个损坏的文件,而不是显示图像。
经过一天一洞的调试,我们做出了以下观察:
将 EnableSendfile on
添加到我们的 .htaccess
的简单解决方案解决了这个问题 - 非常感谢 @botf!
我们不知道为什么(也许一些 Apache 专家可以解释一下),但显然 Apache2 在从我们的安装中读取文件时存在一些问题。 我们的 AKS 集群上还有其他运行 NGINX 的服务,它们运行良好。
答案 1 :(得分:0)
我的图像上出现了相同类型的故障。
我正在使用官方docker image php:7.3-apache Docker Hub
为解决此问题,我在我的.htaccess文件中添加了EnableSendfile on
(我认为它的工作原理与您将其添加到httpd.conf中一样)