【问题标题】:File uploads through PHP into MySQL database failing on larger files通过 PHP 将文件上传到 MySQL 数据库在大文件上失败
【发布时间】:2015-10-12 23:57:46
【问题描述】:

我希望这里有人可以为我指明正确的方向。我尝试搜索论坛,但没有找到关于该主题的任何内容。

无论如何...我正在使用我的网站将 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,即使这样做也可以正常工作

这里有人知道为什么会发生这种情况,或者我可以通过任何其他方式解决此问题吗?

【问题讨论】:

    标签: php mysql file-upload mysqli


    【解决方案1】:

    更改为并重新启动 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
    

    【讨论】:

    • 我现在正在尝试 post_max_size 和 upload_file_size,几分钟后就会知道。如果文件在 4.5Mb 时失败并且当前为 15,为什么它必须是 100M?另外,我无法访问我的虚拟主机上的 my.cnf。我 ssh 进入并到处寻找它。
    • 目前是memory_limit = -1,应该是无限的吧?
    • 是在 php 脚本中设置的,像这样 ini_set('memory_limit', '64M');或在 php.ini 中作为 memory_limit = 64M
    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 2014-10-18
    • 2012-04-12
    相关资源
    最近更新 更多