当文件太大时,上传不起作用

时间:2010-10-28 15:09:01

标签: php file-upload

我有一个PHP应用程序,我可以上传文件。当我上传大多数文件并执行print_r($_FILES)时,我会得到类似的结果:

Array
(
    [import] => Array
        (
            [name] => Array
                (
                    [excel_file] => COD MKTG 2.csv
                )

            [type] => Array
                (
                    [excel_file] => application/vnd.ms-excel
                )

            [tmp_name] => Array
                (
                    [excel_file] => /tmp/phpy8mEKn
                )

            [error] => Array
                (
                    [excel_file] => 0
                )

            [size] => Array
                (
                    [excel_file] => 1584286
                )

        )

)

我有另一个CSV文件更像是13兆字节,当我尝试上传时,我得到了这个:

Array
(
    [import] => Array
        (
            [name] => Array
                (
                    [excel_file] => COD MKTG.csv
                )

            [type] => Array
                (
                    [excel_file] => 
                )

            [tmp_name] => Array
                (
                    [excel_file] => 
                )

            [error] => Array
                (
                    [excel_file] => 1
                )

            [size] => Array
                (
                    [excel_file] => 0
                )

        )

)

我没有得到任何错误,说文件太大了。我只是感到格格不入$_FILES。我将php.ini中的post_max_size设置为100MB。为什么会这样?

4 个答案:

答案 0 :(得分:13)

根据PHP文档,错误代码1为UPLOAD_ERR_INI_SIZE:“上传的文件超出了php.ini中的upload_max_filesize指令”

您需要确保正确设置以下所有变量:

upload_max_filesize - 上传中任何单个文件的最大尺寸
max_file_uploads - 允许上传的文件总数
post_max_size - 所有被发布数据的总和(表单数据+文件)
memory_limit - 必须是> post_max_size,允许PHP +脚本开销的空间

除此之外,还有网络服务器限制。 Apache有LimitRequestBody,它会在PHP进入图片之前很久就会应用。

答案 1 :(得分:1)

改变内存限制 memory_limit = 8M;

大概20?

也许是执行时间

的max_execution_time

编辑:

确保没有执行时间查找...

如果您的互联网连接非常慢,则可能是

max_input_time设置

它必须是其中之一或您的脚本有问题 或者你没有正确设置

memory_limit的

的max_execution_time

max_input_time设置

答案 2 :(得分:0)

您也可以尝试在根目录中的.htaccess文件中设置这些值

php_value upload_max_filesize 128M
php_value post_max_size 128M
php_value max_execution_time 200
php_value max_input_time 200

答案 3 :(得分:0)

据我所知,PHP在文件系统功能方面存在大文件问题。 32位编译的PHP有2147483647作为PHP_INT_MAX,这意味着大于〜2G的文件将无法打开,搜索等。这个数字在64位编译的PHP中更大[大约4万亿字节 - 8字节有符号整数]

此时此刻,我正在尝试解决此问题[我正在尝试将JumpLoader集成到我的CMS项目中。它完成了,除了与这个2G倾覆问题相关的部分 - 不能对大于2G的文件起作用。],所以一旦我得到一个解决方案,就会分享它。

现在祝你好运。