Где воздух гор - там тишина снегов, молчание камней и дремлет сила

Программирование Web

Codeigniter в действии:загрузчик файлов

2018-03-09 05:00:16






Фреймворк Сodeigniter позволяет быстро и главное, качественно создавать веб приложения. В качестве примера разработаем простой загрузчик файлов, но с поддержкой базы данных. Загруженные файлы будут сохранятся на сервере, а в базе будем хранить путь к файлу. Это даст возможность легко управлять файлами. Итак, приступим.
Далее все описываем по шагам:
1. Устанавливаем Сodeigniter на сервер.
2. Создаем базу данных “uploads” и в ней таблицу такого вида:
CREATE TABLE `uploadings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`file` varchar(255) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`details` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;

Название таблицы очень желательно, чтобы было во множественном числе, как и наличие ключа “id”. Здесь у нас есть такие поля: название файла, заголовок и описание, что это за файл.
3. Теперь переходим непосредственно к программированию. Для начала отредактируем файлы конфигурации. Этофайл “/application/config/config.php” ифайл “/application/config/db.php”. В первом находятся общие настройки приложения, а во втором – настройка соединения с базой данных.
Файл: “/application/config/config.php” - $config['base_url'] = 'http://mysite.com/' – здесь устанавливаем базовый URL.
Файл: “/application/config/db.php” -

$db['default']['hostname'] = "localhost"; //сервербазыданных
$db['default']['username'] = "mydbuser"; //пользователь
$db['default']['password'] = "mydbpwd"; //пароль
$db['default']['database'] = "uploads";// название базы данных

4. Далее создаем модель для работы с базой данных. Она должна хранить и отображать список загруженных файлов, а также выполнять другие сервисные функции. Назовем ее “Uploading”.
<?php

class Uploading extends Model{

function Uploading(){ //конструктор класса


parent::Model();//вызов базового класса фреймворка

$this->load->database();//загрузка поддержки работы с базой данных

}

function getAllUploads(){

// метод для получения всех записей из базы данных

$query=$this->db->get('uploadings');

if($query->num_rows()>0){

return $query->result_array();
}
}

function deleteUpload($id){
// метод удаления записи из базы данных и сервера
$this->db->where('id', $id);

$this->db->select('uploadings');

$query = $this->db->get('file');

foreach($query->result() as $itm)
{
$path=($itm->file);
}
@unlink('/images/'.$path);

$this->db->delete('uploadings');
}



function getUploadsWhere($field,$param){ // метод для вывода записей постранично

$this->db->where($field,$param);

$query=$this->db->get('uploadings');

return $query->result_array();

}


function getNumUploadings(){ // метод для подсчета количества записей в базе данных

return $this->db->count_all('uploadings');
}

}
?>


5. Ну а сейчас займемся главными элементами приложения: классом контроллера и представлениями (views),которые будут отображать интерфейс и получать данные от пользователя. С начала код контроллера Upload “/application/controllers/upload.php” :

<?php
class Upload extends Controller {


function Upload()
// конструктор класса, который наследует от базового класса, загружает
// поддержку для работы с формами,файлами и запросами,а также модель и библиотеку
// проверки валидации
{
parent::Controller();
$this->load->helper(array('form', 'url','directory'));
$this->load->model('Uploading');
$this->load->library('form_validation');

}

function index() { //метод отображает начальную страницу

$this->load->view('show_index');

}



function show_form() {
//метод отображаетформу загрузки файлов

$this->load->view('upload_form', array('error' => ' ' ));

}


function delete($id) {
//вывзывает метод удаления данных из класса модели и затем
//загружает начальную страницу
$this->Uploading->deleteUpload($id);
$this->load->view('show_index');

}



function show_images($row=0){ //метод показывает загруженные файлы

$this->load->library('pagination');
//загрузка библиотеки поддержки постраничного вывода

$config['base_url']='http://mysite/com/ imageupload/upload?show_images';
//базовый путь постраничного вывода

$config['total_rows']=$this->Uploading->getNumUploadings();
// общее число записей в базе данных

$config['per_page']='5';
// количество записей на странице

$this->pagination->initialize($config);
//инициализация библиотеки постраничного вывода

$query=$this->db->get('uploadings');
$data['uploads']=$this->Uploading->getUploads($row);
//получение данных из базы

$data['title']='Displaying Images';
//заголовок страницы

$data['links']=$this->pagination->create_links();

//генерация ссылок постраничного вывода

$this->load->view('show_image',$data);

//загрузка представления страницы

}

function do_upload()
//метод загрузки файлов
{

//настройки загрузчика
$config['upload_path'] = 'assets/uploads/';
//путь,куда помещаются загружаемые файлы
$config['allowed_types'] = 'jpeg,jpg,gif,png';
//установка разрешенных типов файлов
$config['max_size'] = '10000';
//максимальный размер файла для загрузки на сервер


//получение данных из формы загрузки

$title = $this->input->post('title');

$details = $this->input->post('details');


$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());
$upload_data = $this->upload->data();
$file= $upload_data['file_name'];
$path= "../assets/uploads/".$file;
$this->load->database();

$sql = "INSERT INTO uploadings (file,title, details)VALUES (".$this->db->escape($file).",".$this->db->escape($title).", ".$this->db->escape($details).")";

$this->db->query($sql);
//если загрузка происходит успешно, то файл помещается на сервер и делается новая запись в базе данных. Далее показываются данные постранично.


$this->load->library('pagination');
//загрузка библиотеки поддержки постраничного вывода

$config['base_url']='http://mysite/com/ imageupload/upload?show_images';
//базовый путь постраничного вывода

$config['total_rows']=$this->Uploading->getNumUploadings();
// общее число записей в базе данных

$config['per_page']='5';
// количество записей на странице

$this->pagination->initialize($config);
//инициализация библиотеки постраничного вывода

$query=$this->db->get('uploadings');
$data['uploads']=$this->Uploading->getUploads($row);
//получение данных из базы

$data['title']='Displaying Images';
//заголовок страницы

$data['links']=$this->pagination->create_links();

//генерация ссылок постраничного вывода
//инициализация библиотеки постраничного вывода

$this->load->view('show_image',$data);

//загрузка представления страницы
}
}
}
?>

6. И на конец, нам осталось добавить несколько файлов представлений (“/applications/views/”):

Файл ”show_index.php”,который будет начальной страницей и переадресует запросы на 2 основные страницы – формы загрузчика файлов и страницы просмотра файлов.

<?php

<a href="/<?php echo site_url('upload/show_form') ?>">Upload Files</a>
</br>
<a href="/<?php echo site_url('upload/show_images') ?>">View Uploading Files</a>

?>

Файл “upload_form.php” загружает файлы на сервер.

<HTML>
<HEAD>
<TITLE>File Upload Form</TITLE>
</HEAD>
<BODY BGCOLOR=#FFFFFF LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>
<h3>Upload File</h3>
<br>
<b>To Upload, click on "Choose File..." button and select files from dialogue window
that pops up.</b><br>
<?php echo $error;?>
<?php echo form_open_multipart('upload/do_upload');?>
<br />
<input name="userfile" type="file" value="Choose files..."/><br />
Title:<br />
<? echo form_input('title'); ?> <br />
Details:<br /><? echo form_textarea('details'); ?> <br />
<input type="submit" name="submit" value="Upload" />
<?php echo form_close(); ?>
<p>
<?php echo anchor('upload', 'Go Back'); ?></p>
</BODY>
</HTML>

После успешной загрузки файла отображается следующая страница "upload_success.php”:

<html>
<head>
<title>Upload Form</title>
</head>
<body>

<h3>Your file was successfully uploaded!</h3>

<ul>
<?php
$upload_data = $this->upload->data();
$file= $upload_data['file_name'];
$path= ".. /assets/uploads/".$file;
$title = $this->input->post('title');
$details = $this->input->post('details');

echo "<h2> Title:".$title . "</h2>";
echo "<h2> Details:". $details; "</h2><br>";
?>
<br><br>
<img src=<?php echo $path; ?> width="250" height="250">

<p><?php echo anchor('upload', 'Upload Another File!'); ?></p>

</body>
</html>



И последняя страница, “show_image.php”, показывающая ранее загруженные файлы. Здесь же есть ссылка на удаление файла и информация о каждом из них. Если файлов нет, то показывается сообщение об этом.

<head>

<title><?php echo $title;?></title>

</head>
<body>
<p><?php echo anchor('upload', 'Home'); ?></p>

<ul>

<?php

if (count($uploads)){

foreach($uploads as $data):?>

<li>

<?php echo anchor('upload/delete/'.$data['id'], 'Delete'); ?>


<p><?php echo '<h4> File: '.$data['file'].' <br>Title:'.$data['title'].'<br> Details: '.$data['details']."</h4>";?>
</p>
<?php
$path= ".. /assets/uploads/".$data['file'];
?>
<img src=<?php echo $path; ?> width="250" height="250">


</li>

<?php endforeach;?>

</ul>

<p><?php echo $links;?></p>

<?php }
else {

echo "<h3>There are no images to be viewed at this time.</h3>";
}

?>
</body>

</html>

</body>

На этом все, приложение готово к работе.



















Здесь нет комментариев


Новый комментарий:
























Яндекс.Метрика