我对PHP比较陌生,我正在开发一个网站,该网站应该接受用户上传pdf,doc或docx文件的功能。我能够在线查找代码,看看html表单是什么样的(不是我的代码,因为我只是想看看上传的功能是否正常工作)以及处理上传的代码。我将把代码放在下面,我认为代码本身没有任何问题,但可能与我上传文件的目录的权限有关。 注意:问题可能太长,请跳到最后查看明确的问题并查看到目前为止我尝试过的内容)
以下是表单的HTML(sample.php):
<!DOCTYPE html>
<html>
<body>
<form action="docs.php" method="post" enctype="multipart/form-data">
Select document to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Document" name="submit">
</form>
</body>
</html>
以下是用于将文件上传到指定目录的PHP代码(docs.php):
<?php
$target_dir = "../../UPLOADS/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$documentFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = filesize($_FILES["fileToUpload"]["tmp_name"]);
if($check > 0) {
echo "File is a document";
$uploadOk = 1;
} else {
echo "File is not a document.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 100000000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($documentFileType != "pdf" && $documentFileType != "doc" &&
$documentFileType != "docx") {
echo "Sorry, only PDF, DOC, & DOCX files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file))
{
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has
been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
因此,通过上面的代码,我成功地将文件上传到PHP代码中指定的路径(“../../UPLOADS/”)。但是,如果我尝试更改此路径,那么我在网页上输出的所有内容都是“文件是文档存档,上传文件时出错”。
现在,我给出的路径而不是“../../UPLOADS/”只是“test /”。我在我的网页所在的目录中创建了另一个文件夹,并将其命名为“test”
我是一名大学生,因此我在学校的AFS服务器下使用我的Linux帐户。在我进入我的帐户后,我必须进入我的public_html目录。一旦我在那里,它包含:
UPLOADS/
resport/
download/
目录“resport”包含我的网页所在的子目录,所以如果我进入resport,我会看到:
login/
student/
目录“student”包含子目录“UPLOADS”以及其他网页,所以如果我进入学生,我会看到:
sample.php
docs.php
test/
问题(清晰简单): 我希望它可以将文件上传到“resport”目录中的测试而不是“public_html”目录中的UPLOADS。我能够将文件上传到“public_html / UPLOADS”(相对于sample.php和docs.php所在的路径是“../../UPLOADS/”),但我需要将文件上传到“public_html / resport /” student / test“(相对于sample.php和docs.php为”test /“的路径)
我尝试了什么: 我已经检查了 UPLOADS 目录的权限,它是drwxrwxrwx,所以我也为测试目录设置了相同的权限,并给它一个去,但没有任何改变。我仍然看到“文件是一个文件抱歉,上传文件时出错”。我还尝试将“测试”重命名为“ UPLOADS ”并再次更改权限,但仍然没有。我不确定问题是什么。非常感谢任何帮助,谢谢!
更新 放一个完整的路径来测试/而不是相对的路径。像这样:
/afs/univ/u/c/r/ucid/public_html/resport/student/test/
但仍然没有运气 而不是回应
echo "Sorry, there was an error uploading your file.";
我尝试将其更改为:
echo " Not uploaded because of error #".$_FILES["file"]["error"];
但我现在得到的只有:
"File is a document Not uploaded because of error #"
之后没有号码
.$_FILES["file"]["error"]
答案 0 :(得分:0)
更改:$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
收件人:$target_file = $target_dir . $_FILES["fileToUpload"]["name"];
basename()
命令更改目录以放置文件。
确保设置目录名后的 / 。