Перейти к содержанию

CodeIgniter

Материал из Викиучебника — открытых книг для открытого мира

CodeIgniter — фреймворк написанный на PHP для построения веб-приложений.

Классы Code Igniter:

Benchmarking

Назначение

  • Функции CodeIgniter для измерения времени

Возможности:

  • Установка именованной точки для измерения
  • Получение времени прошедшего с установки определённой точки
  • Получение времени прошедшего с момента старта
  • Получение объёма использованной памяти

 

Пример кода:

<?php
$this->benchmark->mark('code_start');//устанавливаем точку для замера времени
//...код
$this->benchmark->mark('code_end');//устанавливаем вторую точку 
echo $this->benchmark->elapsed_time('code_start', 'code_end');//вычисляем время выполнения кода и выводим на экран
$this->benchmark->mark('dog');
//...код
$this->benchmark->mark('cat');
//...код
$this->benchmark->mark('bird'); // установили 3 точки для замера времени выполнения кода и далее выводим разницу времени по этим точкам
echo $this->benchmark->elapsed_time('dog', 'cat');
echo $this->benchmark->elapsed_time('cat', 'bird');
echo $this->benchmark->elapsed_time('dog', 'bird');
?>

Calendaring

Назначение

  • Функции CodeIgniter для создания календарей

Возможности:

  • Создание календаря на любую дату
  • Вставка ссылок в даты календаря
  • Вставка ссылок на предыдущий/следующий месяцы
  • Установка параметров: первый день недели, режим отображения месяца, режим отображения дня.
  • Вывод календаря на основе шаблона дизайна

 

<?php
$this->load->library('calendar');// загружаем класс в контроллере
echo $this->calendar->generate();// выводим календарь<br />
echo $this->calendar->generate(2006, 6); // выводим календарь на определенную дату

----

$prefs = array (
               'start_day'    => 'saturday',
               'month_type'   => 'long',
               'day_type'     => 'short'
             );   // установка параметров для отображения
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();// выводим календарь
?>

Config

Назначение

  • Функции CodeIgniter для получения параметров конфигурации

Возможности:

  • Загрузка основного/альтернативного файла конфигурации
  • Получение значения параметра конфигурации
  • Установка значения параметра конфигурации

 

<?php
$this->config->load('new_file'); // загрузка конфигурационного файла new_file.php который лежит в папке /config 
echo $this->config->item('some_item'); // вывод переменной вашего конфигурационного файла new_file.php.
$this->config->set_item('some_item', 'new item value'); //Установка нового значения параметра конфигурации

?>

Файл new_file.php:

<?php
$config['some_item'] =”some text”; 
?>

Database

Назначение

  • Функции CodeIgniter для взаимодействия с БД

Возможности:

  • Установка параметров соединения с сервером БД
  • Подключение к БД
  • Возможность подключения к множественным БД
  • Формирование шаблона запроса
  • Получение результата запроса в виде объекта
  • Получение результата запроса в виде массива
  • Получение первой, последней, определённой строки результата
  • Получение количества строк в результате
  • Получение количества полей в результате
  • Получение количества строк, изменённых запросами INSERT, UPDATE и т. п.
  • Получение общего количества строк в таблице
  • Получение информации об используемом сервере БД
  • Получение версии БД
  • Получение текста последнего выполненного запроса к БД
  • Создание запроса на основе массива переменных
  • Поддержка объектно-ориентированного доступа к БД
  • Поддержка транзакций в принудительном и автоматическом режимах
  • Получение списка таблиц в БД
  • Проверка существования определённой таблицы в БД
  • Получение списка полей в таблице
  • Проверка существования определённого поля в таблице
  • Получение метаданных поля (имя, размер, тип, ключ)
  • Вызов функций PHP для работы с БД с получением результата средствами CI
  • Поддержка кеширования результатов запросов к БД
  • Создание БД
  • Удаление БД
  • Получение списка БД сервера
  • Вызов серверной процедуры оптимизации таблицы
  • Вызов серверной процедуры восстановления таблицы
  • Вызов серверной процедуры оптимизации БД
  • Генерация CSV из результата запроса
  • Генерация XML из результата запроса
  • Создание/восстановление резервной копии БД или таблиц с архивированием

 

 

