File permission with upload class of CodeIgniter - php

Hi I need to put a permission 777 to my uploaded files but I dont find any docs for uploaded files in codeigniter... Is it possible to put permission 777 with the upload class of codeigniter ??
$group_id = $this->input->post('group_id', TRUE);
// unlink('static/images/uploads/44');
// rmdir('static/images/uploads/45');
$dir = is_dir('../www/static/images/uploads/'.$group_id);
if($dir){
$config['upload_path'] = '../www/static/images/uploads/'.$group_id;
echo "test";
}
else{
mkdir('../www/static/images/uploads/'.$group_id, 0777);
$config['upload_path'] = '../www/static/images/uploads/'.$group_id;
}
$config['allowed_types'] = 'docx|pdf|doc|gif|jpg|png|tiff';
$config['max_size'] = '10000000';
$config['max_width'] = '999999';
$config['max_height'] = '99999';
$this->load->model('Teacher_model');
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
print_r($error);
//$this->load->view('school/teacher/upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
$name = $this->input->post('name', TRUE);
$path = $data['upload_data']['file_name'];
$group_id = $this->input->post('group_id', TRUE);
$this->Teacher_model->add_ressources($group_id,$name,$path);
redirect('school/teachers/#tabs_group_ressource'.$group_id, 'location', 301);
}

You can use chmod to change the permissions. Something like this may work.
After the do_upload you could try adding the following line
if(is_file($config['upload_path']))
{
chmod($config['upload_path'], 777); ## this should change the permissions
}

You can use chmod along with umask.
$old = umask(0);
$logofilepath = $config['upload_path'].$filename;
if(is_file($logofilepath))
{
chmod($logofilepath, 0777);
}
umask($old);

Related

Codeigniter: cannot upload files from subdirectory to main directory

I'm having 2 codeigniter applications one of them in the root and the other is in a sub directory. I'm trying to upload files from the application in the sub sirectory the the images/artists folder in the root (in the main application) but I get
ERROR 404 Page Not Found: Images/artists
The upload destination folder does not appear to be writable.
I run this code in the controller which is used to upload in the sub directory application
if (file_exists('../images/artists')) {
echo 'directory exists - ';
if (!is_dir('../images/artists')) {
echo 'not a dir';
}
else{
echo 'it is a dir';
}
}
And I get "directory exists - it is a dir" and then run the upload code
$gallery_path = realpath(APPPATH . '../images/artists/');
$config['upload_path'] = $gallery_path;
$config['allowed_types'] = 'jpg|png|jpeg';
$config['max_size'] = '20000';
$config['file_name'] = round(microtime(true) * 1000).'.jpg';
$this->load->library('upload', $config);
if ($this->upload->do_upload('img')) {
$phot_data = $this->upload->data();
$photo_name = $phot_data['file_name'];
$this->resizeImage($photo_name);
$artist_data['image'] = $config['file_name'];
}
//not used here but dows it override and trigger the error?
function do_upload() {
if ($_FILES['photos']['name'][0] != '') {
$name_array = array();
foreach ($_FILES as $key => $value)
$_FILES['userfile']['name'] = $value['name'];
$_FILES['userfile']['type'] = $value['type'];
$_FILES['userfile']['tmp_name'] = $value['tmp_name'];
$_FILES['userfile']['error'] = $value['error'];
$_FILES['userfile']['size'] = $value['size'];
$config['upload_path'] = realpath(APPPATH . 'images/artists/');
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '2000';
$this->load->library('upload');
$this->upload->initialize($config);
$this->upload->do_upload();
$data = $this->upload->data();
$name_array[] = $data['file_name'];
}
redirect('admin/gallery');
}
I checked images and artists permissions and they are set to 777 Where's the issue then?
The first snippet only checks if the directory exists, but you want to confirm that it is writable (i.e. that you can put new files into it).
Check is_writable for more details. To fix the problem you'll need to run chmod 600 /path/to/images/artists on the server.

change permission folder Codeigniter

