Reputation: 38584
I create image upload code. This creates a directory first and then uploads images to it.
In the form, I upload 3 images.
My Code is:
$dir_path = 'assets/images/product_images/'.$model;
mkdir($dir_path, 0777);
$i = 1 ;
foreach ($image as $new_image)
{
$dir_path_up = 'assets/images/product_images/'.$model."/";
$filename = $_FILES["$new_image"]["name"];
$image_name = $dir_path_up .$filename . $i. ".jpg";
echo $image_name;
$i++;
}
die();
Result of echo
assets/images/product_images/255_2555/1.jpg
assets/images/product_images/255_2555/2.jpg
assets/images/product_images/255_2555/3.jpg
But that images are not getting uploaded into the directory. I echo the image name which I created. It's already been renamed. Then why are images not getting uploaded into the directory?
What is wrong with this??
Upvotes: 0
Views: 369
Reputation: 38584
This work fine with multiple image upload
<?php
$j = 0; // Variable for indexing uploaded image.
$target_path = 'assets/images/product_images/' . $last_id . '/'; // Declaring Path for uploaded images.
for ( $i = 0; $i < count($_FILES['image']['name']); $i++ )
{
// Loop to get individual element from the array
$validextensions = array("jpeg", "jpg", "png"); // Extensions which are allowed.
$ext = explode('.', basename($_FILES['image']['name'][$i])); // Explode file name from dot(.)
$file_extension = end($ext); // Store extensions in the variable.
$target_path = $target_path . md5(uniqid()) . "." . $ext[count($ext) - 1]; // Set the target path with a new name of image.
$j = $j + 1; // Increment the number of uploaded images according to the files in array.
if ( ($_FILES["image"]["size"][$i] < 100000000) // Approx. 100kb files can be uploaded.
&& in_array($file_extension, $validextensions)
)
{
move_uploaded_file($_FILES['image']['tmp_name'][$i], $target_path);
}
else
{
}
}
Update, you can use
foreach ($image as $new_image)
{
$dir_path_up = 'assets/images/product_images/'.$model."/";
$filename = $_FILES["$new_image"]["name"];
$image_name = $dir_path_up .$filename . $i. ".jpg";
if (move_uploaded_file($_FILES["$new_image"]["tmp_name"], $image_name))
{
echo "The file has been uploaded.";
}
else
{
echo "There was an error uploading the file.";
}
$i++;
}
Upvotes: 1
Reputation: 22532
Read manual from here CI image upload.
In codignator we use upload library to upload image .
you pass youe parameter according to your requirment
$config['upload_path'] = 'assets/images/product_images/'.$model."/";
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('Your View', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('Your View', $data);
}
Upvotes: 5
Reputation: 1239
When you upload a file with PHP it gets stored into a temporary folder. You can access this file in your script with $_FILES, but it is still in your temporary folder it will be deleted upon next request.
To keep your uploaded File, you need to move it to the desired location.
The function for this is called move_uploaded_file (API: http://php.net/manual/en/function.move-uploaded-file.php)
bool move_uploaded_file ( string $filename , string $destination )
In your case it would result in something like:
$dir_path = 'assets/images/product_images/'.$model;
mkdir($dir_path, 0777);
$i = 1 ;
foreach ($image as $new_image)
{
$dir_path_up = 'assets/images/product_images/'.$model."/";
$filename = $_FILES["$new_image"]["name"];
$tmp_name = $_FILES["$new_image"]["tmp_name"]
$image_name = $dir_path_up .$filename . $i. ".jpg";
move_uploaded_file($tmp_name, $image_name);
echo $image_name;
$i++;
}
die();
Upvotes: 3