<?php
$this->load->database(); // загружаем класс 
$query = $this->db->query('SELECT orderid, name FROM my_table'); // делаем запрос и возвращаем результат в виде объекта
foreach ($query->result() as $row) 
	{
	 echo $row->orderid . "<br />"; // выводим результат
            echo $row->name . "<br />";
        }
echo 'Total: ' . $query->num_rows(); // кол-во строк 
foreach ($query->result_array() as $row) {
    echo $row['title']; // вывод результата как ассоциативного массива
    echo $row['name'];
    echo $row['email'];
}
$row = $query->row(); // возвращает результат в виде объекта выбирая только одну строку
echo $row->orderid;
$row = $query->row_array();// возвращает результат в виде массива выбирая только одну строку
echo $row['orderid']; 

?>

Email

Назначение

  • Функции CodeIgniter для работы с электронной почтой

Возможности:

  • Отсылка сообщения
  • Установка параметров сообщения
  • Присоединение файлов к сообщению
  • Пакетный режим рассылки
  • Получение служебной информации почтового сервера
  • Принудительное отключение переноса слов в части сообщения

 

<?php
$this->load->library('email'); // загружаем класс
$this->email->from('your@your-site.com', 'Your Name'); // от кого письмо
$this->email->to('someone@some-site.com'); // кому письмо
$this->email->subject('Email Test'); // тема письма
$this->email->message('Testing the email class.'); // тело сообщения
$this->email->attach('/path/to/photo1.jpg'); // вложение в письмо(attachment)
$this->email->send(); //отправка сообщения
?>

Encryption

Назначение

  • Функции CodeIgniter для криптографии

Возможности:

  • Установка типа ключа шифрования
  • Шифрование/дешифрование данных

 

<?php
$this->load->library('encrypt'); // загружаем класс
$msg = 'message'; // сообщение для кодирования 
$key = 'super-secret-key'; // ключ для кодирования и декодирования
echo $encrypted_string = $this->encrypt->encode($msg, $key); // вывод закодированного сообщения при использовании $key
echo "<br />" . $plaintext_string = $this->encrypt->decode($encrypted_string, $key); // вывод раскодированного сообщения
?>
<?php
// Можно также использовать конфигурационную переменную $config['encryption_key'] задав в ней ключ для кодирования и декодирования.
//Тогда второй параметр передавать не нужно. Например:
echo $encrypted_string = $this->encrypt->encode($msg);
echo $plaintext_string = $this->encrypt->decode($encrypted_string);
?>

File Uploading

Назначение

  • Функции CodeIgniter для загрузки файлов

Возможности:

  • Создание веб-формы загрузки фалов
  • Установка параметров/ограничений
  • Прием данных

 

В директории application/views/ создаем файл upload_form.php:

<html>
<head>
<title>Upload Form</title>
</head>
<body>
<?=$error;?>
<?=form_open_multipart('upload/do_upload'); ?>
<input type="file" name="userfile" size="20" />
<br /><br />
<input type="submit" value="upload" />
</form>
</body>
</html>

В той же директории создаем файл upload_success.php:

<html>
<head>
<title>Upload Form</title>
</head>
<body>
<h3>Your file was successfully uploaded!</h3>
<ul>
<?php foreach($upload_data as $item => $value):?>
<li><?=$item;?>: <?=$value;?></li>
<?php endforeach; ?>
</ul>
<p><?=anchor('upload', 'Upload Another File!'); ?></p>
</body>
</html>

В директории application/controllers/ создаем файл upload.php:

<?php
class Upload extends Controller {
	
	function Upload()
	{
		parent::Controller();
		$this->load->helper(array('form', 'url'));
	}
	
	function index()
	{	
		$this->load->view('upload_form', array('error' => ' ' ));
	}

	function do_upload()
	{
		$config['upload_path'] = './uploads/';
		$config['allowed_types'] = 'gif|jpg|png';
		$config['max_size']	= '900';
		$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);
		}
	}	
}
?>

В корне сайте, где находится файл index.php создаем директорию uploads для загрузки туда изображений.
И пробуем в строке броузера www.your-site.com/index.php/upload/

FTP

Назначение

  • Функции CodeIgniter для работы с FTP

