如何在php中显示来自curl的二进制数据

jcu*_*bic 5 php curl image binary-data

我正在编写简单的php代理,我在显示png文件时遇到问题,输出是

在此输入图像描述

它应该是:

在此输入图像描述

图像在Notepad ++中打开.我的php curl代码如下所示:

$ua = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
curl_setopt($ch, CURLOPT_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$content = curl_exec($ch);
$info = curl_getinfo($ch);
header('Content-Type:' . $info['content_type']);
echo $content
Run Code Online (Sandbox Code Playgroud)

我尝试使用和不使用CURLOPT_BINARYTRANSFER,输出相同,图像不显示.如何显示图像?

编辑:当我将数据保存到文件并使用位置标题重定向时,图像显示正确:

$file = fopen('proxy_tmp~', 'w');
fwrite($file, $content);
fclose($file);
header('Location: ' . DIR . 'proxy_tmp~');
Run Code Online (Sandbox Code Playgroud)

编辑2:我有gzip压缩,卜当我禁用它,我有同样的问题,当我在记事本中打开这两个文件++一个是DOS/Windows的ANSI(原件),另一种是DOS/Windows的UTF-8(由打开的文件一个脚本).当我在记事本中打开文件并将编码更改为ANSI并保存文件时,一切正常.

编辑3:我认为我在GNU/Linux上做了同样的事情,但没有CURLOPT_BINARYTRANSFER选项,它工作正常,这是我的项目https://github.com/jcubic/yapp.我也在Windows 10上使用Wamp进行测试,并且工作正常.

tim*_*tic 1

以下是如何将文件直接发送回用户以供下载(使用您的 $content 变量):

$file_array = explode("\n\r", $content, 2);
$header_array = explode("\n", $file_array[0]);
foreach($header_array as $header_value) {
$header_pieces = explode(':', $header_value);
  if(count($header_pieces) == 2) {
    $headers[$header_pieces[0]] = trim($header_pieces[1]);
  }
}
header('Content-type: ' . $headers['Content-Type']);
header('Content-Disposition: ' . $headers['Content-Disposition']);
echo substr($file_array[1], 1);
Run Code Online (Sandbox Code Playgroud)

这里有一个完整的例子:

http://ryansechrest.com/2012/07/send-and-receive-binary-files-using-php-and-curl/