PHP显示BLOB数据?

2024-03-16

如何使用 PHP 显示 BLOB 数据?我已将 BLOB 输入到数据库中,但如何检索它?任何例子都会很棒。


我考虑投票结束这个重复项,但标题相当不错,并且浏览其他问题,我没有找到一般问题的完整答案。这类问题暴露了对 HTTP 基础知识缺乏了解,所以我写了这个长答案。我已经掩盖了一点,但任何理解以下内容的人可能都不需要问这样的问题。或者如果他们这样做了,他们就能够提出更具体的问题。

First- 如果您在数据库中存储图像或其他文件,请停止并重新考虑您的架构。 RDBMS 并未真正针对处理 BLOB 进行优化。有许多(非关系型)数据库专门用于处理文件。他们叫文件系统,而且他们真的很擅长这一点。至少 95% 的情况下,我发现常规文件卡在 RDBMS 中,这是毫无意义的。所以首先,考虑not将文件数据存储在数据库中,使用文件系统,并在数据库中存储一些小数据(如果必须的话,可以使用路径,通常您可以组织文件系统,这样您所需要的只是一个唯一的 ID)。

那么,您确定要将 Blob 存储在数据库中吗?

在这种情况下,您需要了解 HTTP 的工作原理。无需赘述,只要某个客户端请求 URL(发出 HTTP 请求),服务器就会使用 HTTP 响应进行响应。 HTTP 响应有两个主要部分:标头和数据。两个部分由两个连续的换行符分隔。

线路上的标头是简单的纯文本键/值对,如下所示:

Name: value

并用换行符分隔。

数据基本上是 BLOB。这只是数据。数据的解释方式由客户端根据其附带的 Content-Type 标头的值决定。 Content-Type 标头指定网络媒体类型 http://en.wikipedia.org/wiki/Internet_media_type数据部分中包含的数据。

看看它的工作原理

这没有什么神奇的。对于常规 HTML 页面,整个响应是人类可读的。请尝试以下操作:

$ telnet google.com 80   # connect go google.com on port 80

你会看到类似的东西:

Trying 74.125.113.104...
Connected to google.com.
Escape character is '^]'.

现在输入:

GET /

(随后返回)。

您刚刚发出了一个非常简单的 HTTP 请求!您可能已收到回复。看看回复。您将看到所有标题,后跟一个空行,然后是 google 主页的 HTML 代码。

So what?

现在您知道网络服务器是做什么的了。他们接受请求(比如GET /),并返回响应(由标题组成,后跟一个空行(两个连续的换行符),后跟数据)。

现在,是时候认识到:

您的 Web 应用程序实际上只是一个定制的 Web 服务器

您编写的所有代码都会接受任何请求,并将其转换为 HTTP 响应。所以你基本上只是制作一个专门版本的 apache、IIS、nginx、lighty 等等。

现在,Web 服务器通常处理请求的默认方式是在目录(文档根目录)中查找文件,查看该文件以确定要发送哪些标头,然后发送这些标头,然后发送文件内容。

但是,虽然您的 Web 服务器对文件系统中的文件执行了所有这些操作,但它完全不了解 RDBMS 中的某些 BLOB。所以你必须自己做。

如果您知道 BLOB 的内容是一个 JPG 图像,应该根据同一个表中的“名称”列来命名,您可能会执行以下操作:

<?php
$result = query('select name, blobdata from table where id = 5'); 
$row = fetch_assoc($result);
header('Content-Type: image/jpeg');
echo $row['blobdata'];
?>

(如果您想暗示浏览器应该下载文件而不是显示它,您可以使用附加标头,例如:header('Content-Disposition: attachment; filename="' . $row['name'].'"');)

PHP 足够聪明,可以提供 header() 函数,该函数设置标头,并确保首先发送它们(并与数据分开)。设置完标头后,您只需发送数据即可。

只要您的标头为客户端提供了有关如何处理数据有效负载的足够信息,一切就都很顺利了。

