Php 从数据库加载图像时,跨服务器的结果不一致

Php 从数据库加载图像时,跨服务器的结果不一致,php,postgresql,image-processing,Php,Postgresql,Image Processing,我正在从生产和开发实例当前共享的单个PostgreSQL数据库加载图像。这已经有点不准确了——生产服务器还没有启动,这就是为什么它们可以共享一个DB。软件本身是用PHP5.3编写的 问题是:我的映像存储例程在两台服务器上都可以工作。使用任一分支存储的图像可以在生产分支中正确显示。然而,这些图像在生产端是完全看不见的 直接调用image display脚本会发现每个脚本返回的数据明显不同。生产服务器提供(摘录): “码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码

我正在从生产和开发实例当前共享的单个PostgreSQL数据库加载图像。这已经有点不准确了——生产服务器还没有启动,这就是为什么它们可以共享一个DB。软件本身是用PHP5.3编写的

问题是:我的映像存储例程在两台服务器上都可以工作。使用任一分支存储的图像可以在生产分支中正确显示。然而,这些图像在生产端是完全看不见的

直接调用image display脚本会发现每个脚本返回的数据明显不同。生产服务器提供(摘录):

“码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码第45页-第25页

当开发服务器交付时(摘录):

X89504E470D0A1A0000000D494845200000003900000390802000007A14D2000494441546805014C26B3D9016161010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

奇怪的是,开发服务器的响应与实际数据库似乎存储的内容相呼应


实例之间的相关代码似乎相同。调查php.ini只会产生与错误报告相关的微小差异。我几乎可以肯定这是一个服务器通信问题,但我不知道到底是什么原因造成的。

我猜返回的数据是相同的,但在一种情况下,字符串显示为s原始输出,在另一种情况下,在输出中以十六进制字符串形式给出

正如您所知,
89 50 4E 47 0D 0A 1A 0A
是png文件的神奇数字,如果您将其转换为ascii,您将获得
\211 p N G\r\N\032\N
,这是第一次输出的前8个字节的内容

因此,您必须找出为什么在一种情况下输出是十六进制的,而在另一种情况下输出是原始的,可能是postgres设置,或者它可能取决于您使用php检索和显示内容的方式

您应该尝试使用命令行或与php无关的工具输出图像字段的内容。如果以这种方式输出相同,您可以将搜索限制为php.ini设置(在这种情况下,您应该发布一些关于图像检索的代码)


相反,如果输出在postgres级别不同,则应调查两台服务器上的postgres设置。

您得到的配置不匹配:


你会在整个网站上看到这样的情况:将图像存储在数据库中几乎从来都不是一个好主意。你为什么不能将它们存储为常规文件?这看起来像是一个编码问题……因为当文件数量和图像与内容的关系如此密切时,这将是一场后勤噩梦。将图像移动到da之外tabase会给同步带来困难。@Frankie,我很感激你将手头的问题与第二个主题分开。因此,我的困境是:我必须提供很多相对较低的图像(大多数在2kb左右,一些高达500kb)对于用户来说,数据是高度个性化的,但不会经常改变。但是,图像是用户提供的,并且具有非常复杂的层次结构。因此,在数据库中按目录而不是以更抽象的方式组织图像是一个重大的工程挑战。静态内容图像不是存储在数据库中的只有用户数据。可能还比较了不同版本的libpq库或php/pgsql集成?这让我走上了正确的方向。在检索查询之前设置
SET bytea_output=“escape”
解决了这个问题,现在我正在永久更改设置以避免查询开销。