我刚刚设置了一个运行 CentOS 6、Apache 2.2.15、PHP 5.5.25 和 MySQL 5.5.43 的新 LAMP 服务器。我从 webtatic 安装了 php 和 mysql,并使用了 mysqlnd 扩展。
我已经从一个旧得多的 LAMP 设置中转移了代码和数据库。网站的大部分工作正常并且传输良好。
然而,数据库中的文件存储已停止正常运行。我的意思是文件不再完全存储,最后大约 20% 丢失了。我花了很长时间试图找出可能的原因,并且相当有信心它发生在“php 保存到 mysql”阶段。
换句话说,文件以完整大小到达服务器,但是当它作为 LONGBLOB 进入数据库时,它已经失去了一些大小。但由于我必须从数据库中下载它来检查它的大小,所以文件的传递可能会出现问题。
目前我正在使用 phpmyadmin,它和我的 php 代码有完全相同的问题。无论我是使用我的 uploader 还是 phpmyadmin 的 uploader (通过插入/编辑选择文件),phpmyadmin 中显示的 LONGBLOB 文件大小最终都小于原始文件。
然后,当我通过我的文件传送或通过 phpmyadmins 下载它时,文件以正确的尺寸传送,但底部的 20% 是灰色/白色/彩色。
我完全被难住了!我试过搞乱数据包/内存/上传限制、整理格式和数据库引擎。但我无法让它存储/传送整个文件。
有人有什么想法吗?
如果您需要更多信息来提供帮助,请告诉我。
谢谢
编辑 1:我现在将问题缩小为 PHP 将文件传送到客户端浏览器时出现的问题。无论出于何种原因,当文件内容来自数据库字段时,它并未完整交付。正如我所提到的,我的代码和 phpmyadmin 都会发生这种情况。有什么想法吗?
编辑 2:我做了进一步的测试,可以使用 PHP 将文件从数据库成功写入服务器的文件系统。文件已完成!这只能意味着 PHP 从数据库发送数据的方式有问题。但是我的旧服务器和新服务器之间有什么变化?
最佳答案
如果您正在传输(传入/传出 MySQL)的数据大于允许的最大数据包大小,您就会看到此问题。参见 https://dev.mysql.com/doc/refman/5.5/en/packet-too-large.html
尝试增加 MySQL 配置中的最大数据包大小:
[mysqld]
max_allowed_packet=16M
关于php - MySQL PHP 未将完整文件存储到 BLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30938769/