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

时间:2011-07-04 22:00:48

标签: php postgresql image-processing

我正在从我的生产和开发实例当前共享的单个PostgreSQL数据库中加载图像。这已经有点不准确 - 生产服务器尚未生效,这就是为什么他们共享数据库是可以的。该软件本身是用PHP5.3编写的。

问题是:我的图像存储例程适用于两台服务器。使用任一分支存储的图像可以在生产分支中正确显示。但是,这些图像在生产方面是完全不可见的。

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

‰PNG IHDR99zÒ IDAThL&³Ùaaaýýýþþþþþþþþþýýýýýý" ø÷øëðïêññçîîàëêßêêìööPPP;'(8&'"þþúúüýýýþþÿþõÛëìÇÙÙÈÞÝòúúLLL P45B-,üý÷÷ýýÿÿÿÿþþþÿýýþþÿÿþþÿ íÿºÒÒµÕÔòúúKKKÿÿÿF**]=?ýýõõÿÿÿ

开发服务器发送时(摘录):

x89504e470d0a1a0a0000000d4948445200000039000000390802000000037a14d200002000494441546805014c26b3d9016161610000000000000000000000000000000000000000000000000000000000000000000000000000000

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

实例之间的相关代码似乎相同。调查php.ini只会产生与错误报告相关的细微差别。我几乎可以肯定这是一个服务器通信问题,但我不知道究竟是什么导致它。

2 个答案:

答案 0 :(得分:1)

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

尽可能see here 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设置。

答案 1 :(得分:1)