MySQL PHP没有将完整文件存储到BLOB

时间:2015-06-19 12:56:57

标签: 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 save to mysql”阶段。

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

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

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

我完全难过!我已经尝试搞乱数据包/内存/上传限制,整理格式和数据库引擎。但我无法让它存储/传递整个文件。

有人有什么想法吗?

如果您需要更多信息,请与我们联系。

由于

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

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

2 个答案:

答案 0 :(得分:2)

如果要传输的数据(进入/退出MySQL)大于最大允许数据包大小,您会看到此问题。见https://dev.mysql.com/doc/refman/5.5/en/packet-too-large.html

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

[mysqld]
max_allowed_packet=16M

答案 1 :(得分:0)

在将症状缩小到PHP将数据发送到浏览器之后,我现在发现这一切都是由于PHP从PHP文件生成html的方式发生了什么变化(与代码中的一些差异混合)< / p>

问题本身是在图像标题之前发送的空白区域。在生成最终输出以发送到浏览器之前,我正在处理大量文件的代码。在其中几个文件中,关闭后有两个新行?&gt; php标签。由于这些PHP文件是在流式传输图像输出之前包含的,因此它们最终会成为标题之前的空白区域。

我首先通过在发送图像之前执行ob_clean()函数来解决问题。然后设法追踪新线的实际位置并将其移除。所以它现在有效。

有趣的是代码来自现场网站。这意味着该网站上的旧PHP版本应对代码中的这些差异。似乎新的更严格或以某种方式配置不同。

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