简体   繁体   English

PHP多图像上传器

[英]php multiple image uploader

For the sake of God can someone help me make the below script to upload multiple images(5). 为了上帝的缘故,有人可以帮助我制作以下脚本来上传多个图像(5)。 I'm stuck at this for days with no luck. 我被这个问题困扰了好几天。 I have no idea how to make it upload five images. 我不知道如何使其上传五张图片。 Pleeeease help me. 请帮助我。 I tried putting five input file fields and giving them a name like name="file[]" but that doesn't seem to be working. 我尝试放置五个输入文件字段,并给它们一个类似name="file[]"但这似乎不起作用。 While I upload a photo I see a error saying please select a photo even if there is a file. 上传照片时,我看到一条错误消息,即使有文件也请选择一张照片。

<?php

function uploadFile ($file_field = null,  $check_image = false, $random_name = false) {

//Config Section    
//Set file upload path
$path = 'Productpic/'; //with trailing slash
//Set max file size in bytes
$max_size = 2097152;
//Set default file extension whitelist
$whitelist_ext = array('jpg','png','gif', 'JPG');
//Set default file type whitelist
$whitelist_type = array('image/jpeg', 'image/png','image/gif','image/JPG');

//The Validation
// Create an array to hold any output
$out = array('error'=>null);

if (!$file_field) {
$out['error'][] = "Please specify a valid form field name";           
}

if (!$path) {
$out['error'][] = "Please specify a valid upload path";               
}

if (count($out['error'])>0) {
return $out;
}

//Make sure that there is a file
if((!empty($_FILES[$file_field])) && ($_FILES[$file_field]['error'] == 0)) {

// Get filename
$file_info = pathinfo($_FILES[$file_field]['name']);
$name = $file_info['filename'];
$ext = $file_info['extension'];

//Check file has the right extension           
if (!in_array($ext, $whitelist_ext)) {
  $out['error'][] = "<span class='isa_error2'>Invalid file Extension</span>";
}

//Check that the file is of the right type
if (!in_array($_FILES[$file_field]["type"], $whitelist_type)) {
  $out['error'][] = "<span class='isa_error2'>Invalid file Type</span>";
}

//Check that the file is not too big
if ($_FILES[$file_field]["size"] > $max_size) {
    $out['error'][] = "<span class='isa_error2'>File is too big</span>";
}

//If $check image is set as true
if ($check_image) {
  if (!getimagesize($_FILES[$file_field]['tmp_name'])) {
    $out['error'][] = "<span class='isa_error2'>The file you trying to upload is not an Image, we only accept Images</span>";
}
}

//Create full filename including path
if ($random_name) {

// Generate random filename
  $tmp = str_replace(array('.',' '), array('',''), microtime());

if (!$tmp || $tmp == '') {
$out['error'][] = "File must have a name";
}     
$newname = $tmp.'.'.$ext;                                
} else {
    $newname = $name.'.'.$ext;
}

//Check if file already exists on server
if (file_exists($path.$newname)) {
  $out['error'][] = "<span class='isa_error2'>The image you trying to upload already exists, please upload only once</span>";
}

if (count($out['error'])>0) {
  //The file has not correctly validated
  return $out;
} 

if (move_uploaded_file($_FILES[$file_field]['tmp_name'], $path.$newname)) {
  //Success

  $out['filepath'] = $path;
  $out['filename'] = $newname;
  return $out;
} else {
  $out['error'][] = "Server Error!";
}

} else {
$out['error'][] = "<span class='isa_error2'>Please select a photo</span>";
return $out;
}      
}
?>



<?php

if (isset($_POST['submit'])) {

$file = uploadFile('file', true, false);
if (!is_array($file['error'])) {
$message = '';
$sub=1;
$message = "<span class='isa_success'>File uploaded successfully</span>";

echo $message;
} 

}
?>

<html>
<head>
<style type="text/css" media="screen">
.isa_error2 {
border: 1px solid;

width:15%;
margin: 0px 0px;
padding:3px 20px 2px 50px;
background-repeat: no-repeat;
background-position: 10px center;-moz-border-radius:.5em;
-webkit-border-radius:.5em;
border-radius:.5em;

}

