gpt4 book ai didi

php - 多张图片上传不移动目录中的文件

转载 作者:可可西里 更新时间:2023-11-01 07:40:48 24 4
gpt4 key购买 nike

尝试构建一个多图像上传,从我的表单中获取 3 个提交的文件并将它们存储在我的服务器上。

我有以下内容,但无论我收到什么“无效文件”,任何人都可以看到我哪里出错了吗?

for($i = 0; $i < 3; $i++) {
$aFile = $_FILES['file'][$i];




$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $aFile["file"]["name"]));
if ((($aFile["file"]["type"] == "image/gif")
|| ($aFile["file"]["type"] == "image/jpeg")
|| ($aFile["file"]["type"] == "image/png")
|| ($aFile["file"]["type"] == "image/pjpeg"))
&& ($aFile["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
{
if ($aFile["file"]["error"] > 0)
{
echo "Return Code: " .$aFile["file"]["error"] . "<br>";
}
else
{


if (file_exists("upload/" . $aFile["file"]["name"]))
{
echo $aFile["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($aFile['tmp_name'],
"upload/" . date('U')."-".$aFile["file"]["name"]); // add a unique string to the uploaded filename so that it is unique.
echo "Image Uploaded Successfully";
}
}
}
else
{
echo "Invalid file";

}

}

** HTML **

<li>
<label for="picture_1">picture 1 : </label>
<input type="file" name="file">
</li>
<li>
<label for="picture_2">picture 2 : </label>
<input type="file" name="picture_2">
</li>
<li>
<label for="picture_3">picture 3 : </label>
<input type="file" name="picture_3">
</li>

最佳答案

我猜,主要问题是您的 HTML 元素名称和 $_FILES 中使用的名称无法匹配,即您使用了第一个文件输入名称"file"。它应该是“picture_1”。并且您在文件处理部分使用了索引 0 到 2。匹配“picture_1”、“picture_2”和“picture_3”应该是1到3。

请注意,您的表单应包含 enctype="multipart/form-data" ,否则您的文件将不会被上传。这是正确的:

有两种实现方法:
(1)分别命名输入的文件如picture_1、picture_2等
(2) 将文件输入命名为一个组,例如 file[] .

方法 1:分别命名文件输入

HTML

<form method="post" enctype="multipart/form-data">
<li>
<label for="picture_1">picture 1 : </label>
<input type="file" name="picture_1" id="picture_1" />
</li>
<li>
<label for="picture_2">picture 2 : </label>
<input type="file" name="picture_2" id="picture_2" />
</li>
<li>
<label for="picture_3">picture 3 : </label>
<input type="file" name="picture_3" id="picture_3" />
</li>
<input type="submit" name="submit" value="Upload" />
</form>

PHP

if(sizeof($_FILES)){ 
for($i = 1; $i <= 3; $i++) {
$aFile = $_FILES['picture_'.$i];
if(empty($aFile['tmp_name'])) continue; # skip for empty elements

$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $aFile["name"]));
if ((($aFile["type"] == "image/gif")
|| ($aFile["type"] == "image/jpeg")
|| ($aFile["type"] == "image/png")
|| ($aFile["type"] == "image/pjpeg"))
&& ($aFile["size"] < 20000)
&& in_array(strtolower($extension), $allowedExts))
{
if ($aFile["error"] > 0)
{
echo "Return Code: " .$aFile["error"] . "<br>";
}
else
{
if (file_exists("upload/" . $aFile["name"]))
{
echo $aFile["name"] . " already exists. ";
}
else
{
move_uploaded_file($aFile['tmp_name'],
"upload/" . date('U')."-".$aFile["name"]);
echo "Image Uploaded Successfully";
}
}
}
else
{
echo "Invalid file";
}
}
}

方法 2:将文件输入命名为一个组

HTML

<form method="post" enctype="multipart/form-data">
<li>
<label for="picture_1">picture 1 : </label>
<input type="file" name="file[]" id="picture_1" />
</li>
<li>
<label for="picture_2">picture 2 : </label>
<input type="file" name="file[]" id="picture_2" />
</li>
<li>
<label for="picture_3">picture 3 : </label>
<input type="file" name="file[]" id="picture_3" />
</li>
<input type="submit" name="submit" value="Upload" />
</form>

PHP

if(sizeof($_FILES)){        
for($i = 0; $i < 3; $i++) {
$name = $_FILES['file']['name'][$i];
$type = $_FILES['file']['type'][$i];
$tmp_name = $_FILES['file']['tmp_name'][$i];
$error = $_FILES['file']['error'][$i];
$size = $_FILES['file']['size'][$i];

if(empty($name)) continue; # skip for empty element

$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $name));
if (( ($type == "image/gif")
|| ($type == "image/jpeg")
|| ($type == "image/png")
|| ($type == "image/pjpeg"))
&& $size < 20000
&& in_array(strtolower($extension), $allowedExts) )
{
if ($error > 0)
{
echo "Return Code: " .$error . "<br>";
}
else
{
if (file_exists("upload/" . $name))
{
echo $aFile["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($tmp_name,
"upload/" . date('U')."-".$name);
echo "Image Uploaded Successfully";
}
}
}
else
{
echo "Invalid file";
}
}
}

学分:

  • 应使用小写检查文件扩展名 strtolower() .
  • 如果您使用 <label for="some_id"> , 你可以在各自的 HTML 元素中具有相同的 ID 属性,例如 <input
    type="file" name="..." id="some_id" />
    .点击标签时,会触发元素的onclick事件。

关于php - 多张图片上传不移动目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13937694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com