Php文件上传功能工作正常,仍然回显else子句中的错误


Php file upload function works, still echoes error in else clause

php 中的新功能,我正在尝试在非常基本的级别尝试文件上传机制(而不是尝试测试文件大小等(我写了一个文件上传函数,用if-else测试它。函数工作(成功上传文件(',但仍回显 else 子句中的错误字符串。当然我错过了一些东西,但找不到什么。代码是这样的:

<?php
function fileupload() {
    $path = "img/";`enter code here`
    $tmp = $_FILES['upload']['tmp_name'];
    $name = $_FILES['upload']['name'];
    move_uploaded_file($tmp,$path.$name);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>UNTITLED</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="upload">
<input type="submit" name="submit" value="submit">
</form>
<?php
if(isset($_POST['submit'])) {
    if(fileupload()) {echo "upload ok";} else {echo "error";}
} else { echo "no submit"; }
?>
</body>
</html>

fileupload()函数不返回任何布尔值,您必须检查move_uploaded_file($tmp,$path.$name);是否成功而不是它自己的函数...

function fileupload() {
    $path = "img/";`enter code here`
    $tmp = $_FILES['upload']['tmp_name'];
    $name = $_FILES['upload']['name'];
    if (move_uploaded_file($tmp,$path.$name)) {
     return true;
    } else {
     return false;
    }
}

这是因为fileupload()函数不返回任何内容,使if(fileupload())条件失败,从而转到else块。move_uploaded_file()函数在成功时返回true,否则false返回。您可以在函数上使用它来返回成功状态。

<?php 
function fileupload() {
    $path = "img/";`enter code here`
    $tmp = $_FILES['upload']['tmp_name'];
    $name = $_FILES['upload']['name'];
    // Return the success status
    return move_uploaded_file($tmp,$path.$name);
}
?>

要修复您遇到的确切错误,您应该查看我的评论,了解为什么它不起作用fileupload()返回null。要获得通知move_uploaded_file是否有效的返回,您应该将函数更改为以下内容:

function fileupload() {
    $path = "img/";`enter code here`
    $tmp = $_FILES['upload']['tmp_name'];
    $name = $_FILES['upload']['name'];
    return move_uploaded_file($tmp,$path.$name); //This is a bool type return
}

但是,这可能不是fileupload()失败的唯一地方,或者文件上传通常失败的地方。在尝试在服务器上移动甚至可能不存在的.tmp文件之前,您应该先调试整个文件上传过程。您可以通过访问 $_POST['filename']['error'] 来调试此内置 PHP 错误以进行文件上传,该 存储文件上传中的所有错误。

http://php.net/manual/en/features.file-upload.errors.php