Возможности:

  • Подключение к серверу FTP
  • Передача файлов на сервер
  • Получение списка файлов в каталоге
  • Переименование, перемещение, удаление файлов на сервере
  • Создание, удаление каталогов на сервере
  • Установка атрибутов файла на сервере
  • Синхронизация локального каталога с каталогом на сервере

 

<?php
$this->load->library('ftp'); // подключаем библиотеку для работы с FTP

$config['hostname'] = 'ftp.your-site.com'; // хост 
$config['username'] = 'your-username'; // имя пользователя
$config['password'] = 'your-password'; // пароль
$config['debug'] = TRUE;

$this->ftp->connect($config);// соединяемся с хостом FTP
$list = $this->ftp->list_files('/public_html/'); // выбираем листинг файлов в директории
print_r($list); // выводим листинг файлов
$this->ftp->upload('/local/path/to/myfile.html', '/public_html/myfile.html', 'ascii', 0775); //upload файла на сервер с указанием 
//режима передачи и прав на файл
$this->ftp->move('/public_html/joe/blog.html', '/public_html/fred/blog.html'); // перемещение файла
$this->ftp->rename('/public_html/foo/green.html', '/public_html/foo/blue.html'); // переименование файла
$this->ftp->delete_file('/public_html/joe/blog.html'); // удаление файла
$this->ftp->delete_dir('/public_html/path/to/folder/'); // удаление директории
$this->ftp->mkdir('/public_html/foo/bar/', 0755); // создание директории
$this->ftp->chmod('/public_html/foo/bar/', 0777); // меняем права на директорию
$this->ftp->close(); // закрыаем соединение с FTP 
?>

HTML Table

Назначение

  • Функции CodeIgniter для создания таблиц HTML

Возможности:

  • Генерация таблиц из результатов запросов к БД
  • Установка параметров таблицы
  • Генерация таблицы на основе шаблона дизайна

 

<?php
$this->load->library('table'); // загружаем класс
// формируем данные для отображения в таблице
$data = array(
             array('Name', 'Color', 'Size'),
             array('Fred', 'Blue', 'Small'),
             array('Mary', 'Red', 'Large'),
             array('John', 'Green', 'Medium')
             );
echo $this->table->generate($data); // выводим таблицу 

?>

Image Manipulation

Назначение

  • Функции CodeIgniter для работы с изображениями

Возможности:

  • Установка параметров преобразования
  • Преобразование изображения — изменение размера, обрезка, поворот, наложение
  • Автоматическое создание эскиза
  • Поддержка наложения двух типов: текста и другого изображения

 

<?php
$config['image_library'] = 'GD';
$config['source_image'] = 'test.jpg';
$config['create_thumb'] = TRUE; // для создания нового изображения под именем test_thumb.jpg
$config['maintain_ratio'] = TRUE;
$config['width'] = 575; // ширина будущего изображения
$config['height'] = 550; // высота будущего изображения

$config['x_axis'] = '200'; 
$config['y_axis'] = '160'; // координаты для обрезания изображения

$config['rotation_angle'] = 'hor'; // угол поворота изображения

$this->load->library('image_lib', $config);
                   
/* для поворота изображения */
$this->image_lib->initialize($config);

if ( ! $this->image_lib->rotate())
{
    echo $this->image_lib->display_errors();
}
/* для обрезания изображения*/
$this->image_lib->initialize($config);

if ( ! $this->image_lib->crop())
{
    echo $this->image_lib->display_errors();
}
/* для изменения размеров изображения*/
if ( ! $this->image_lib->resize())
{
echo $this->image_lib->display_errors();
}
?>

Input

Назначение

  • Получение/фильтрация данных

Возможности:

  • XSS-фильтр
  • Получение данных с фильтрацией: POST, cookie, SERVER
  • Простая проверка адреса IP
  • Получение данных о клиенте

 

<?php
echo $this->input->post('some_data'); // вывод параметра переданного методом POST
echo $this->input->post('some_data', TRUE); // Для проверки данных на атаку XSS нужно установить вторым параметром TRUE
echo $this->input->cookie('some_data', TRUE); // вывод данных занесенных в куки

