codeigniter file upload failure - php

Can't upload file. $this->upload->do_upload('anonsphoto'); returns false. Can't find out why.
I added upload library to autoload this way: $autoload['libraries'] = array('upload');
Here is my view:
<?php
echo form_open_multipart('InterviewController/saveInterview');
$anons_data = array(
'name' => 'anons',
'id' => 'anons_area',
'value' => 'Введите анонс'
);
echo form_textarea($anons_data); ?>
<p>Картинка анонса</p>
<?php
echo form_upload('anonsphoto'); ?>
Here is controller which uploads file:
public function saveInterview() {
$config['upload_path'] = '/application/upload/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '10000';
$config['file_name'] = 'img_' . (string) time();
$this->upload->initialize($config);
$this->upload->do_upload('anonsphoto');
return;
}
Uploading file is 3 kb sized png file. I can't understand why do_upload is returning false. Any ideas?

File uploading class says all what you need. https://www.codeigniter.com/userguide3/libraries/file_uploading.html
This is a key:
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
// Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:
$this->upload->initialize($config);
"." (dot) means currently directory of upload path. So your app is not working because you are on root path not started with (dot).
Your folder should be with full permission (CHMOD) to 0755.
This:
$config['upload_path'] = './uploads/';
means: currently directory and to uploads directory
or:
$config['upload_path'] = $_SERVER['DOCUMENT_ROOT'].'/application/upload/';
means: your full document URI path and on directory '/application/upload/' as Can says.
Don't forget to put (dot) . between $_SERVER['DOCUMENT_ROOT'] and '/application/upload'.
Max size should be in KiB values: $config['max_size'] = '10000';
Hope this helps for understanding how it works.

I think your upload path is wrong. try using
$config['upload_path'] = $_SERVER['DOCUMENT_ROOT'].'/application/upload/';
and make sure that the directory is writable.

Related

Not getting the correct path after uploading a file

I am uploading a file on server and storing the its path in database in codeigniter, however i am after the upload i am not getting the correct path
The code that i have used is
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'doc|docx|pdf';
$config['max_size'] = 100;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$this->load->library('upload', $config);
$this->upload->do_upload('userfile');
$data = array('upload_data' => $this->upload->data());
$image_path = $data['upload_data']['full_path'];
I wish to save the path that i am getting in $image_path inside database.
Now the path that i get is something like this
/home/litehepn/public_html/project_name/uploads/xyz.docx
But the path that i want is
project_name/uploads/xyz.docx
Can anyone please tell how to get the correct path
This is the correct path. Because you have stored your files inside that home directory. But You can use chop($url,"/home/litehepn/public_html/"); for getting it.

how can I change allowed file type in codignetor which actually work?

