【发布时间】:2015-09-05 11:22:10
【问题描述】:
我刚刚设置了一个运行 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 代码都有完全相同的问题。无论我使用我的上传器还是 phpmyadmin 的上传器(通过插入/编辑选择文件),phpmyadmin 中显示的 LONGBLOB 文件大小最终都会小于原始文件。
然后,当我通过我的文件交付或通过 phpmyadmins 下载它时,文件以正确的尺寸交付,但底部的 20% 是灰色/白色/彩色。
我完全被难住了!我试过搞乱数据包/内存/上传限制、整理格式和数据库引擎。但我无法让它存储/传递整个文件。
有人有什么想法吗?
如果您需要更多信息来提供帮助,请告诉我。
谢谢
编辑 1:我现在将其范围缩小为 PHP 将文件传递到客户端浏览器的问题。无论出于何种原因,当文件内容来自数据库字段时,它都不会完整地传递。正如我所提到的,这发生在我的代码和 phpmyadmin 中。有什么想法吗?
编辑 2:我已经做了进一步的测试,并且可以使用 PHP 成功地将文件从数据库写入服务器的文件系统。文件完成!这只能意味着 PHP 从数据库发送数据的方式是问题所在。但是我的旧服务器和新服务器之间有什么变化?
【问题讨论】:
-
除此之外,我刚刚注意到存储在数据库中的所有现有文件(从旧服务器传输)也没有正确传递!这意味着问题在于 LONGBLOB 数据是如何从 MySQL 中提取并由 PHP 解释的。我不认为这是 PHP 编码问题,因为 phpmyadmin 和我的代码都受此影响。
-
该字段的声明是什么?您是否指定了最大尺寸?
-
它是一个 LONGBLOB。另外,我在没有更改的情况下迁移了代码和数据库!唯一不同的是 LAMP 版本
-
为什么不将文件保存在文件夹中,并将文件夹路径保存在数据库中?
-
感谢您的建议。但对于任何寻找的人。我可以排除将它保存到一个文件夹以及任何关于它的辩论。该应用程序非常大,存储的数据更大。将所有现有文件从数据库移动到文件系统将是一项巨大的工作。
标签: php mysql linux phpmyadmin centos