Teamspeak Hostbanner 不适用于 PHP 文件

Teamspeak Hostbanner doesn't work with PHP File

我有一个 PHP 文件,它通过将 mime 类型设置为 image/png 来模仿 PNG 文件。

感谢我拥有的 .htaccess 文件,我可以通过以下方式访问我的 图片

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

我不确定您希望发生什么,这些是 headers 正在 returned:

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

所以首先,您正在 returning text/html。这不是 .png 图像的正确 MIME 类型。

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

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

在脚本顶部设置 MIME 类型非常简单:

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

您也在使用 Cloudflare。在调试完所有内容并确定脚本按预期运行之前,您应该关闭 Cloudflare。

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

# 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;