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

标签 php mysql linux phpmyadmin centos

我刚刚设置了一个运行 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/

相关文章:

php - 为什么要抑制 PHP 错误?

javascript - 垂直数组值水平存储到mysql表的不同列中

php - 使用从 mysql 数据库获取的字段名称和值填充表

php - 如何从 key : value meta table in mysql? 加入数据

php - 插入时有列复制索引值吗?

PHP 从 Mysql 数据创建 XML 文件?

linux - Jenkins 如何处理交互式 Shell 脚本?

linux - BASH - 比较两个文件并将输出重定向到可读的内容

python - 使用 h5py 在 debian python 中访问文件

php - 在 PHP 中创建可选生成器