我在使用move_upload_file函数时遇到了一些问题。我总是收到“上传无效”消息。这里是php和html代码。你们能看到一些错误吗? 上传目录是可写的,如下图所示。
ls -l command output ls -l command output
这里的PHP
$tmp_dir = $_FILES['avatar']['tmp_name'];
$imgSize = $_FILES['avatar']['size'];
$upload_dir = '../../img/useravatar/';
$userpic = hash("md5", time() . $imgFile) . "." . $imgExt;
if ($imgSize < 5000000) {
if (!is_writable($upload_dir))
die("Permission denied when uploading file");
if (move_uploaded_file($tmp_dir, $upload_dir . $userpic)) {
//success
die("Success");
}else{
//fail
die("Upload not valid");
}
}else{
redirect("../mainPages/signup.php", "Too large");
}
这里的HTML
<form class="form-signup" enctype="multipart/form-data"action="../submitPages/newUser.php" method = "post">
<div class="form-group">
<label for="avatar">Choose avatar</label>
<input type="file" class="form-control-file" name="avatar" accept="image/*" id="avatar">
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign Up</button>
<form>
这里是var_dump($ _ FILES)
array (size=1)
'avatar' =>
array (size=5)
'name' => string 'IMG_20160725_134910.jpg' (length=23)
'type' => string '' (length=0)
'tmp_name' => string '' (length=0)
'error' => int 1
'size' => int 0
这里是ls -l命令
drwxrwxrwx 3 nicola nicola 4096 Jan 27 02:31 img
drwxrwxrwx 2 nicola nicola 4096 Jan 15 03:37 useravatar
编辑:它适用于.png img。
答案 0 :(得分:2)
您需要将enctype="multipart/form-data"
作为属性添加到<form>
才能正确发送图片(您必须在发送任何<input type="file">
项时添加此图片。)
所以你的<form>
应该是这样的:
<form enctype="multipart/form-data" method="POST" action="path/to/PHPfile.php">
<div class="form-group">
<label for="avatar">Choose avatar</label>
<input type="file" class="form-control-file" name="avatar" accept="image/*" id="avatar">
</div>
<input type="submit" value="submit" />
</form>
如果在设置了正确的编码类型后,它仍然无法正常工作,请尝试检查您指定的文件夹是否存在于该路径中(正确可能是./../img/useravatar/
而不是../../img/useravatar/
,等等。)
if(!file_exists("../../img/useravatar/")) echo 'no such directory';
修改强>
现在您发布了var_dump($_FILES)
错误很明显。您上传的图像超出了php.ini中定义的最大大小限制。
PHP返回适当的错误代码以及文件数组。错误代码可以在PHP文件上载期间创建的文件数组的错误段中找到。换句话说,错误可能在
中找到$_FILES['userfile']['error']
。UPLOAD_ERR_INI_SIZE 值: 1 ;上传的文件超出了php.ini中的
upload_max_filesize
指令。
此处有关错误代码的更多信息:php.net/file-upload-errors。
要在php.ini中正确设置值,您需要设置以下字段:
memory_limit = 32M // size of post_max_size or greater
// this is the size of the whole POST
post_max_size = 32M // should be greater than upload_max_filesize
// this is max size per uploaded file
upload_max_filesize = 24M
或者,这些设置也可以应用于.htaccess
:
# this should be added at the bottom of the .htaccess file
php_value memory_limit 32M
php_value post_max_size 32M
php_value upload_max_filesize 24M