0

我使用此代码来检索和显示图像:

header("Content-type: image/png"); 
echo file_get_contents(site_domain().image_asset_module_url("header.png",$this->name));

在我的本地 WAMP 上它可以工作,但在远程服务器上file_get_contents返回一个错误编码的字符串:

当地的:

‰PNG  IHDR^jRÀ2¡    pHYsÒÝ~üÿÿIDATxÚ콘Uõµþ¿`ŠŠÔéÃÕ¨¹&&ù'77¹i¦˜è‰=V:RlH‡™aAlH™B¯Jbh...

偏僻的:

�PNG  IHDR^jR�2�    pHYs��~���IDATx����U����`������ը�&&�'77�i��草=V:Rl...

如果我使用utf8_encode我得到:

PNG  IHDR^jRÀ2¡ pHYsÒÝ~üÿÿIDATxÚì½Uõµþ¿`ÔéÃÕ¨¹&&ù'77¹i¦è=V:RlHaAlHB¯Jbh...

所以我总是在我的远程服务器上得到一张中断图片 - 为什么以及解决方案是什么?

4

2 回答 2

1

数据始终相同。file_get_contents不会以任何方式更改数据。您也不是在处理某种编码的文本,而是处理二进制数据。任何类型的文本编码或其转换都不适用于此处。

您的第一个示例是解释为 Latin-1 编码文本的二进制图像数据。
您的第二个示例与解释为 UTF-8 编码文本的二进制数据相同。

即,数据很好,解释是错误的。解释应该由Content-Type标头设置,可能在远程服务器上没有正确设置。对于此问题,请检查原始 HTTP 响应标头并查看如何修复 PHP 中的“标头已发送”错误

于 2013-05-30T08:34:58.500 回答
-1

I would have rather used

<?php

$file = 'http://url/to_image.png';
$data = file_get_contents($file);

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

Or Can you try this

$remoteImage = "http://www.example.com/gifs/logo.gif";
$imginfo = getimagesize($remoteImage);
header("Content-type: $imginfo['mime']");
readfile($remoteImage);
于 2013-05-30T08:31:17.833 回答