如何在大于2MB的PHP上传文件?

时间:2014-10-06 02:39:48

标签: php file-upload large-files ini

我试图允许用户使用HTML文件输入和PHP上传最多2GB的jar文件。该过程工作正常,它上传文件,但只有它很小。我已将php.ini设置为:

max_execution_time = 10000
max_input_time = 10000
post_max_size = 2048M
upload_max_filesize = 2048M

在我这样做之后,它创建了我的所有php页面:

require_once("../include/config.php");

加载为带有NOTHING的纯白页或(有时)它给我这个错误:

Fatal error: Cannot redeclare encodePassword() (previously declared in /home/duskfall/public_html/authentication/encode.php:2) in /home/duskfall/public_html/authentication/encode.php on line 80

第80行说它是:

$coded = "";

为什么我只在php.ini中放入4个内容时会这样做。当我创建php.ini文件时,它们也是唯一的4件事。当我把NOTHING放在php.ini文件中时它甚至会这样做。我是否需要在文件中添加其他内容?

我该如何解决这个问题。或者有没有更好的方法来使用php.ini并使其仅影响一个php页面?

编辑:我也在Linux服务器上使用主机godaddy.com,如果这有帮助的话。

1 个答案:

答案 0 :(得分:0)

  1. 在使用post_max_size之前,您必须设置memory_limit。
  2. post_max_size取决于memory_limit,memory_limit必须高于post_max_size,不等于。
  3. post_max_size也必须高于upload_max_filesize 在php脚本中使用:

    echo ini_get(“memory_limit”)。“\ n”;
    的ini_set( “memory_limit的”, “30M”);
    echo ini_get(“memory_limit”)。“\ n”;

    echo ini_get(“post_max_size”)。“\ n”;
    的ini_set( “的post_max_size”, “20M”);
    echo ini_get(“post_max_size”)。“\ n”;

    echo ini_get(“upload_max_filesize”)。“\ n”;
    的ini_set( “的upload_max_filesize”, “19M”);
    echo ini_get(“upload_max_filesize”)。“\ n”;

  4. 此外:
    我认为你的函数encodePassword()有问题。
    尝试使用新的清除测试文件,如:

    test.html

    <form enctype="multipart/form-data" action="/path/to/your/phpscript" method="POST">
        <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
        Send this file: <input name="userfile" type="file" />
        <input type="submit" value="Send File" />
    </form>
    

    test.php

    $uploaddir = '/path/to/your/dir';
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
    
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "Success.\n";
    } else {
        echo "Error!\n";
    }
    
    echo '<pre>';
        echo 'Debug file:';
        print_r($_FILES);
    echo "</pre>";