我想将最大大小为10MB的大文件上传到我的MySQL数据库。使用.htaccess
我将PHP自己的文件上传限制更改为“10485760”= 10MB。我可以毫无问题地上传最大10MB的文件。
但如果文件大小超过1 MB,我就无法在文件中插入文件。
我正在使用file_get_contents
读取所有文件数据,并将其作为要插入LONGBLOB字段的字符串传递给插入查询。
但是大于1 MB的文件没有添加到数据库中,尽管我可以使用print_r($_FILES)
来确保文件正确上传。任何帮助将不胜感激,我将在接下来的6个小时内需要它。所以,请帮忙!
答案 0 :(得分:13)
您需要检查可能设置得太小的MySQL配置值“max_allowed_packet”,以防止INSERT(其本身很大)发生。
从mysql命令提示符运行以下命令:
mysql> show variables like 'max_allowed_packet';
确保它足够大。有关此配置选项的更多信息,请参阅
这也会影响PHP中的mysql_escape_string()和mysql_real_escape_string(),限制字符串创建的大小。
答案 1 :(得分:7)
据我所知,通常更快更好的做法是不将文件存储在数据库中,因为它会很快变大并减慢速度。最好将文件存储在目录中,然后将文件的位置存储在数据库中。
我们通过为url-safe文件名命名的文件创建文件夹并在db中存储文件夹名称,在我们工作的CMS中为images / pdfs / mpegs等执行此操作。然后,只需在表示层中写出它的url就很容易了。
答案 2 :(得分:4)
最好的答案是使用更好的实现,并解决该问题。 您可以阅读文章here。存储10MB,1000MB,没关系。实现将文件分块/切割成许多小块并将它们存储在多行中。这有助于加载和获取,因此内存也不会成为问题。
答案 3 :(得分:3)
MySQL的一些PHP扩展存在LONGBLOB和LONGTEXT数据类型的问题。扩展可能不支持blob流(一次发布blob一个段),因此他们必须一次性发布整个对象。
因此,如果PHP的内存限制或MySQL的数据包大小限制限制了您可以发布到数据库的对象的大小,您可能需要更改PHP或MySQL上的某些配置以允许此操作。
您没有说明您正在使用哪个PHP扩展(MySQL至少有三个),并且您没有显示用于将Blob发布到数据库的任何代码。
答案 4 :(得分:2)
您可以使用MySQL的LOAD_FILE function来存储文件,但您仍然必须遵守max_allowed_packet值以及该文件必须与MySQL实例位于同一服务器上的事实。
答案 5 :(得分:0)
你没有说你得到了什么错误(使用mysql_error()
查找),但我怀疑你可能达到最大数据包大小。
如果是这种情况,则需要change your MySQL configuration max_allowed_packet
答案 6 :(得分:0)
你没有说你得到了什么错误(使用mysql_error()查找),但我怀疑你可能达到了最大数据包大小。
如果是这种情况,则需要更改MySQL配置max_allowed_packet
我有同样的问题。并且数据无法通过chunck在“io模式”
中输入到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 ); ???