即使更改了 php.ini 文件,文件也太大而无法上传到服务器

Posted

技术标签:

【中文标题】即使更改了 php.ini 文件,文件也太大而无法上传到服务器【英文标题】:File too large to upload to server even when php.ini file altered 【发布时间】:2016-10-24 04:42:18 【问题描述】:

我无法将 (.OBJ) 文件上传到服务器并收到“错误 1”,这意味着

上传的文件超过了php.ini中的upload_max_filesize指令

我从这个页面得到了这个信息 - http://php.net/manual/en/features.file-upload.errors.php

然后我转到 php.ini 文件并将 upload_max_filesizepost_max_size 都更改为 10000M

当我尝试上传文件时仍然收到“错误 1”,即使它只有 3MB。我还重新启动了服务器,以便我对 php.ini 文件所做的更改生效。我知道我的代码适用于较小的文件,因为我已经能够发送一个包含“测试”一词的小型 TXT 文件。

这是 form.php 文件,其中包含用于在服务器端处理发送文件的 PHP 代码和用于创建文件选择和上传功能的 html 代码。

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

ini_set('max_execution_time', 3000000);

if ($_SERVER['REQUEST_METHOD'] === 'POST') 
    var_dump($_FILES);
    echo "<br/><b>File Name:</b> " . $_FILES["file"]["name"] . "<br>";
    echo "<b>Type:</b> " . $_FILES["file"]["type"] . "<br>";
    echo "<b>Size:</b> " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "<b>Temp File Name:</b> " . $_FILES["file"]["tmp_name"] . "<br>";
    echo "<b>Error:</b> " . $_FILES["file"]["error"] . "<br>";

    $sourcePath = $_FILES['file']['tmp_name'];            // Storing source path of the file in a variable
    $targetPath = "upload/" . $_FILES['file']['name'];    // Target path where file is to be stored

    move_uploaded_file($sourcePath, $targetPath);

    exit;

?>

<!DOCTYPE html>
<html>
<head>
    <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
</head>
<body>
    <form action="form.php" method="post" enctype="multipart/form-data">
        <label>File</label>
        <input type="file" name="file">
        <input type="submit" value="Upload"> 
    </form>
    <div></div>
</body>
<script>

$(function () 
    $('form').on('submit', function (e) 
        e.preventDefault();

        $.ajax(
            url: this.action,
            type: this.method,
            data: new FormData(this),
            processData: false,
            contentType: false,
            success: function (res) 
                $('div').html(res);
            
        );
    );
);

</script>
</html>

总结一下我的问题是,为什么我修改了php.ini文件的相应变量,却无法上传想要的文件?

【问题讨论】:

打印 phpinfo 页面并检查那里的值:&lt;?php phpinfo(); ?&gt; @vsakos 我用 phpinfo() 检查了值,它说upload_max_filesize 设置为 2M。所以一直没有更新。我在更新这个值时仍然遇到困难,因为我现在尝试重新启动 Apache Webserver,但不幸的是它没有改变任何东西。 @vsakos 我一定是在更新一个不同的 php.ini 文件。我去了 phpinfo() 页面上声明的 php.ini 文件目录并更新了upload_max_filesize,它成功了!感谢您的帮助! 【参考方案1】:

你必须重启你的网络服务器:

service apache restart #If you have Apache
service nginx restart #If you have NGINX

如果你正在运行 php-fpm:

service php-fpm restart

你有多个 php.ini 吗? 注意:

/etc/php/php-fpm
/etc/php/php-cli
/etc/php/php-cgi

在某些情况下,您还必须允许在您的网络服务器上上传更大的文件。

NGINX:

client_max_body_size 10000M;

【讨论】:

我重新启动了 Apache Web 服务器,但仍然收到“错误 1”。我似乎没有多个 php.ini 的。 我修改了错误的 php.ini 文件。重新启动 Web 服务器也一定是一个关键步骤。谢谢! 是的。当您使用“普通” php 而不是 php-fpm 时,您必须重新启动 apache,以便加载 php.ini 中的新设置。祝你好运【参考方案2】:

从客户端到服务器的 Jquery ajax 传输只是数据,而不是文件。如果你想使用 jquery ajax 传输文件,那么试试这个jquery extended library。我以前用过,效果很好。

【讨论】:

以上是关于即使更改了 php.ini 文件,文件也太大而无法上传到服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地读取和写入太大而无法放入内存的文件?

如何从我的CPanel访问php.ini?

php.ini - 路径错误?

linux 下zabbix 安装 php.ini 里也设置了,结果重启还是没有变化,如下图。

Swift 3.1:数组太大而无法初始化? (程序只是冻结)

尽管数据集不是很大,我的拟合模型太大而无法上传到github