即使更改了 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_filesize
和 post_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 页面并检查那里的值:<?php phpinfo(); ?>
@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 文件,文件也太大而无法上传到服务器的主要内容,如果未能解决你的问题,请参考以下文章
linux 下zabbix 安装 php.ini 里也设置了,结果重启还是没有变化,如下图。