Codeigniter File uplaod - php

Hi I am trying to use the codigniter do_upload function below:
But get this error: "You did not select a file to upload." I do select a file and when i pass the name i can see the name but still can not upload...thanks in advance for the help.
function do_upload()
{
$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);
if ( ! $this->upload->do_upload())
{
$data = array('error' => $this->upload->display_errors());
print_r($data);
exit;
//$this->load->view('clients_page', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
print_r($data);
exit;
}
}

I assume you're not naming your <input type="file" /> the default userfile. It would be nice to see your upload view also.
change this
$this->upload->do_upload()
to this
$this->upload->do_upload('audioRef')

I do select a file and when i pass the name i can see the name but still can not upload
This is often because you've omitted to set your form to submit as multipart/form-data. Forms default to application/x-www-form-urlencoded, which can't contain file uploads; in this case you just get the filename instead.
<form method="post" action="..." enctype="multipart/form-data">
Incidentally,
$config['allowed_types'] = 'gif|jpg|png';
if you must use filename extension to check file type (and it's inadvisable, but that's what CodeIgniter offers, unfortunately), please also allow jpeg and any other likely extensions.
$config['upload_path'] = './uploads/';
If that uploads folder is within the webroot (you'll be serving files directly out of it), that's potentially a cross-site-scripting vulnerability. Unfortunately it is possible to upload files that look like images but in fact contain HTML, including <script>.
Doing user-uploaded-content in a safe way is hard. See eg this question for background.

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')

uploaded documents not displaying

<?php if($row->resumes != null){
$attachment= base_url().'uploads/resumes/'.$row->resumes;
echo '<a target="_blank" href="'.$attachment.'">
Show Resume</a>';
}
?>
Suppose, my file name is, my plan.pdf
so, on click of Show Resume then in url it's open like,
../uploads/resumes/my%20plan.pdf
in my resumes folder is store like my plan.pdf
there for 404 Page Not Found error is coming
i tried to using urlencode & urldecode, but it's not working.
I am not sure, but it might be the problem of white-space.
You may use trim() while inserting and retrieving time. or read PHP Manual
It won't work because of the space in the filename. I suggest that you use the Codeigniter upload class if you aren't already and remove any spaces from the file name before uploading.
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$config['file_name'] = preg_replace('/\s+/', '', $filename); //Remove all whitespace
$this->load->library('upload', $config);
$this->upload->initialize($config);
Once the file has been uploaded you can get the name of the file by doing
$aUploadData = $this->upload->data();
$aUploadData['file_name'];
Then once you have that value you should insert it into your database because that way you will know that the value stored in the database will match the name of the file uploaded
Also as an extra check you should check to see if the file exists before linking to it
<?php if($row->resumes != null) {
if(file_exists(base_url().'uploads/resumes/'.$row->resumes)) {
$attachment= base_url().'uploads/resumes/'.$row->resumes;
echo '<a target="_blank" href="'.$attachment.'">Show Resume</a>';
}
}
?>
Hope that helps

Codeigniter server root

I am trying to upload video in server using Codeigniter, In the localhost i can do it, but when in the server it does not work. Even though do_upload() function returns true.
When i'm testing the server root, print_r($_SERVER['DOCUMENT_ROOT']); it returns
/var/www/mjpp/data/www/supps.mydomainname.com
Also the
$updata = $this->upload->data(); returns
[file_path] => /var/www/mjpp/data/www/supps.mydomainname.com/public/video
Can you tell me why /var/www/mjpp/data/ is appearing before my main domain name , and is it the cause of any error for uploading video?
Thank you in advance, sorry for my bad english.
/var/www/mjpp/data/www/supps.mydomainname.com is absolute location of your document root in a system in general. However you do not usually have access to anything above your user dir.
public/video or /var/www/mjpp/data/www/supps.mydomainname.com/public/video (as absolute path) is what you pass to Upload library as upload_path. This is where the library will try yo upload the files. This folder should exist and be writeable (have 0777 permissions on it for example).
No need to use Document Root, Codeigniter itself having configurations when file uploading.
Here is sample code for image uploading,
function do_upload()
{
$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);
if ( ! $this->upload->do_upload())
{
$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);
}
}
You just need to change the configuration($config array), for your issue you should use the $config['upload_path'].
Follow codigniter file upload tutorial
Dont use $_SERVER['DOCUMENT_ROOT'] in CI, use URL Helper
$this->load->helper('url');
echo base_url();

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;

Categories