Here is my controller code but only jpg and png file are uploaded I also changed it my process model.php also.
Is there any way to change it? And it doesn’t show any warning. You can check it from here but you need to register first...
public function saveTestimonial() {
$config['upload_path'] = './testimonial_photo/';
$config['allowed_types'] = 'gif|jpg|png|psd|zip|tif|ai|eps';
$config['max_size'] = '1024';
$config['max_width'] = '10240';
$config['max_height'] = '7680';
You should declare file upload like the below code. Since you are uploading images, docx, zip files you should not declare max_width and max_height. But you can change the max_size for the file.
$config['upload_path'] = 'testimonial_photo/';
$this->load->library('upload', $config);
$this->upload->initialize($config);
$this->upload->set_allowed_types('gif|jpg|png|jpeg|zip|pdf|doc|docx');
$this->upload->do_upload('filename_in_html_input')

Upload path on Codeigniter returns "the upload path doesn't seem to be valid"

Now i've tried most of the fixes that i've read, most of them mention about APPPATH, base_url(), real path and etc. but i really don't know why all of them didn't work, what worked for me is that i've used the actual path, not a url but the one with the C:\xampp\htdocs.. blah blah blah.. now i've read one thread that url and directory aren't the same thing.. and the upload_path accepts only directory path and i mean the actual location of the uploads folder on the server not the URL.. now my question is how come APPPATH don't work. as what i know it the actual directory path. but when i tried to display is it return only "../applicaiton/" what really is the best path to be used on the $config['upload_path'] on the upload.php specially when deploying it to an actual server it is really a nuisance finding the directory path of your upload folder, NOTE im not using the initialize() method i'm putting my configs on config/upload.php
EDITS:
i have this on a separate file... upload.php
<?php
$config['upload_path'] ='./uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '5000';
$config['max_width'] = '1600';
$config['max_height'] = '1200';
and this is my controller
if($this->upload->do_upload('image'))
{
//Did something here
}
else
{
//Did something for errors like display_errors()
}
and end result is it displays "the upload path doesn't seem to be valid"
and i've tried these line of code also
Trial 1:
$config['upload_path'] ='./uploads/';
Trial 2:
$config['upload_path'] ='uploads/';
Trial 3:
$config['upload_path'] ='/admin/assets/uploads/';
Trial 4:
$config['upload_path'] ='./admin/assets/uploads/';
Trial 5:
$config['upload_path'] ='admin/assets/uploads/';
the only thing that works is this
$config['upload_path'] ='C:\xampp\htdocs\practice\admin.abcgencon\admin\assets\uploads'';
and using the last part as a path is kinda messy so i've tried also APPPATHbut it doesn't work also it also display "../application"..
as #cryptic said i've posted this code snippet.
Question, you tried realpath and APPPATH seperately?
In Codeigniter APPPATH points to the application folder.
Example: (place your folder outside the application folder, just saying if you did not do that way) let's say the folder where we want to place the files called images.
So what you need to do is to combine realpath() and APPPATH
$image_path = realpath(APPPATH . '../images');
and pass it to your config
$config['upload_path'] = $image_path;
Create your file upload directory say uploads outside of application directory or at the root directory of CI, and set the upload path as follows:-
$config['upload_path'] = realpath(FCPATH.'uploads');
FCPATH: Path to the front controller where index.php exists (root of CI)
The above code runs on both server and local.
This is how file uploading is done in CI
$cat_image_name = $_FILES["cat_image"]["name"] ;
//file uploading params
$config['upload_path'] = './uploaded_files/categories';
$config['allowed_types'] = 'gif|jpg|png';
$config['file_name'] = $image_id."_ipad";
$config['remove_spaces'] = TRUE;
//Loading Library - File Uploading
$this->load->library('upload', $config);
//Upload the image(Ipad)
if (!empty($cat_image_name))
{
$this->upload->do_upload('cat_image');
$data = array('upload_data' => $this->upload->data());
$category_image_ipad = $data['upload_data']['file_name'];
$img_extension = $data['upload_data']['file_ext'];
}
try this
$config['upload_path'] = '../uploads/;
It's working very well for me
use it:
$config['upload_path'] = $_SERVER['DOCUMENT_ROOT']."/uploads/";
//$this->config->item('upload_path');
file upload requires a multipart form. For this, you must have included a form helper.
goto config folder, click autoload and find the $autoload['helper'] = array(); and put 'form' :
$autoload['helper'] = array('form');
for controller:
$config = array(
'upload_path' => "./assets/",
'allowed_types' => "gif|jpg|png|jpeg",
'overwrite' => TRUE,
'max_size' => "2048000",
'max_height' => "768",
'max_width' => "1024"
);
$this->load->library('upload', $config);
if(!$this->upload->do_upload()){
$errors = array('error' => $this->upload->display_errors());
$post_image = 'noimage.jpg';
} else {
$data = array('upload_data' => $this->upload->data());
$post_image = $_FILES['userfile']['name'];
}
$this->user_model->create_photo($post_image);
redirect('');
}
for model:
public function create_photo($post_image){
$data = array(
'pri' => $this->input->post('price'),
'descrip' => $this->input->post('title'),
'post_image' => $post_image
);
return $this->db->insert('table_name', $data);
}
Tested on Windows & Linux:
$path = realpath(".");
$path .= "/uploads/profile_images";
Here uploads is the uploads directory on root.
FCPATH: front controller path where index.php exists or root folder
APPPATH: application folder
Create a uploads folder under root folder:
$config['upload_path'] = realpath(FCPATH.'uploads');
Create a uploads folder under application folder:
$config['upload_path'] = realpath(APPPATH.'uploads');
In case: If you have created the uploads folder outside of root folder:
$config['upload_path'] = realpath($_SERVER['DOCUMENT_ROOT'].'/uploads');
It is very simple:
Just copy your all $config in new php file called upload.php and put it in cofig folder.
You path will work ok.
Here is upload.php file contents:
<?php
$config['upload_path'] = site_url().'uploads';
$config['allowed_types'] = 'gif|jpg|png|jpeg|html|pdf';
$config['max_size'] = 0;
$config['max_width'] = 0;
$config['max_height'] = 0;
$config['file_ext_tolower'] = TRUE;
$config['overwrite'] = FALSE;
$config['max_filename'] = 0;
$config['encrypt_name'] = TRUE;
$config['remove_spaces'] = TRUE;
$config['detect_mime'] = TRUE;
$config['mod_mime_fix'] = TRUE;
?>
But please keep $config data in upload_file controller as well.For example:
public function do_upload(){
$config['upload_path'] = 'uploads';
$config['allowed_types'] = 'gif|jpg|png|jpeg|html|pdf';
$config['max_size'] = 0;
$config['max_width'] = 0;
$config['max_height'] = 0;
$config['file_ext_tolower'] = TRUE;
$config['overwrite'] = FALSE;
$config['max_filename'] = 0;
$config['encrypt_name'] = TRUE;
$config['remove_spaces'] = TRUE;
$config['detect_mime'] = TRUE;
$config['mod_mime_fix'] = TRUE;
//Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:
$this->upload->initialize($config);
if (!$this->upload->do_upload('userfile'))
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}
It is simple...

