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