通过PHP将文件上传到MySQL数据库失败的大文件

时间:2015-07-22 21:40:53

标签: php mysql file-upload mysqli

我希望有人能指出我正确的方向。我试着搜索论坛,但没有找到关于这个主题的内容。

无论如何......我正在使用我的网站将带有PHP的文件上传到MySQL数据库中。这一切都运行正常,除非文件到达~4.5Mb及以上范围内的某个地方,脚本失败。 MySQL没有返回错误,并且插入ID为0,PHP没有错误。

我在php.ini文件中尝试了以下内容:

max_execution_time = 600
max_input_time = 600
post_max_size = 15M
upload_max_filesize = 15M
memory_limit = -1

我在MySQL中设置了max_allowed_pa​​cket大小:

Variable_name           Value
max_allowed_packet   16777216

,文件内容的列类型为mediumblob

以下是执行上传的PHP代码,缩短了一些以排除不相关的内容:

...
$con->query("SET GLOBAL max_allowed_packet = 16777216;");
$con->autocommit(FALSE);
$fp = fopen($file, 'r');
$sql_query->bind_param('ssisb', $FILE['FILE_NAME'], $FILE['FILE_DESC'], $FILE['FILE_SIZE'],
$FILE['FILE_TYPE'], $null);
while(!feof($fp)){$sql_query->send_long_data(4, fread($fp, 8192));}
fclose($fp);
$sql_query->execute();
$fileIDs[$fileIndex] = $sql_query->insert_id;
...
$con->commit();
...

这是一个循环,因为你可以通过它上传多个文件,即使这样做只要文件单独在~4.5Mb

下工作也可以。

这里有人知道为什么会发生这种情况,或者我可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

更改并重新启动apache

post_max_size = 100M
upload_max_filesize = 100M

还尝试在my.cnf中添加以下行并重新启动

[mysqld]
# Performance settings used for import.
delay_key_write=ALL
bulk_insert_buffer_size=256M