В этой статье я расскажу как подключить библиотеки PEAR в Фреймворк Codeigniter. Если PEAR установлен в системе по умолчанию и у вас есть доступ для инсталляции отдельных библиотек, то все просто. Иначе приходится подключать все ручками. Сразу приведу ссылку на источник: codeigniter.com/wiki/PEAR_integration. Ниже я перевел это руководство, в код добавил некоторые, по моему мнению, исправления.
1. Подготовка
Для использования библиотек PEAR Вам необходимо создать новую директорию.
system/application/pear
Далее скопировать PEAR.php в эту директорию
system/application/pear/PEAR.php
Затем скопировать необходимые библиотеки. Обратите внимание на зависимости библиотек.
Пример:
system/application/pear/HTTP/Request.php
system/application/pear/Net/Socket.php
system/application/pear/Net/URL.php
2. Подключаем Hooks
Заметка: Необходимо добавить путь к библиотекам PEAR в include_path. В качестве альтернативы описанного ниже способы можно вставить функцию ini_set() в Ваш config.php или в главный CI index.php файл.
Вам необходимо включить использование hooks в config.php.
$config['enable_hooks'] = TRUE;
Далее откройте hooks.php и добавьте следующий hook:
$hook['pre_controller'][] = array(
'class' => 'Pear_hook',
'function' => 'index',
'filename' => 'pear_hook.php',
'filepath' => 'hooks'
);
Затем создаем новый файл pear_hook.php.
system/application/hooks/pear_hook.php
Пишем туда.
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Pear_hook{
function index(){
// OS independent
ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.BASEPATH.'application/pear/');
// on Apache
// ini_set('include_path',ini_get('include_path').':'.BASEPATH.'application/pear/');
// on Windows
// ini_set('include_path',ini_get('include_path').';'.BASEPATH.'application/pear/');
}
}
?>
3. Создаем класс PearLoader.
system/application/libraries/Pearloader.php:
<?php
class Pearloader {
function load($package, $class = NULL, $options = NULL) {
if (is_null($class)) {
require_once $package . '.php';
$classname = $package;
} else {
require_once $package . '/' . $class . '.php';
$classname = $package . '_' . $class;
}
if (($count = func_num_args()) > 2) {
$params = '';
for ($i = 2; $i < $count; $i++) {
eval("\$var$i = func_get_arg($i);");
$params .= "\$var$i" . (($i + 1 == $count) ? '' : ', ');
}
eval("\$instance = new $classname($params);");
return $instance;
} else {
return new $classname();
}
}
}
?>
Это все!
Вы можете использовать Pearloader в стиле Codeigniter. Вначале загружаем библиотеку и вызываем метод load:
$this->pearloader->load(’Packagename‘,’Classname‘);
Например, ниже написан запрос к yahoo.
function example(){
$url = 'http://www.yahoo.com';
$this->load->library('pearloader');
$http_request = $this->pearloader->load('HTTP','Request');
$http_request->setURL($url);
$http_request->sendRequest();
echo $http_request->getResponseBody();
}