MySQL PHP未将完整文件存储到BLOB

MySQL PHP未将完整文件存储到BLOB,php,mysql,linux,phpmyadmin,centos,Php,Mysql,Linux,Phpmyadmin,Centos,我刚刚建立了一个新的LAMP服务器,运行CentOS 6、Apache 2.2.15、PHP5.5.25和MySQL 5.5.43。我从WebStatic安装了php和mysql,并使用mysqlnd扩展 我已经从一个旧得多的LAMP设置转移了代码和数据库。大部分现场工作正常,转移情况良好 但是,数据库中的文件存储已停止正常工作。我的意思是,文件不再完全存储,最后大约20%的文件丢失。我花了相当长的时间试图找出原因可能是什么,我相当有信心它是在“php保存到mysql”阶段发生的 换句话说,该文

我刚刚建立了一个新的LAMP服务器,运行CentOS 6、Apache 2.2.15、PHP5.5.25和MySQL 5.5.43。我从WebStatic安装了php和mysql,并使用mysqlnd扩展

我已经从一个旧得多的LAMP设置转移了代码和数据库。大部分现场工作正常,转移情况良好

但是,数据库中的文件存储已停止正常工作。我的意思是,文件不再完全存储,最后大约20%的文件丢失。我花了相当长的时间试图找出原因可能是什么,我相当有信心它是在“php保存到mysql”阶段发生的

换句话说,该文件使其达到了服务器的完整大小,但是当它作为一个LONGBLOB进入数据库时,它已经丢失了一些大小。但是,由于我必须从数据库中下载它来检查它的大小,这可能是文件交付的一个问题

目前我正在使用phpmyadmin,它和我的两个php代码都有完全相同的问题。无论我使用的是我的上传程序还是phpmyadmin的上传程序(通过插入/编辑选择文件),phpmyadmin中显示的LONGBLOB文件大小最终都比原始文件小

然后,当我通过文件传送或phpmyadmins下载时,文件以正确的尺寸传送,但底部20%为灰色/白色/彩色

我完全被难住了!我试过搞乱数据包/内存/上传限制、排序格式和数据库引擎。但我就是无法让它存储/传递整个文件

有人有什么想法吗

如果您需要更多信息来帮助,请告诉我

谢谢


编辑1:我现在把它缩小到PHP将文件传递到客户端浏览器的问题。无论出于何种原因,当文件内容来自数据库字段时,它都不会完整交付。正如我提到的,我的代码和phpmyadmin都会发生这种情况。有什么想法吗



编辑2:我已经做了进一步的测试,可以使用PHP成功地将文件从数据库写入服务器的文件系统。文件已完成!这只能说明PHP从数据库发送数据的方式是个问题。但是,我的旧服务器和新服务器之间发生了什么变化?

如果您正在传输的数据(进出MySQL)大于允许的最大数据包大小,您将看到此问题。看

尝试在MySQL配置中增加最大数据包大小:

[mysqld]
max_allowed_packet=16M

在将症状缩小到PHP将数据发送到浏览器之后,我现在发现这一切都是由PHP从PHP文件生成html的方式发生变化(代码中存在一些差异)引起的

问题本身是在发送图像标题之前发送空白。在我正在处理的代码中,在生成最终输出以发送到浏览器之前,包含了很多文件。在其中几个文件中,在closing?>php标记之后有两行新行。由于这些PHP文件是在图像输出流化之前包含的,因此它们最终在标题之前是空白

首先,我在发送图像之前做了一个ob_clean()函数。然后设法找到新线路的实际位置并将其删除。所以它现在起作用了

有趣的是,代码来自一个现场站点。这意味着该站点上的旧PHP版本处理了代码中的这些差异。新版本似乎更严格,或者配置方式有所不同


如果有人知道这些更改可能是什么,请分享:)

除此之外,我刚刚注意到,数据库中存储的所有现有文件(从旧服务器传输的)也没有正确传输!这意味着问题在于如何从MySQL中提取LONGBLOB数据并由PHP进行解释。我不认为这是一个PHP编码问题,因为phpmyadmin和我的代码都有这个问题。这个字段的声明是什么?你有没有指定一个最大尺寸?这是一个长圆点。另外,我迁移了代码和数据库,没有任何更改!唯一不同的是LAMP版本为什么不将文件保存在文件夹中,并将文件夹的路径保存在数据库中?谢谢您的建议。但对任何人来说。我是否可以排除将其保存到文件夹以及任何有关它的争论。应用程序相当大,存储的数据更大。将所有现有文件从数据库移动到文件系统将是一项巨大的工作。谢谢您的建议。我的max_allowed_数据包设置为32M,代码限制为8MB。此外,我正在测试的文件的范围从10Kb到1Mb。文件的大小似乎不是引发此问题的原因。发生在所有文件上,无论大小:(