Php 创建目录并使用单个浏览按钮上载多个文件时
我试图用一个浏览按钮上传多个文件,但我没能成功。我尝试了类似问题中提到的建议。下面的代码是只上传一个文件,我需要上传多个文件与相同的浏览按钮 知道代码中有什么错误吗Php 创建目录并使用单个浏览按钮上载多个文件时,php,html,Php,Html,我试图用一个浏览按钮上传多个文件,但我没能成功。我尝试了类似问题中提到的建议。下面的代码是只上传一个文件,我需要上传多个文件与相同的浏览按钮 知道代码中有什么错误吗 <html> <body> <form enctype="multipart/form-data" action="uploadj.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /&
<html>
<body>
<form enctype="multipart/form-data" action="uploadj.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile[]" type="file" multiple /><br />
<p>
<input type="submit" name="button" id="button" value="Submit">
</p>
</form>
</html>
</body>
Php Code :
<?php
$get_folder = $_POST['textfield'];
mkdir ("/opt/lampp/htdocs/test_upload/" . $get_folder, 0777);
echo "Analysis Directory created successfully";
$target_path = "$get_folder/";
for($i=0;$i < count($_FILES['uploadedfile']['name']);$i++){
$target_path = $target_path . basename( $_FILES['uploadedfile']['name'][$i]);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path))
{
echo "The file has been uploaded";
} else
{
echo "There was an error uploading the file, please try again!";
}
}
?>
选择要上载的文件:
Php代码:
谢谢 您的一个错误是在定义它之前使用了
$target\u path
。我指的是:
$target_path = $target_path . basename( $_FILES['uploadedfile'][0]['name']);
如果先前未定义$target\u path,则不能在右侧使用该路径。除此之外,0位于错误的位置。它应该是$\u文件['uploadedfile']['name'][0]
您可能存在的其他错误:
php.ini中的文件上载大小不够大
php.ini中的最大输入大小不够高
Web服务器用户(通常是www数据或apache)无法写入文件夹
更新
另一个错误是,您只是在循环中添加了$target\u path
,这使得第二次迭代尝试将上一次上载用作文件夹,这是不允许的。例如,如果我上传了foo.png和bar.jpg,第二个目标路径将是/opt/lampp/htdocs/test\u upload/foo.png/bar.png
,这不是有效路径
我会在你的循环中通过改变这一行来解决这个问题:
$target_path = $target_path . basename( $_FILES['uploadedfile']['name'][$i]);
致:
和变化:
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path))
致:
更新2
以下代码适用于我的服务器(Ubuntu服务器,上载文件夹属于www数据,权限为755):
选择要上载的文件:
这是错误的:$\u文件['uploadedfile'][0]['name']
您应该执行以下操作:$\u文件['uploadedfile']['name'][0]
我已经更新了这段代码以支持多次上传。让我知道这是否有效
for($i=0;$i<count($_FILES['uploadedfile']['tmp_name']);$i++){
$target_path = ""; //to clear the values on each loop//
$target_path = basename( $_FILES['uploadedfile']['name'][$i]);
move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path);
}
对于($i=0;$i形式:
选择要上载的文件:
PHP代码:
if(isset($_POST['button'])){
$upload_folder = "./textfiles/";
for($i=0;$i<count($_FILES['uploadedfile']['tmp_name']);$i++){
$target_path = ""; //to clear the values on each loop//
$target_path = $upload_folder.basename( $_FILES['uploadedfile']['name'][$i]);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path))
{
//do your redirect
}else {
//do your redirect
}
}
}
if(设置($\u POST['button'])){
$upload_folder=“./textfiles/”;
for($i=0;$i感谢您的回复!我尝试了您的建议,但仅上传了一个文件,而不是多个。您知道原因是什么吗?我不确定,但您可以这样做:code
($i=0;$i在这部分我已经尝试过了,但是只有一个文件正在上传,我需要上传多个文件。你能用你目前为止所做的更新你的代码吗?移动上传的文件($上传文件['uploadedfile']['tmp\U name'][$i],$target\U路径);如果您将它放在该循环中,它应该上载多个文件,因为$i在每次迭代中都在更改。下面是修改后的php代码:我以前定义了target.path。但问题是它只上载一个文件,而不是多个文件。@kabir这是因为您使用循环来访问每个项目。@Travis您检查过了吗我修改过的代码中我使用了循环。但是它只上传了一个文件-@kabir,你在循环中使用了$target\u path
。因为你在上一次迭代中使用了它,所以第二个路径类似于“/opt/lampp/htdocs/test\u upload/foo.png/bar.jpg”,因为foo.png是一个文件而不是一个文件夹,所以它不能移动将其发送到该位置。我将更新我的答案。我正在尝试上载文本文件。实际上,我正在尝试创建一个目录,然后在其中上载文件。因此,对于一个文件,它可以完美地工作,但对于多个文件,它不能工作。我很欣赏您的帮助。非常感谢您的耐心。但是当我单击“浏览”按钮时(例如,当我第一次单击“浏览”按钮时,du.txt被加载;当我第二次单击“浏览”按钮时,Document.txt被加载。但当我单击“提交”按钮时,只提交最后一个文件,即Document.txt,我需要这两个文件)。这就是问题所在。非常感谢。啊,这可能是问题所在。请尝试这样做:当您单击“浏览”按钮时,按ctrl键,然后单击需要上载的多个文件。
<?php if($_SERVER['REQUEST_METHOD'] != 'POST'):?>
<html>
<body>
<form enctype="multipart/form-data" action="index2.php" method="POST">
Choose a file to upload: <input name="uploadedfile[]" type="file" multiple /><br />
<p>
<input type="submit" name="button" id="button" value="Submit">
</p>
</form>
</html>
</body>
<?php else: ?>
<?php
$target_path = "./videos/";
for($i=0;$i < count($_FILES['uploadedfile']['name']);$i++){
$target_file = $target_path . basename( $_FILES['uploadedfile']['name'][$i]);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_file))
{
echo "The file has been uploaded";
} else
{
echo "There was an error uploading the file, please try again!";
}
}
?>
<?php endif; ?>
for($i=0;$i<count($_FILES['uploadedfile']['tmp_name']);$i++){
$target_path = ""; //to clear the values on each loop//
$target_path = basename( $_FILES['uploadedfile']['name'][$i]);
move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path);
}
<form enctype="multipart/form-data" action="" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile[]" type="file" multiple /><br />
<p>
<input type="submit" name="button" id="button" value="Submit">
</p>
</form>
if(isset($_POST['button'])){
$upload_folder = "./textfiles/";
for($i=0;$i<count($_FILES['uploadedfile']['tmp_name']);$i++){
$target_path = ""; //to clear the values on each loop//
$target_path = $upload_folder.basename( $_FILES['uploadedfile']['name'][$i]);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path))
{
//do your redirect
}else {
//do your redirect
}
}
}