.isa_error2 {
color: #D8000C;
background-color: #FFBABA;
background-image: url('models/languages/error.png');
background-size: 28px 28px;
}
</style>
<meta name="viewport" content="width=device-width" />   
<link rel="stylesheet" href="horizontalmenu.css" type="text/css" media="screen" /><!-- Menu -->
</head>
<body id="wide">
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<?php
ini_set( "display_errors", 0);
if($sub==0)
{
?><br><br>
<input name="file[]" type="file" size="20" multiple="true" />//this was what did
    <input name="file[]" type="file" size="20" multiple="true" />
    <input name="file[]" type="file" size="20" multiple="true" />
    <input name="file[]" type="file" size="20" multiple="true" />
    <input name="file[]" type="file" size="20" multiple="true" />
<span><?php

if (isset($_POST['submit'])) {
ini_set( "display_errors", 0);
$file = uploadFile('file', true, false);
if (is_array($file['error'])) {
$message = '';
foreach ($file['error'] as $msg) {
  $message = $msg;    
}
} 
echo $message;
}
?></span> <br><br><br>
<input name="submit" type="submit" value="Upload" />
<?php
}
?>
</form>

Somebody else might read this, so I'll explain about setting the input's name to name="file[]" . 可能有人会读到它,所以我将解释有关将输入名称设置为name="file[]"

This means that you are creating an array containing the selected file names. 这意味着您正在创建一个包含所选文件名的数组。 For later on uploading them or saving the information to the database you have to loop trough the array: 为了以后上传它们或将信息保存到数据库,您必须遍历数组:

foreach(file[] as $key){}

Another solution, messier code in my opinion, is giving each file input a different name like the person who asked the question solved his problem. 另一个解决方案,我认为是更混乱的代码,是为每个文件输入一个不同的名称,就像问问题的人解决了他的问题一样。

Please correct me if I'm wrong. 如果我错了,请纠正我。

Hmmm I solved the problem my self.....I gave the input field different name like the below and it was simple. 嗯,我自己解决了这个问题.....我给输入字段起了如下不同的名称,这很简单。 This shouldn't have taken me days! 这不应该花我几天的时间!

<input name="file" type="file" size="20" multiple="true" />
<input name="file2" type="file" size="20" multiple="true" />
<span><?php

if (isset($_POST['submit'])) {
ini_set( "display_errors", 0);
$file = uploadFile('file', true, false);
$file = uploadFile('file2', true, false);//added this line. 
if (is_array($file['error'])) {
$message = '';
foreach ($file['error'] as $msg) {
  $message = $msg;    
}
} 
echo $message;
}

?>

and finally for the success message part 最后是成功消息部分

<?php

if (isset($_POST['submit'])) {

$file = uploadFile('file', true, false);
$file = uploadFile('file2', true, false);
if (!is_array($file['error'])) {
$message = '';
$sub=1;
$message = "<span class='isa_success'>File uploaded successfully</span>";

echo $message;
} 

}
?>

I have created a solution for multiple images uploaded using a single textbox in php. 我为使用php中的单个文本框上传的多个图像创建了解决方案。

<form method="post" action="" enctype="multipart/form-data" id="frmImgUpload">
  <input name="fileImage[]" type="file" multiple="true" />
  <input name="btnSubmit" type="submit" value="Upload" />
</form>

<?php
  $i=1;
  if ($_POST)
  {
    foreach($_FILES['fileImage']['name'] as $key => $i)
    {
      $file_name = $_FILES['fileImage']['name'][$key];
      $file_size =$_FILES['fileImage']['size'][$key];
      $file_tmp =$_FILES['fileImage']['tmp_name'][$key];
      $file_type=$_FILES['fileImage']['type'][$key];
      move_uploaded_file($file_tmp,"uploaded_img/".$file_name);
      $i++;
    }
  }
?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM