远程服务器上的问题(而相同的php脚本在本地上运行)是
1)从系统路径加载PNG图片:
$imgpath = "absolute/path/to/a/png/image";
$img = imagecreatefrompng($imgpath);
文件和存储文件的文件夹具有正确的chmod和chown设置,我可以输出正确的图像大小(用于测试):
echo imagesx($img)." x ".imagesy($img);
上一行输出256 x 64
,它是期望的图像尺寸。我认为这意味着$img
对象已从文件中正确加载。
2)当我尝试使用以下方法输出图像时:
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
...浏览器显示一个16 x 16
像素大小的空白图像。
Screenshot of how it looks like
3)如果我尝试使用直接的http url打开同一文件,则浏览器会正确打开它(预期的256 x 64
图像带有一些色彩鲜艳的内容)。
Here is how image looks like when opened with direct link
4)如果我删除了header('Content-type....
,则imagepng将按预期输出png文件内容:
�PNG IHDR@z?>� pHYs���+�IDATx��]ytչ����͒-�Y����$�� ��f!$� Jh M)-�+=��q�Bii�e����ihi d!!!�B�=^B�D��E��}��y���I�H��s��䜌>ݙ{�߽�~����ct�e���]���~....
(此处仅显示输出的一部分)
5)当我将输出与使用nano的远程服务器上的输出进行比较时,字节和文件大小似乎100%匹配。如果我使用浏览器中的直接URL下载图像,文件大小也完全相同。
6)我还尝试使用不同的方法输出图像,例如fpassthru
和echo file_get_contents(...
并为此设置标题(添加内容大小等)。所有结果都一样。
我要疯了。任何人都知道可能是什么问题吗?
P.S。请求状态为200,日志文件中没有错误,也没有服务器错误。
P.P.S。当我使用直接链接和通过PHP脚本打开图像时,我已经比较了请求和响应头。它们是完全一样的。
答案 0 :(得分:3)
重现此问题的唯一方法是在更改标题之前输出内容。您能否检查<?php
标记前是否没有空格以及是否有其他可能的输出