-1

我有一个 PHP 文件,它通过将 mime-type 设置为image/png.

感谢.htaccess我拥有的 -file,我可以通过以下方式访问我的图像

  • /img/img
  • /img/img.png
  • /img/img.php

并且它们都在我的浏览器中运行良好,但它们没有加载到我的 Teamspeak 服务器上。

4

2 回答 2

1

我不确定您期望发生什么,这些是返回的标头:

CF-Cache-Status 
MISS
CF-RAY  
21cddbcc942220ae-LAX
Cache-Control   
no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection  
keep-alive
Content-Encoding    
gzip
Content-Type    
text/html; charset=UTF-8
Date    
Fri, 28 Aug 2015 06:11:24 GMT
Expires 
Thu, 19 Nov 1981 08:52:00 GMT
Pragma  
no-cache
Server  
cloudflare-nginx
Transfer-Encoding   
chunked
Vary    
Accept-Encoding
X-Powered-By    
PHP/5.4.41-0+deb7u1

所以首先,你要返回 text/html。这不是 .png 图像的正确 mime 类型。

其次,您的脚本需要实际返回 .png 数据。

我在这里假设您计划使用 GD 或 ImageMagick 在脚本中创建 .png,但是无论您打算做什么,当您没有实际提供正确的 mime 类型和正确的图像时,什么都不会出现预期遵循该 MIME 类型的图像数据。

在脚本顶部设置 mime 类型很简单:

header('Content-type: image/png'); 

您也在经历 Cloudflare。您应该关闭 Cloudflare,直到您完成调试并确保脚本按预期运行。

于 2015-08-28T06:18:42.427 回答
0

感谢@gview 的回答,我发现 Cloudflare 正在保护该/img/文件夹,所以我制定了一个页面规则来阻止它。以防万一你需要它,这是我的脚本,它设置了正确的标题:

# Generate $im and Stuff
# ...

# Now Output it
http_response_code(200);
$file = "./temp.png";
imagepng($im, $file);
header("Content-Type: image/png");
header("Content-Length: ".filesize($file));
readfile($file);
exit;
于 2016-10-06T17:40:35.547 回答