9

我想将一个最大为 10MB 的大文件上传到我的 MySQL 数据库。使用.htaccess我将 PHP 自己的文件上传限制更改为“10485760”= 10MB。我可以毫无问题地上传最大 10MB 的文件。

但如果文件大小超过 1 MB,我无法将其插入数据库中。

我正在使用file_get_contents读取所有文件数据并将其作为要插入 LONGBLOB 字段的字符串传递给插入查询。

但是大于 1 MB 的文件不会添加到数据库中,尽管我可以使用print_r($_FILES)它来确保文件正确上传。任何帮助将不胜感激,我将在接下来的 6 小时内需要它。所以,请帮忙!

4

7 回答 7

15

您将需要检查 MySQL 配置值“max_allowed_pa​​cket”,它可能设置得太小,从而防止发生 INSERT(本身很大)。

从 mysql 命令提示符运行以下命令:

mysql> show variables like 'max_allowed_packet';

确保它足够大。有关此配置选项的更多信息,请参阅

MySQL max_allowed_pa​​cket

这也会影响 PHP 中的 mysql_escape_string() 和 mysql_real_escape_string() 限制字符串创建的大小。

于 2009-01-29T17:21:10.777 回答
8

据我所知,通常更快更好的做法是不要将文件存储在数据库中,因为它会很快变得庞大并减慢速度。最好将文件存储在目录中,然后将文件的位置存储在数据库中。

我们为工作中的 CMS 中的图像/pdfs/mpegs 等执行此操作,方法是为从 url-safe 文件名命名的文件创建一个文件夹并将文件夹名称存储在 db.xml 中。然后在表示层中写出它的url就很容易了。

于 2009-01-29T17:29:04.660 回答
4

MySQL 的一些 PHP 扩展在 LONGBLOB 和 LONGTEXT 数据类型方面存在问题。扩展可能不支持 blob 流式传输(一次发布一个段),因此它们必须一次性发布整个对象。

因此,如果 PHP 的内存限制或 MySQL 的数据包大小限制限制了您可以发布到数据库的对象的大小,您可能需要更改 PHP 或 MySQL 上的一些配置以允许这样做。

您没有说明您使用的是哪个 PHP 扩展(MySQL 至少有三个),并且您没有显示用于将 blob 发布到数据库的任何代码。

于 2009-01-29T17:21:33.913 回答
4

最好的答案是使用更好的实现,也可以解决这个问题。你可以在这里阅读一篇文章。存储 10MB、1000MB 没关系。该实现将文件分块/切割成许多较小的部分并将它们存储在多行中。这有助于加载和获取,因此内存也不会成为问题。

于 2009-01-29T20:30:00.973 回答
3

您可以使用 MySQL 的LOAD_FILE 函数来存储文件,但您仍然必须遵守 max_allowed_pa​​cket 值以及文件必须与 MySQL 实例位于同一服务器上的事实。

于 2009-01-29T17:24:29.460 回答
0

你没有说你得到了什么错误(mysql_error()用来找出),但我怀疑你可能达到了最大数据包大小。

如果是这种情况,您需要更改 MySQL 配置max_allowed_packet

于 2009-01-29T17:18:49.767 回答
0

你没有说你得到了什么错误(使用 mysql_error() 找出),但我怀疑你可能达到了最大数据包大小。

如果是这种情况,您需要更改 MySQL 配置 max_allowed_pa​​cket

好吧,我有同样的问题。并且无法在“io模式”中通过chunck将数据输入mysql数据库

loop for : 
   read $data from file,
   write $data to blob
end loop
close file
close blob

一种解决方案似乎是创建一个包含多部分 blob 的表,例如 create table data_details ( id int pk auto_increment, chunck_number int not null, dataPart blob ); ???

于 2015-06-06T16:35:13.450 回答