echo $this->input->server('HTTP_HOST'); // вывод значения из массива $_SERVER
echo $this->input->ip_address(); // вывод IP-адреса пользователя
echo $this->input->user_agent(); // вывод информации о броузере пользователя
?>

Load

Назначение

  • Функции CodeIgniter для загрузки компонентов во время выполения

Возможности:

  • Загрузка классов, шаблонов, переменных, помощников, дополнений, сообщений и просто файлов.

 

<?php
$this->load->library('email'); // загрузка библиотеки email.php из system/libraries 
$this->load->view('myfile'); // загрузка View-файла myfile.php из system/application/views
$this->load->helper('file_name') // загрузка хелпера file_name_helper.php из system/helpers
$this->load->plugin('file_name') // загрузка плагина file_name_pi.php из system/plugin
$this->load->file('filepath/filename', true/false) // загрузка файла filename и вывод его в броузер
$this->load->lang('file_name') // загрузка языкового файла
$this->load->config('file_name') //загрузка файла конфигурации 
?>

Language

Назначение

  • Функции CodeIgniter для интернационализации

Возможности:

  • Загрузка файла сообщений
  • Получение текста сообщения по ключу

 

Output

Назначение

  • Функции CodeIgniter для управления выводом

Возможности:

  • Установка параметров заголовка
  • Включение/отключение профайлера
  • Непосредственная передача вывода
  • Получение вывода

 

<?php
$test = 'this is san'; //строка для вывода в броузер
$this->output->set_output($test);?> //вывод строки непосредственно в броузер без вызова $this->load->view() 
?>

<?php
$this->load->view('welcome_message'); //вывод страницы welcome_message.php в броузер
$string = $this->output->get_output(); // получение в строку содержимого страницы
?>

<?php
$this->output->set_header("HTTP/1.0 200 OK");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0", false);
$this->output->set_header("Pragma: no-cache");
$this->load->view('welcome_message'); // отправка установленных параметров заголовков броузеру
?>

Pagination

Назначение

  • Функции CodeIgniter для разбиения на страницы

Возможности:

  • Установка параметров вывода
  • Настройка дизайна блока выбора страниц

 

<?php
$this->load->library('pagination'); // загружаем класс
$config['base_url'] = 'http://www.your-site.com/index.php/test/page/'; //адрес страницы которая принимает параметры для навигации по сайту
$config['total_rows'] = '200'; 
$config['per_page'] = '20'; 
$this->pagination->initialize($config); 
echo $this->pagination->create_links();
?>

Вид навигации на странице:
" First < 1 2 3 4 5 > Last "

Session

Назначение

  • Функции CodeIgniter для работы с сессиями

Возможности:

  • Получение данных сессии
  • Установка параметров сессии
  • Добавление собственных данных в сессию
  • Поддержка сессий в БД

 

<?php
$this->load->library('session'); // загружаем класс
$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               ); // определяем массив с параметрами для сессии

$this->session->set_userdata($newdata); // записываем массив в сессию
echo $session_id = $this->session->userdata('email'); // выводим параметр из записанной сессии
?>

Тrackback

Назначение

  • Функции CodeIgniter для работы с трекбеками (уведомления между сайтами.
    Используется преимущественно в блогах и в системах наподобие «послать ссылку другу»)

Возможности:

  • Отсылка/приём трекбеков
  • Поддержка трекбеков в БД

 

<?php
$this->load->library('trackback');
$tb_data = array(
                'ping_url'  => 'http://some-site.com/trackback/456',
                'url'       => 'http://www.my-site.com/blog/entry/123',
                'title'     => 'The Title of My Entry',
                'excerpt'   => 'The entry content.',
                'blog_name' => 'My Blog Name',
                'charset'   => 'utf-8'
                );

if ( ! $this->trackback->send($tb_data))
{
     echo $this->trackback->display_errors();
}
else
{
     echo 'Trackback was sent!';
}
?>

Template Parser

Назначение

  • Функции CodeIgniter для работы с шаблонами страниц

Возможности:

  • Загрузка шаблона
  • Генерация вывода на основе шаблона
  • Поддержка циклов в шаблоне

 

<?php
$this->load->library('parser'); // загружаем класс
$data = array(
            'blog_title' => 'My Blog Title',
            'blog_heading' => 'My Blog Heading'
            ); // массив с переменными для отображения
