我试图允许我的网站将文件上传到服务器。到目前为止,这是我的代码:
form_upload.html
<html>
<body>
<form action="file_upload.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
file_upload.php
<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
} else {
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists("uploads/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
} else {
if(!move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"])){
echo "Did not store file.";
}else{
echo "Stored in: " . "uploads/" . $_FILES["file"]["name"];
}
}
}
} else {
echo "Invalid file";
}
?>
一切正常,但当我去服务器上查看时,我在/uploads
文件夹中看不到该文件。提交表单时,php文件回显:
上传:square-big-button.jpg 输入:image / jpeg 大小:9.875 kB 临时文件:/ tmp / phpyhjzZF 存储在:uploads / square-big-button.jpg
当然,Temp file
总是不同的。
发生了什么事?为什么说它是在没有上传的时候上传的?
解决方案:
我只需添加一个../uploads/
作为目录。
答案 0 :(得分:3)
尝试在您要保存的位置提供正确的路径。还检查dir是否有可写权限
如果你上传目录是一个上升级别我们../
向上移动等等
move_uploaded_file($_FILES["file"]["tmp_name"], "../uploads/" . $_FILES["file"]["name"]);
如果上传dir在您的服务器root上,请尝试
move_uploaded_file($_FILES["file"]["tmp_name"], "./uploads/" . $_FILES["file"]["name"]);
答案 1 :(得分:2)
既然你说你上传的文件在root中,并且你确定它,那么这应该可行。
move_uploaded_file($_FILES["file"]["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/uploads/" . $_FILES["file"]["name"]);
现在在我的localhost上测试它,它已将文件移动到位于我的web目录根目录的上传目录。
答案 2 :(得分:1)
这里的工作正常,也许您已将uploads目录放在错误的位置。 uploads目录应该与文件位于同一目录中,或者您应该使用正确的相对路径作为../uploads。 你能告诉我们每个文件/文件夹的路径吗?
此外,这条线似乎是错误的。
if (file_exists("upload/" . $_FILES["file"]["name"])) {
应该验证上传目录。