I want to change the permission for a folder (big_pics) to mode 777.
function do_upload(){
$config['upload_path'] = './big_pics/';
$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());
foreach($error as $key => $value){
echo $value."<br>";
}
//$this->load->view('upload_form', $error);
}else{
echo "Well DOne";
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}
The folder is positioned on root folder.
I use codeigniter for this project
You can change the permission of your file or folder by using this before upload.
$frdata = array('upload_data' => $this->upload->data()); // get data
$frfile = $frdata ['upload_data']['full_path']; // get file path
chmod($frfile, 0777); // CHMOD file
if(!$this->upload->do_upload('file')) {
echo $this->upload->display_errors();
} else {
$file_name = $this->upload->data();
}

Files not getting stored in correct folder

I have a form in CodeIgniter that allows the user to upload 2 separate files. At the backend I want these files to get stored in the different folder. In the controller i have written the upload code
public function upload()
{
/**Start uploading file**/
$config['upload_path'] = './assets/file/.';
$config['allowed_types'] = 'gif|jpg|png|doc|txt';
$config['max_size'] = 1024 * 8;
$config['encrypt_name'] = TRUE;
$this->load->library('upload', $config);
if (!$this->upload->do_upload('file'))
{
$error = array('error' => $this->upload->display_errors());
echo $error;
}
else
{
$data = $this->upload->data();
echo $file = $data['file_name']; //name of file
}
/**End uploading file**/
/**Start uploading img**/
$config2['upload_path'] = './assets/img/.';
$config2['allowed_types'] = 'gif|jpg|png|doc|txt';
$config2['max_size'] = 1024 * 8;
$config2['encrypt_name'] = TRUE;
$this->load->library('upload', $config2);
if (!$this->upload->do_upload('img'))
{
$error1 = array('error' => $this->upload->display_errors());
echo $error1;
}
else
{
$data1 = $this->upload->data();
echo $img = $data1['file_name']; //name of img
}
/**End uploading img**/
}
The images are getting uploaded but they are getting uplaoded to same folder. Can anyone please tell how i can make the files get saved in seperate folders
in the second load , you need to initialiaze the loaded library because the load method don't initialize it :
$this->upload->initialize($config2);

"The upload path does not appear to be valid" Codeigniter image upload

This has been asked a lot but after trying a number of things, I still can't find a solution to my cause of this issue.
I'm autoloading the upload library.
My folder structure is:
/application/
/assets/
css/
images/
hero/
js/
/system/
My controller:
$fileName = $this->input->post('title') . '_hero';
$filePath = './assets/images/hero/';
$config['allowed_types'] = 'gif|jpg|png';
$config['overwrite'] = true;
$this->upload->initialize($config);
if (!empty($_FILES['heroimage'])) {
$config['file_name'] = $fileName;
$config['upload_path'] = $filePath;
if (!$this->upload->do_upload('heroimage')) {
$error = array('error' => $this->upload->display_errors());
var_dump($error);
} else {
$data = array('upload_data' => $this->upload->data());
var_dump($data);
}
}
I have tried initializing both how it is now and using $this->load->library('upload', $config); but neither have worked.
I have also checked if the directory exists and if it is writable and both returned true.
Another thing I tried was setting the upload path to $config['upload_path'] = FCPATH.'assets\images\hero';
Any help pointing me in the right direction would be appreciated.
You should have config data like because the file path was not initialized
https://www.codeigniter.com/user_guide/libraries/file_uploading.html#setting-preferences
$fileName = $this->input->post('title') . '_hero';
$filePath = './assets/images/hero/';
$config['upload_path'] = $filePath;
$config['allowed_types'] = 'gif|jpg|png';
$config['overwrite'] = true;
$this->upload->initialize($config);
if (!empty($_FILES['heroimage'])) {
if (!$this->upload->do_upload('heroimage')) {
// errors
} else {
$upload_data = $this->upload->data();
echo $upload_data['file_name'];
}
}

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...

Categories