Trying to upload photo in Codeigniter - not finding my upload folder - ideas why?

I'm trying to upload profile pics during a registration process with CI ($me !== 'experienced' )
Here is my method ... nothing strange
function do_upload()
{
$config['upload_path'] = base_url('/upload_pic/');
$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() )
{
$data['message'] = $this->upload->display_errors() . $config['upload_path'];
$this->load->view('profile_photo_view', $data);
}
else
{
$data['message'] = $this->upload->data();
$this->load->view('upload_success', $data);
}
}
.. but it is failing. As you can see, I have the upload path passing to my fail page for display, and this is what it is showing..
The upload path does not appear to be valid.
http://localhost:8888/MY_SITE/upload_pic
That is where my upload folder is. And I have full 777 permissions on it..
.. any idea what could be wrong? And will trailing slashes always be stripped like that?
base_url will give you...wait for it...a URL :)
You need a path for uploads.
$config['upload_path'] = '/full/path/to/upload_pic/';
or you can use relative paths:
$config['upload_path'] = '../upload_pic';
but you have to give it a path, not a URL.
As #stormdrain pointed out, base_url() is there to get the URL, not a filesystem path. Try:
$config['upload_path'] = dirname(FCPATH) . '/upload_pic/';
Try this
$config['upload_path'] = base_url() . '/upload_pic/';
or inside index.php append this
define('UPLOADS', 'upload_pic');
then set config to
$config['upload_path'] = UPLOADS;

Upload problem in CodeIgniter

I am getting this error:
The upload destination folder does not appear to be writable.
But is_dir and is_writable both return true.
$config['upload_path'] = './work_order_doc/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size']= '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
$work_order_file="work_order_file";
var_dump(is_dir($config['upload_path']));
var_dump(is_writable($config['upload_path']));
if ( ! $this->upload->do_upload($work_order_file))
{
$error = array('error' => $this->upload->display_errors());
print_r($error);
$temp="";
}
else
{
$upload_data = $this->upload->data();
echo $temp=$upload_data['file_name'];
}
Maybe your host have blocked file uploads?
You can always try to specify full path to the upload directory.
Your PHP configuration may be not allowing you to get to the file/directory, try checking open_basedir in php.ini and make sure it is in allowed paths.

Categories