PHP 文件上传创建目录
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12700013/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
PHP File Upload Creating Directory
提问by Charlie Yabben
So I have a file upload portion on my website where the user can upload any doc or docx folder. Heres my html code:
所以我在我的网站上有一个文件上传部分,用户可以在其中上传任何 doc 或 docx 文件夹。这是我的 html 代码:
<form action="upload_file.php" method="post" enctype="multipart/form-data">
Select a file: <input type="file" name="upload">
<input type="submit">
And here's the code for upload_file.php:
这是upload_file.php的代码:
<?php
session_start();
$allowedExts = array("doc", "docx");
$extension = end(explode(".", $_FILES["upload"]["name"]));
if (($_FILES["upload"]["size"] < 200000)
&& in_array($extension, $allowedExts)) {
if ($_FILES["upload"]["error"] > 0)
{
echo "Return Code: " . $_FILES["upload"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["upload"]["name"] . "<br />";
echo "Type: " . $_FILES["upload"]["type"] . "<br />";
echo "Size: " . ($_FILES["upload"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["upload"]["tmp_name"] . "<br />";
if (file_exists("Proposals/".$_SESSION["FirstName"] ."/" . $_FILES["upload"]["name"]))
{
echo $_FILES["upload"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["upload"]["tmp_name"],
"Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]);
echo "Stored in: " . "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"];
}
}
} else {
echo "Invalid file";
}
?>
But this won't upload anything even though it replied back with with a successful message. I'm thinking it's because it won't let me create a directory. Is there anything wrong with the above code or do I have to add some more code to make it create a directory. Here my folder structure if it helps at all:
但这不会上传任何内容,即使它回复了一条成功的消息。我认为这是因为它不会让我创建目录。上面的代码有什么问题吗,还是我必须添加更多代码才能创建目录。如果有帮助的话,这里是我的文件夹结构:


回答by lix
You have to create the directory you're trying to move the file to, it won't automatically get created by move_uploaded_file.
您必须创建您尝试将文件移动到的目录,它不会由 move_uploaded_file 自动创建。
Use mkdir(), http://php.net/mkdir, to create the directory and then move the file.
使用 mkdir(), http://php.net/mkdir创建目录,然后移动文件。
Here's an alternative ending to your script, which should do
这是脚本的另一种结尾,应该可以
// Create directory if it does not exist
if(!is_dir("Proposals/". $_SESSION["FirstName"] ."/")) {
mkdir("Proposals/". $_SESSION["FirstName"] ."/");
}
// Move the uploaded file
move_uploaded_file($_FILES["upload"]["tmp_name"], "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]);
// Output location
echo "Stored in: " . "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"];
回答by janenz00
You need to check if the directory exists, and if not, create it.
您需要检查该目录是否存在,如果不存在,则创建它。
if (!file_exists("Proposals/". $_SESSION["FirstName"])) {
mkdir("Proposals/". $_SESSION["FirstName"]);
}
回答by Vikrant Devda
You are uploading file to directory that does not exist so you need to create it first, your upload_file.php should be like
您正在将文件上传到不存在的目录,因此您需要先创建它,您的 upload_file.php 应该像
<?php
session_start();
$allowedExts = array("doc", "docx");
$extension = end(explode(".", $_FILES["upload"]["name"]));
if (($_FILES["upload"]["size"] < 200000)
&& in_array($extension, $allowedExts)) {
if ($_FILES["upload"]["error"] > 0)
{
echo "Return Code: " . $_FILES["upload"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["upload"]["name"] . "<br />";
echo "Type: " . $_FILES["upload"]["type"] . "<br />";
echo "Size: " . ($_FILES["upload"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["upload"]["tmp_name"] . "<br />";
if (file_exists("Proposals/".$_SESSION["FirstName"] ."/" . $_FILES["upload"]["name"]))
{
echo $_FILES["upload"]["name"] . " already exists. ";
}
else
{
// Check if directory exists if not create it
if(!is_dir("Proposals/". $_SESSION["FirstName"] ."/")) {
mkdir("Proposals/". $_SESSION["FirstName"] ."/");
}
move_uploaded_file($_FILES["upload"]["tmp_name"],
"Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]);
echo "Stored in: " . "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"];
}
}
} else {
echo "Invalid file";
}
?>

