PHP服务的图像总是损坏的
每当我尝试使用PHP提供图像时,它都会声明图像已损坏/损坏,并在Google Chrome中发出以下警告: 解释为文档但使用MIME类型传输的资源 图像/png 但情况如下,PHP服务的图像总是损坏的,php,apache,Php,Apache,每当我尝试使用PHP提供图像时,它都会声明图像已损坏/损坏,并在Google Chrome中发出以下警告: 解释为文档但使用MIME类型传输的资源 图像/png 但情况如下, 此脚本在多台服务器上运行良好,但在这台服务器上运行不好 我使用了多个图像和扩展 如果我将图像作为base64解码图像放入imgsrc中,它们的工作状态非常好 出于测试目的,我将它放在index.php的第一行,但它不起作用 我的文件不是UTF-8 BOM 我个人看不到任何令人惊讶的标题 我尝试过的例子: $imgpath
img
src中,它们的工作状态非常好$imgpath = 'assets/img/dropdown-arrow.png';
$type = pathinfo($imgpath, PATHINFO_EXTENSION);
$data = file_get_contents($imgpath);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
header('Content-Type: image/png;'); // also tried with charset=UTF-8 and such
echo base64_decode($base64);
exit();
示例2(在其他服务器上工作示例):
---所以,再一次;我已经把我的框架作为中间人删掉了,试图直接从index.php的第一行运行它
因此,出于某种奇怪的原因,当我将内容类型设置为图像/png
;;一切都在走下坡路
有人知道为什么会这样吗?这是我的代码遗漏的东西吗?是不是我的代码(服务器端)无法修复?我是不是错过了一些非常明显的东西
基本服务器信息:
我使用PHP-FPM在Apache2.4.5上运行。(尽管切换到PHP-FASTCGI没有任何改变)在PHP7.2.3上
响应标题:
连接:保持活动状态
内容类型:图像/png
日期:2018年7月13日星期五19:51:37 GMT
保持活动状态:超时=5,最大=99
服务器:Apache/2.4.25(Debian)
传输编码:分块
更新/修复
显然,有人(不是我,真的!)在前面放了一个空格,你可以直接输出它,不需要进行base64_编码/解码
$imgpath = 'assets/img/dropdown-arrow.png';
$data = file_get_contents($imgpath);
header('Content-Type: image/png;');
echo $data;
exit();
您可以直接输出,无需进行base64_编码/解码
$imgpath = 'assets/img/dropdown-arrow.png';
$data = file_get_contents($imgpath);
header('Content-Type: image/png;');
echo $data;
exit();
在示例2中,标题表示数据是utf8编码的。
为什么?
您的数据是一个二进制文件
并且没有utf8编码在示例2中,您的标题表示您的数据是utf8编码的。
为什么?
您的数据是一个二进制文件
而且没有utf8编码在第一个示例中,您似乎在遵循img标签的说明。如果只是流式传输文件,就不会进行所有这些操作。只需设置标题内容类型并使用readfiles在第一个示例中,您似乎遵循了img标记的说明。如果只是流式传输文件,就不会进行所有这些操作。只需设置标题内容类型并使用readfileFor testing,my bad。这是对问题的一个很好的评论,但不是答案。对于测试,my bad。这是对问题的一个很好的评论,但不是答案。嗯。。。谢谢,这实际上直接在index.php中修复了它!但是,现在它仍然不能在框架的范围内工作。。。你知道我如何调试/找到导致这种情况的原因吗?没有打印任何内容,但是完全相同的功能不起作用。我已经关闭了框架使用的所有其他头函数和编码函数。您所说的“框架边界”是什么意思?你能不能更具体一些,比如,哪个框架,你是如何尝试使用这个镜像的?它是一个定制的框架,但只是一个传统的MVC。然而,我刚刚开始通过路由所采取的步骤复制粘贴图像,并刚刚发现从哪一刻开始,一切都出了问题。这个问题,我得自己解决。base64最终只是一个测试错误,但我会将你的答案标记为正确答案,因为我自己测试得很差。非常感谢。嗯。。。谢谢,这实际上直接在index.php中修复了它!但是,现在它仍然不能在框架的范围内工作。。。你知道我如何调试/找到导致这种情况的原因吗?没有打印任何内容,但是完全相同的功能不起作用。我已经关闭了框架使用的所有其他头函数和编码函数。您所说的“框架边界”是什么意思?你能不能更具体一些,比如,哪个框架,你是如何尝试使用这个镜像的?它是一个定制的框架,但只是一个传统的MVC。然而,我刚刚开始通过路由所采取的步骤复制粘贴图像,并刚刚发现从哪一刻开始,一切都出了问题。这个问题,我得自己解决。base64最终只是一个测试错误,但我会将你的答案标记为正确答案,因为我自己测试得很差。非常感谢。