$this->parser->parse('welcome_message', $data); // загрузка файла welcome_message.php в папке /view

?>

Пример файла welcome_message.php:

<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
</body>
</html>

Unit Testing

Назначение

  • Функции CodeIgniter для тестирования

Возможности:

  • Возможность тестирования функций на результат, тип результата
  • «Ленивый» и «строгий» режим тестирования
  • Возможность пакетного запуска тестов
  • Возможность формирования отчёта по тестам

 

<?php
$test = 1 + 1; // что проверяем 
$expected_result = 2; // с чем проверяем
$test_name = 'Adds one plus one'; // имя теста
echo $this->unit->run($test, $expected_result, $test_name); // вывод результатов теста на соответствие значений в виде таблицы
echo $this->unit->run('Foo', 'Foo'); // сравнение на соответствие значений друг с другом
echo $this->unit->run('Foo', 'is_string'); // сравнение на соответствие значения типу данных
echo $this->unit->report(); // вывод результатов всех запущенных тестов в виде таблицы
$res= $this->unit->result(); // вывод результата в виде массива 
print_r($res);
?>

URI

Назначение

  • Функции CodeIgniter для работы с URI-адресами

Возможности:

  • Получение значения сегмента по номеру
  • Преобразование URI в ассоциативный массив и обратно
  • Получение строки URI после имени сервера
  • Получение количества сегментов
  • Получение массива сегментов

 

<?php
//Пусть адрес текущей страницы - http://www.your-site.com/index.php/news/local/metro/crime. Тогда...
echo $product_id = $this->uri->segment(2); // вывод 2 сегмента страницы “local”
echo $product_id = $this->uri->segment(2, 0); // вывод того же сегмента. Если его нет, то выводим значение по умолчанию (второй параметр) - “0”.
$array = $this->uri->uri_to_assoc(3);
echo $array['metro']; // вывод сегмента в виде элемента массива
echo $this->uri->uri_string(); // вывод всех сегментов после index.php в виде строки
$segs = $this->uri->segment_array();
print_r($segs); // вывод всех сегментов после index.php в виде массива
?>

User Agent

Назначение

  • Функции CodeIgniter для получения информации о клиенте

Возможности:

  • Проверка, является ли клиент: браузером, мобильным, роботом, рефералом
  • Получение строки идентификации браузера, мобильного или робота, версии и платформы клиента, реферера, допустимых языков и кодировок.

 

<?php
$this->load->library('user_agent'); // загружаем класс
echo $this->agent->platform(); // вывод ОС пользователя 
echo $this->agent->browser(); // вывод броузера пользователя
?>

Validation

Назначение

  • Функции CodeIgniter для проверки данных форм

Возможности:

  • Установка правил проверки
  • Каскадирование правил проверки
  • Проверка данных формы
  • Подключение функций подготовки/фильтрации данных перед проверкой
  • Подключение собственных функций проверки
  • Возврат формы в случае ошибки
  • Установка индивидуальных сообщений об ошибках в данных

 

XML-RPC

Назначение

  • Функции CodeIgniter для организации XML-RPC-сервера/клиента

Возможности:

  • Установка метода обмена
  • Приём/отсылка запросов
  • Получение отладочной информации

 

Zip Encoding

Назначение

  • Функции CodeIgniter для работы с ZIP

Возможности:

  • Создание архива
  • Добавление файлов/каталогов в ахрив
  • Получение файлов/каталогов из архива
  • Запись архива на сервере
  • Передача архива клиенту

 

<?php
$this->load->library('zip'); // загружаем класс
$name = 'data.txt'; // имя файла который будет в архиве
$data = 'A Data String!'; // данные которые архивируем
$this->zip->add_data($name, $data); // добавляем данные в архив
$this->zip->archive('my_backup.zip'); // создаем архив под именем my_backup.zip
?>

Приложение A (Создание простого сайта)


Приложение B(Создание сайта с использованием модели MVC)


Приложение C(Ссылки на сайты по теме)

Перевод документации по CodeIgniter на русский язык для версии 2.0.0
Пример блога с исходниками.
Перевод документации по CodeIgniter на русский язык для версии 1.6.3