【发布时间】:2020-09-16 14:42:24
【问题描述】:
在 LEMP(Linux CentOS、Nginx、MariaDB、PHP)服务器上,/etc/php.ini 文件有以下内容。
file_uploads = on
upload_tmp_dir = /tmp
Stage1.html 有如下标记,用于选择图片文件,并将图片发布到 Stage2.php。
<form action="Stage2.php" method="post" enctype="multipart/form-data">
<input type="file" name="upload">
<input type="submit">
</form>
Stage2.php 有以下内容。
<?php
$original_name = $_FILES["upload"]["name"];
$temporary_name = $_FILES["upload"]["tmp_name"];
$target = "/var/www/html/images/" . $original_name;
if(move_uploaded_file($temporary_name, $target)) {echo "Success";}
else{echo "Failed";}
?>
原始文件、临时文件和目标已正确设置。但是,返回 Failed。
将以下内容添加到Stage2.php返回0。引用PHP Manual,0表示“没有错误,文件上传成功。”
$_FILES["upload"]["error"];
将以下内容添加到 Stage2.php 不会显示任何错误。这让我怀疑 PHP 认为一切正常,也许问题出在 CentOS 或 Nginx 上。这是合乎逻辑的假设吗?
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
为了调试,在 CentOS 中,我将 /tmp 和 /var/www/html/images 的权限设置为 777(每个人都可以读取、写入、执行)。仍然没有返回错误。
【问题讨论】:
-
检查你的 max_upload_file_size
-
upload_max_filesize为 2 MB,上传的文件为 40 KB。 -
if(move_uploaded_file($original_name , $target)) 试试这个并检查@JeremyCanfield
-
if(move_uploaded_file($original_name, $target))也会产生 Failed,因为move_uploaded_file函数将临时文件移动到目标目录。