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

2024-06-28

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

它应该是:

图像在 Notepad++ 中打开。我的 php 卷曲代码如下所示:

$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

我尝试使用和不使用 CURLOPT_BINARYTRANSFER ,输出是相同的,并且图像不显示。我怎样才能显示图像?

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

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

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

EDIT 3:我想我在 GNU/Linux 上做了同样的事情,但没有CURLOPT_BINARYTRANSFER选项并且工作正常,这是我的项目https://github.com/jcubic/yapp https://github.com/jcubic/yapp。我还在 Windows 10 上使用 Wamp 对其进行了测试,并且运行良好。


以下是如何将文件直接发送回用户以供下载(使用您的 $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);

这里有一个完整的例子:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在php中显示curl的二进制数据 的相关文章

  • PHP SFTP 简单文件上传

    我正在使用 phpseclib SFTP 类 并尝试上传这样的文件 sftp new Net SFTP mydomain com if sftp gt login user password exit Login Failed sftp g
  • 这段 PHP 代码是否会导致其他人的 Apache 崩溃?

    preg match all a str repeat a 1000 matches 编辑 稍微更改正则表达式以使其更简单 同时仍然崩溃 我在 PHP 5 3 5 和 Apache 2 0 上运行它 它使服务器崩溃 如果我将 339 更改为
  • android php 连接错误? (添加java代码)

    我试图从 android 应用程序获取位置 纬度 经度 并使用 php 插入数据库 然后提取 10m 半径内的数据 问题是 当我使用智能手机测试代码时 本地测试正常 数据未正确插入 表 usergps 有 3 列 名称 纬度 经度 在我测试
  • 为什么要使用 XML 解析器?

    I m a somewhat经验丰富的 PHP 脚本编写者 但是我只是专注于解析 XML 和所有这些好东西 我似乎无法理解为什么人们会使用单独的 XML 解析器而不是仅仅使用explode函数 看起来就这么简单 这是我一直在做的事情 假设路
  • mysql数据库的“零知识”加密

    我一直在研究 Web 应用程序数据库层的加密 它使用MySQL 5 1 或更高版本 我记不清了 该应用程序由我的组织管理 为公共客户存储数据 最简单的选择是 AES ENCRYPT AES DECRYPT 如果坏人以某种方式访问 我的数据库
  • 我可以为我的记录器使用静态类吗?

    最近我被告知静态类 方法是邪恶的 以我的 Logger 类为例 class Logger private static logs array public static function add msg self logs msg publ
  • 对许多站点使用中央数据库服务器:合理吗?

    基本上 我需要在多达几十个站点上同步数据库数据的某些部分 完美的解决方案是创建一个中央服务器来托管该数据 每个页面加载都必须从两个数据库服务器 本地和远程数据库服务器 获取数据 并且写入远程服务器也很常见 虽然数据库服务器在硬件方面可以达到
  • 如何在Matlab中显示图像的红色通道?

    我有一个 3D 矩阵im它代表 RGB 图像 我可以 imshow im 显示图像 我想一次仅显示一个 RGB 通道 我想显示红色通道并且希望它显示为红色 我试过了 imshow im 1 但它显示灰度图像 这不是我想要的 如何显示红色通道
  • Magento 开源 2.3 - CSS 和 JS 未加载

    I installed Magento 2 3 successfully but when type http localhost Magento2 http localhost Magento2 I get a blank page li
  • 如何在 dompdf 库上启用调试?

    我正在使用 dompdf 库来输出一些报告 我得到了一个文件输出 但我有一些奇怪的行为 如何启用调试报告dompdf https github com dompdf dompdf dompdf new Dompdf something li
  • 如何使用 DbSession 在 Yii2 中创建用户会话管理系统 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 今天 当我想为我的网站创建用户个人资料页面并希望创建系统用户可以管理他在此系统中的活动会话时 需要 查看活动会话 浏览器和平台 查看当
  • PHP 数组比较

    如何比较两个数组 例如我有array a b c and array a c b 当它们进行比较时 它会返回 true 但如果其中一个字母没有在其中之一中找到 它将返回 false 顺序并不重要 在比较之前 您需要将两个数组的内容调整为相同
  • YouTube API 观看私人视频

    我有一个具有草稿模式的网站 有人可以登录并查看该网站的外观 以便在公众看到该网站之前批准该网站 我在一个帐户上有一些 YouTube 视频 但我将其设为私人帐户 因为我不想让全世界看到它们 不过 我确实希望登录草稿模式的人能够观看私人嵌入内
  • 如何获得DiVs等级?

    html div class div class p strong span style color FF0000 Content1 span strong p p style text align center Content2 img
  • PayPal REST API:通过重定向 URL 或 Webhook 调用履行订单/付款?

    我正在致力于将 PayPal REST API 集成到我的 Symfony 2 Web 应用程序中 我不确定完成订单 付款的正确时间 地点 与金额 客户数据等其他参数一起 我将两个 URL 传输到 PayPal API 一个是接受付款时用户
  • 使用华为 E8372 hilink 通过 bash 脚本发送短信

    我正在尝试从华为 E8372 发送短信 与该产品的旧版本不同 它现在需要登录 用户名 密码 才能允许进行 API 调用 从https github com arska e3372 issues 1 https github com arsk
  • 使用 HTML 标签作为背景图像而不是 CSS background-image 属性?

    我需要使用 html img 标签作为背景图像 div 然后我将放置一个 p 的内容 我已经尝试过 但似乎无法让它们正确显示 我使用了相对位置 负值的边距 任何建议或指出我正确的方向将不胜感激 p div img src http www
  • PHP 中的金字塔星号

    请看我的代码 for row var row gt 1 row for j 0 j lt row j echo echo echo nbsp Output 但我需要输出如下 您可能想查看一些字符串函数
  • ImagickException 并显示消息 Postscript delegate 在 MAMP 3.0.5 上失败

    我正在尝试使用 MAMP 3 0 5 将 PDF 转换为 png 文件 我知道我的 PHP 代码可以在我们的 Linux 服务器上正常运行 我在 Mac OSX 10 8 5 上安装了 MAMP 3 0 5 当我运行脚本将 PDF 转换为
  • 错误 1366 (HY000):整数值不正确:第 1 行的列“id”的“”[已关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 My code sql INSERT INTO static table name sql join array key

随机推荐