Hooray.

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

PHP显示BLOB数据? 的相关文章

  • PHP解析xml文件错误

    我正在尝试使用 simpleXML 来获取数据http rates fxcm com RatesXML http rates fxcm com RatesXML Using simplexml load file 我有时会遇到错误 因为这个
  • HTML5 视频:使用 Blob URL 流式传输视频

    我有一个 Blob 数组 实际上是二进制数据 我可以表达它 但是效率最高 我现在正在使用 Blob 但也许Uint8Array或者有什么会更好 每个 Blob 包含 1 秒的音频 视频数据 每秒都会生成一个新的 Blob 并将其附加到我的数
  • 如何在MAMP中设置环境变量?

    如何在 MAMP 版本 3 3 中设置环境变量 我可以在我的 PHP 应用程序中使用它 我已经更新了 Applications MAMP Library bin envvars and envvars std file并添加以下行 Lice
  • 具有动态表单名称的 form_widget

    在我的 Twig 模板中 我有一个 FOR 循环 它创建多个表单 如下所示 for thing in things set form id myform thing Id set form name attribute form myfor
  • 如何将 PHPMailer 与 Codeigniter 3 集成

    嗨 我正在尝试使用PHPMailer 库 https github com PHPMailer PHPMailer来自我的 Codeigniter 应用程序中的 GitHub 我下载了代码并解压到我的application library文
  • SQLAlchemy - 批量插入忽略:“重复条目”

    我有一个名为user data 列id and user id作为唯一的密钥 我想将一些历史数据导入到该表中 我用批量插入映射 http docs sqlalchemy org en rel 1 0 orm session api html
  • php 如何统计文件夹中的文件数量?

    我想让用户能够在自己的文件夹中上传一些文件 图片 但只有当该文件夹包含的图片少于五张时才可能 如果已经有 5 张图片 脚本必须让用户知道他 她的文件夹已满 所以 我想知道php中是否有函数可以计算文件夹中的文件数量 或者 php 中有其他方
  • Laravel 广播:通知与事件

    我阅读了 laravel 文档Events and Notifications 似乎我们可以触发一个事件 并从该事件中触发 使用ShouldBroadcast接口 将其广播到我理解的 laravel echo 另一方面我们可以使用通知via
  • 使用日语“Enter”键进行搜索功能

    我在日语方面遇到了问题 我有一个允许用户搜索数据的表单 当用户输入要搜索的字符串并按 Enter 键时 搜索功能就会执行 我的代码是 formSearch input keyup function event var key event c
  • Laravel 按动态 ID 数组对集合进行排序 [重复]

    这个问题在这里已经有答案了 我有以下 people array 5 2 9 6 11 people collection People find people 但当我倾倒并死去时 people collection集合按 ID ASC 排序
  • CakePHP Xml 实用程序库触发 DOMDocument 警告

    我正在使用 CakePHP 在视图中生成 XMLXML核心库 http book cakephp org 2 0 en core utility libraries xml html xml Xml build data array ret
  • 在 Mysql 上使用 EntityManager JPA 运行脚本

    我正在尝试运行脚本 sql 文件 但由于我尝试了多种方法 因此出现多个错误 这是我的主要 sql 脚本 INSERT INTO Unity VALUES 11 paq 0 2013 04 15 11 41 37 Admin Paquete
  • PHP7构造函数类名

    我有一个 Laravel 4 2 应用程序 它可以与 PHP5 一起使用 没有任何问题 由于我安装了一个运行 PHP7 的新 vagrant box 一旦我运行一个模型 其中函数名称与类名称 关系函数 相同 就会出现错误 如下所示
  • 未捕获的异常“Google_IO_Exception”,消息为“HTTP 错误:无法连接”

    我有一个任务 查询 运行一些从 gmail 邮箱检索数据的 php 代码 直到上周五 2015 年 4 月 10 日 它一直工作正常 现在我收到以下错误日志 E 11 58 26 094 2015 04 15 200 3 38 KB 14
  • 在 Woocommerce 购物车中设置最小小计金额

    我正在尝试将最低订单金额设置为 25 美元 到目前为止 我找到了这段代码 如果未达到最低限度 它似乎可以阻止结账 但它使用的小计包含税费 我需要在总计中排除税费 add action woocommerce checkout process
  • 如何编写在正文中包含锚标记的 Zend Framework URL?

    使用 Zend Framework 中设置的标准 MVC 我希望能够显示始终具有锚点的页面 现在我只是在 phtml 文件中添加一个带有 anchor 的无意义参数
  • PHP中如何识别服务器IP地址

    PHP中如何识别服务器IP地址 对于服务器 ip 来说是这样的 SERVER SERVER ADDR 这是港口的 SERVER SERVER PORT
  • 计算 mysql 数据库行数的最佳方法

    在遇到 mysql 查询加载时间慢的问题后 我现在正在寻找计算行数的最佳方法 我曾经愚蠢地使用过mysql num rows 函数来做到这一点 现在意识到这是最糟糕的方法 我实际上正在制作一个分页来用 PHP 制作页面 我找到了几种计算行数
  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words
  • MySQL - 选择一行 - 然后相对于所选行的下一个和上一个

    我会尽力澄清这一点 我需要在不使用 id 的情况下选择特定行和该选定行的前一个相对行以及该选定行的下一个相对行 这可能吗 简而言之 上一篇和下一篇 我不能 也许我只是不知道如何 使用 id 的原因是因为它们不是按顺序排列的 正如您从这个相当

