2016-08-25 31 views
0

考虑以下(简化)的PHP脚本: PHP脚本下载适用时与IMG SRC直接,但不叫

<?php 
header("Content-Length: ".filesize("data/file.svg")); 
header("Content-Type: image/svg"); 
$file = fopen("data/file.svg","rb"); 
while(!feof($file)) 
{ 
    print(fread($file, 1024*8)); 
    ob_flush(); 
    flush(); 
} 
?> 

正确的Firefox下载文件“file.svg”当PHP脚本的网址是直接调用。但是,当它通过HTML src标记使用时,如下所示:

<img src="https://example.org/script.php"> 

然后Firefox报告“无法加载图像”。开发人员工具中的“网络”选项卡显示它“已转移”2.92 KB,但它表示“大小”为0 KB。 为什么它在第一种情况下工作,但不在第二种情况下?

+1

我会使用readfile(“data/file.svg”);'在标题后面,应该是你需要的所有东西 – 2016-08-25 03:30:21

+2

SVG的MIME类型实际上是'image/svg + xml'而不是'image/svg' 。 – Sherif

+0

@Dagon正如我所说:这是一个简化的脚本。在现实世界中,我禁用缓存并支持更大的文件和范围。 readfile会使用更多的内存(?),我无法实现HTTP_RANGE。 – Scindix

回答

1

因为@Sherif已经在他的评论中说过我使用了错误的MIME类型。用image/svg+xml代替image/svg修复了这个错误。