在PHP中上传大文件

5
如何在PHP中上传大于2MB的文件?我在互联网上搜索并更改了php.ini文件,修改了以下行:"upload_max_filesize = 200M",但我仍然无法上传超过2MB的文件。看起来出现了什么问题?请帮帮我。提前感谢您的帮助。

你是在共享主机上运行还是在本地机器上? - JohnP
2
在 Stack Overflow 上有很多关于这个问题的提问。您做了搜索吗? - Lightness Races in Orbit
我正在单一系统中运行。 - Surej
@Emmerman:Cant 意味着我无法获得输出。 - Surej
1
@karthick:什么是“无法获得输出”? 请更加具体地描述您看到了什么,以及您采取了哪些步骤来查看它。请精确地描述。 - Lightness Races in Orbit
显示剩余2条评论
9个回答

10

从前,我遇到了WAMP服务器的问题,当我寻找解决方案时,我偶然发现了这个讨论。如果有人遇到相同的问题,这是我的解决方法,希望能帮到你:

  1. 我使用的是WAMP堆栈。通过阅读您上面的评论,您也在使用WAMP堆栈。如果您不知道,WAMP服务器有两个php.ini(在PHP目录和Apache目录中)配置,一个用于CLI,另一个用于Apache本身(参见WAMP服务器上的php.ini)。因此,我创建了info.php来检测服务器使用的是哪个php.ini,在我的情况下,那是Apache目录中的那个(参见我的WAMP网页使用哪个PHP Ini文件?)。

  2. 打开服务器使用的php.ini,并像@Pascal Martin建议的那样更改upload_max_filesize,并设置post_max_size,然后重新启动服务器。

  3. 再次检查您的info.php,确保upload_max_filesizepost_max_size的值已更改为您需要的值。

  4. 重新启动Apache。

这对我有用,希望能帮助到你。


4
正如您所猜测的那样,您需要设置 upload_max_filesize... 但是,您还需要设置 post_max_size(引用):
设置允许的 post 数据最大大小。该设置也影响文件上传。要上传大文件,此值必须大于 upload_max_filesize

phpinfo() 函数表示什么? - Pascal MARTIN
@Pascal MARTIN: PHP 版本 5.2.6 - Surej
@karthick,phpinfo()对于这些值表示什么? - Your Common Sense
1
@karthick,所以你正在编辑错误的php.ini文件。phpinfo中载入的php.ini有什么内容?你正在编辑哪个?你是否重启了服务器? - Your Common Sense
@Col.Shranpnel:我修改了PHP配置文件,在我的WAMP目录中没有.ini文件。 - Surej
显示剩余2条评论

1

还有其他选项可以限制这个:

max_input_time = 600
php_value max_execution_time = 600
post_max_size = 200M

(...并重新启动Apache)


我更改了以下值: php_value upload_max_filesize 32M php_value post_max_size 60M php_value max_execution_time 500 php_value max_input_time 500 - Surej
1
这里的 max_execution_time 是做什么用的? - Your Common Sense
max_execution_time 用于脚本的最大生存时间和脚本应在接受输入方面花费的时间。 - Surej
@karthick PHP脚本只有在文件上传完成后才会被Web服务器调用。 - Your Common Sense

1

获取您的php.ini-dist文件,

  • 编辑它以设置上面显示的正确值
  • 将其重命名为php.ini
  • 将其复制到WINDOWS目录中
  • 重新启动Apache

@Col.Sharpnel:我按照您的指示操作了,但是在phpinfo中仍然显示2MB。 - Surej
@karthick 嗨,你需要查阅Wamp文档来了解如何编辑php.ini文件。 - Your Common Sense
好的...无论如何感谢Col.Sharpnel,我会自己尝试,如果上传成功了,我会告诉你的。 - Surej

1

上传大文件(>5MB),我使用分块上传方法。

/**
 * @param $file
 * @param $fileSize
 * @param $name
 * @return int
 */
public function chunkUpload($file, $fileSize, $applicantID, $name) {
    
    $targetFile     = 'upload/'. $name;
    $chunkSize      = 256; // chunk in bytes
    $uploadStart    = 0;

    $handle = fopen($file, "rb");
    $fp     = fopen($targetFile, 'w');

    # Start uploading
    try {
    
        while($uploadStart < $fileSize) {
        
            $contents = fread($handle, $chunkSize);
            fwrite($fp, $contents);
        
            $uploadStart += strlen($contents);
            fseek($handle, $uploadStart);
        }
    
        fclose($handle);
        fclose($fp);
        
        return 200;
        
    } catch (\Exception $e) {
        return 400;
    }
}

0
将以下代码放入 .htaccess 文件中并保存。
php_value upload_max_filesize 200M
php_value post_max_size 200M
php_value max_input_time 2000

1
@karthick:你必须重新启动Web服务器才能使更改生效。 - Lightness Races in Orbit

0

以这种方式更改了服务器设置...

memory_limit = 250M //The maximum amount of memory in bytes a script is allowed to allocate.
max_input_time = 600 //The maximum time in seconds a script is allowed to parse input data.
max_execution_time = 600 //The maximum time in seconds a script is allowed to run before it is terminated.

post_max_size = 200M //The maximum size in bytes of data that can be posted with the POST method. Typically, should be larger than upload_max_filesize and smaller than memory_limit.
upload_max_filesize = 100M //The maximum size in bytes of an uploaded file.

0

如果要上传较大的文件,则需要从php.ini文件中更改/增加post_max_size和upload_max_filesize指令的值。

upload_max_filesize = 200M post_max_size = 201M

这将将单个文件的上传限制从默认的2 MB增加到200 MB。


-2

尝试在 PHP 脚本中设置它(在顶部)。

ini_set("upload_max_filesize", "255M");
ini_set("post_max_size, "256M");

不会起作用是因为设置太晚了。 PHP脚本本身不处理上传。它实际上只有在上传完成后才被调用。 - Your Common Sense
3
@Efazati,“Entry can be set in php.ini, .htaccess or httpd.conf”在4.2.3之后的版本中可以设置,我不知道这一点。谢谢。@Col. Shrapnel,我想你是对的。 - Dejan Marjanović

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接