随机推荐

  • 修复了移动 Safari 网站上带有文本字段的标题

    我已经四处寻找了一段时间 但似乎找不到解决此问题的方法 当输入字段在移动 safari 中获得焦点 尚未检查其他浏览器 时 固定元素将由于 safari 将该元素置于视图中 更靠近中心 而跳转 该错误仅在用户滚动时发生 如果用户仍位于页面顶
  • 我可以使用python创建类似flash的浏览器游戏吗?

    是否可以使用python创建类似flash的浏览器游戏 其实我想用它来做经济模拟 不过相当于页游一样 Davoud 答案是肯定的 假设您认为这是您想要做的事情的一个很好的例子 http pyjs org examples Space htm
  • Phong 照明:单独添加镜面照明还是与环境光和漫反射一起添加?

    我正在尝试实现 Phong 照明 在某些教程中 将镜面光照添加到环境光照和漫射光照中 然后将总光照乘以纹理颜色 我还看到了一个教程 其中在添加环境光和漫射光与纹理颜色相乘之后单独添加镜面照明 这是一个片段着色器 其中包含两个选项和屏幕截图
  • 使用 SAVON response.to_hash 转换方法解析 SOAP 响应

    我在解析 SOAP 响应时遇到问题 这是我的代码 require rubygems require savon client Savon Client new http 1 2 3 4 xyz abcd fsds wsdl res clie
  • 在 Heroku 上备份/加载后,PostgreSQL 数据库大小较小

    最近 我创建了一个新的 Heroku 应用程序用于生产 并使用我从临时数据库中获取的备份填充它的数据库 问题在于 如 Heroku 的 Postgres 网页上所示 这两个数据库的数据库大小不同 我从中获取备份的第一个数据库大小为 360
  • 更改 React Bootstrap 中展开的手风琴面板的标题样式

    对于单击和活动 展开的面板 我想更改 css 样式 那是因为我想切换面板标题内向上或向下指向的图像箭头 我能够获取打开面板的 eventKey 但无法使用面板标题CSS 类 你有什么建议 Thanks 代码如下
  • 如何将已通过身份验证的用户从登录页面重定向到主页

    我正在使用 Apache Shiro 开发 JSF 应用程序 我使用 Shiro 验证用户并将她重定向到主页 这没有问题 身份验证后 当我尝试访问登录页面时 它不会将我重定向到主页 即使已经有登录的用户 我也可以再次登录 我正在做程序化登录
  • Java、C++、C# 等如何通过 < 和 > 解决这种特定的语法歧义?

    我曾经认为 C 是一种 奇怪 的语言 它与 lt and gt 但是在尝试实现解析器之后 我想我发现了一个打破的例子大概every java中的通用方法调用是
  • 谁有关于 PostgreSQL 后台进程的文档?

    谁有关于 PostgreSQL 后台进程的文档 我想了解有关这些后台进程的详细信息 postgres 记录器进程 postgres 编写进程 postgres wal writer进程 postgres autovacuum 启动程序进程
  • 具有透明背景的CWnd

    我想创建一个基于 CWnd 的类 它将引入具有透明背景的控件 只要内容是静态的 创建一个控件并用透明背景绘制其内容对我来说没什么大不了的 问题是当我想创建一个内容不断变化的控件时 这是因为我不知道如何用父背景删除控件的内容 一般情况下可能不
  • 如何开始构建 django 网站以及 django 如何构建页面?

    我为我的个人网站启动了一个 django 项目来学习 django 到目前为止 我已经设置了我需要的一切开发环境并遵循this https docs djangoproject com en dev intro tutorial01 创建一
  • git push --recurse-submodules=on-demand 并不是真正的递归

    我有以下项目结构 root project A C B A 和 B 是根项目的子模块 C 又是一个子模块 假设我对项目 A B 和 C 进行了更改 并且 将这些变化提交给各自的指数 之后我更新 根项目中对 A 和 B 的引用并提交该更改 以
  • 如果类包含基类类型的成员作为第一个元素,然后是其他成员,编译器可以优化空基吗?

    考虑 struct empty struct child empty empty a sizeof int sizeof empty int b Assume sizeof int gt sizeof empty 标准是否强制要求sizeo
  • 使用 g++ 编译 C++11

    我正在尝试将我的 C 编译器更新到 C 11 我搜索了一下 得出的结论是我必须使用该标志 std c 0x or std gnu 0x 但我对标志了解不多 谁能帮我 我使用的是 Ubuntu 12 04 这是当我尝试使用 C 11 中包含的
  • Composer更新问题

    我正在使用 laravel composer 我正在加载 way generators 包 当我运行 Composer update 时出现以下错误 加载包含包信息的 Composer 存储库 依赖项 包括 require dev 致命错误
  • Java:为什么我不能将 int 转换为 Long

    Java 中的所有数字都应该是 int 类型 以下行在 Java gt 1 5 中是合法的 Short s 1 Will compile to Short s Short valueOf short 1 thus you can t exc
  • 使用httr R包发送POST请求

    当通过 POST 请求发送服务器数据时 我不知道如何模仿浏览器的行为 以下是相关 URL 并附有说明 1 http kenpom com 2 http kenpom com register php frompage 1
  • Xcode 4.6 上的 Mach-O 链接器错误

    我在 Xcode 4 6 上有一个 iOS 应用程序 当我最近尝试在 iPhone 6 1 模拟器中构建和运行时 我收到了 Mach O 链接器错误 它继续说道 ld 架构 i386 的 17 个重复符号 clang 错误 链接器命令失败
  • 如何使用 Roslyn 代码修复提供程序 API 从文档中删除 SyntaxNode 列表?

    我正在使用自定义生成的变量声明SyntaxFactory VariableDeclaration和一个列表SyntaxNode是根据一定条件收集的 我做了以下事情 修改节点 var newRoot root ReplaceNode expr
  • PHP显示BLOB数据?

    如何使用 PHP 显示 BLOB 数据 我已将 BLOB 输入到数据库中 但如何检索它 任何例子都会很棒 我考虑投票结束这个重复项 但标题相当不错 并且浏览其他问题 我没有找到一般问题的完整答案 这类问题暴露了对 HTTP 基础知识缺乏了解