又回到另一个新手问题。我一直在开发一个文档,允许用户将自己的头像上传到我正在创建的博客中,以学习一些 PHP。我已经在这个文档上工作了两天,我花了六个多小时的搜索和尝试不同的东西来修复它,但我就是无法让它通过这个:
if(move_uploaded_file($_FILES['avatar']['name'], $target)){
//good message
echo "Your avatar was successfully uploaded.";
}else{
//bad message
echo "Your avatar couldnt be uploaded, please contact an admin.";
}
经过大约一个小时的尝试,它确实最终发送了"坏消息",但我不太确定为什么它会给我"坏消息",对我来说一切看起来都很好。
完整代码:
<?php
session_start();
if (isset($_SESSION['username'])){
if (isset($_POST['submit']) && isset($_FILES['avatar'])) {
$con = mysql_connect("localhost","root","");
if (!$con){
die('Could not connect: ' . mysql_error());
}
mysql_select_db('webserver', $con);
$username = $_SESSION['username'];
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$id = $row['id'];
//Directory to save stuff
$target = "images/useravatars";
$target = $target . basename($_FILES['avatar']['tmp_name']);
//Save the avatar
if(move_uploaded_file($_FILES['avatar']['name'], $target)){
//good message
echo "Your avatar was successfully uploaded.";
}else{
//bad message
echo "Your avatar couldnt be uploaded, please contact an admin.";
}
}else{
echo "38";
}
}
?>
<form enctype="multipart/form-data" action='uploadavatar.php' method='POST'>
<table>
<tr>
<td>
Upload an avatar:
</td>
</tr>
<td>
<input type='file' name='avatar'>
</td>
</tr>
</table>
<p>
<input enctype='multipart/form-data' type='submit' name='submit' value='Submit'>
</p>
</form>
顺便说一句,我很抱歉那里可能有一堆无用的代码,我花了很多时间让它足够远,给我一个错误。
上传文件存储在磁盘上的位置是 $_FILES['avatar']['tmp_name']
。你想移动它,而不是$_FILES['avatar']['name']
.
这里的问题是,你以错误的方式使用move_uploaded_file()
。第一个参数需要一个带有扩展名的文件名,没有基本路径,例如 mypic.jpg
.第二个需要应上传该文件的目标。
至于你的代码,
替换这个,
//Directory to save stuff
$target = "images/useravatars";
$target = $target . basename($_FILES['avatar']['tmp_name']);
//Save the avatar
if(move_uploaded_file($_FILES['avatar']['temp'], $target)){
跟
// I'd assume that dirname(__FILE__) refers to your root
//Directory to save stuff
$destination = sprintf('%s/images/useravatars/%s', dirname(__FILE__), $_FILES['avatar']['name']);
//Save the avatar
if (move_uploaded_file($_FILES['avatar']['tmp_name'], $destination)) {