Как добавить библиотеку "Принц" в CodeIgniter?
Я хочу использовать эту библиотеку: http://www.princexml.com/ которая помогает мне создавать файлы PDF из файлов HTML/XML.
Я скачал zip-файл PHP отсюда: http://www.princexml.com/download/wrappers/ и добавил его в папку "библиотеки" в каталоге codeigniter. насколько я знаю, мне просто нужно включить / вызвать библиотеку и регулярно использовать ее функции. https://ellislab.com/codeigniter/user-guide/general/creating_libraries.html
Я использую WAMP (Windows), поэтому я создал псевдоним для
C:\Program Files (x86)\Prince\engine\bin
где найден файл prince.exe и называется "принц" (http://localhost/prince
).
было это на моем контроллере:
public function banana(){
$this->load->library('prince');
$prince = new Prince('http://localhost/prince/prince.exe');
$xmlPath = 'http://localhost/temp/test.html';
$this->prince->convert_file_to_passthru($xmlPath);
}
И я получил эти ошибки:
Обнаружена ошибка PHP
Серьезность: Предупреждение
Сообщение: отсутствует аргумент 1 для Prince::__construct(), вызван в C:\wamp\www\tools\system\core\Loader.php в строке 1247 и определен
Имя файла: library /prince.php
Номер строки: 48
Backtrace:
Файл: C:\wamp\www\tools\application\library \ prince.php Строка: 48 Функция: _error_handler
Файл: C:\wamp\www\tools\application\controllers\aso\Cli_kas.php Строка: 304 Функция: библиотека
Файл: C:\wamp\www\tools\index.php Строка: 292 Функция: require_once
Обнаружена ошибка PHP
Серьезность: Уведомление
Сообщение: неопределенная переменная: exePath
Имя файла: library /prince.php
Номер строки: 50
Backtrace:
Файл: C:\wamp\www\tools\application\library \ prince.php Строка: 50 Функция: _error_handler
Файл: C:\wamp\www\tools\application\controllers\aso\Cli_kas.php Строка: 304 Функция: библиотека
Файл: C:\wamp\www\tools\index.php Строка: 292 Функция: require_once
Обнаружена ошибка PHP
Серьезность: Предупреждение
Сообщение: proc_open(): ошибка CreateProcess, код ошибки - 87
Имя файла: library /prince.php
Номер строки: 796
Backtrace:
Файл: C:\wamp\www\tools\application\library \ prince.php Строка: 796 Функция: proc_open
Файл: C:\wamp\www\tools\application\library \ prince.php Строка: 528 Функция: convert_internal_file_to_passthru
Файл: C:\wamp\www\tools\application\controllers\aso\Cli_kas.php Строка: 311 Функция: convert_file_to_passthru
Файл: C:\wamp\www\tools\index.php Строка: 292 Функция: require_once
Обнаружено неперехваченное исключение
Тип: Исключение
Сообщение: не удалось выполнить "" --structured-log = buffered " http://localhost/temp/test.html" -o -
Имя файла: C:\wamp\www\tools\application\library \ prince.php
Номер строки: 814
Backtrace:
Файл: C:\wamp\www\tools\application\library \ prince.php Строка: 528 Функция: convert_internal_file_to_passthru
Файл: C:\wamp\www\tools\application\controllers\aso\Cli_kas.php Строка: 311 Функция: convert_file_to_passthru
Файл: C:\wamp\www\tools\index.php Строка: 292 Функция: require_once
Я впервые запускаю внешнюю библиотеку из CodeIgniter, я не уверен, что делать, и документы codeigniter не содержат слишком много информации.
Создание ALIAS не сработало, поэтому я думаю, что именно поэтому оно не распознает переменную exePath
,
Как мне собрать всю библиотеку "Принц" и заставить ее работать на CodeIgniter?
2 ответа
Чтобы использовать "Принц" в качестве библиотеки на CI:
Добавьте Prince.php в папку библиотеки (/application/library/Prince.php) и убедитесь, что первая буква имени файла написана заглавными буквами.
Чтобы передать переменные в библиотеку, это должно быть сделано с использованием массива, а не простой строки.
$exePath = array('exePath' => 'C:\Program Files (x86)\Prince\engine\bin\prince.exe');
public function banana(){ // it should be a local path instead of URL $exePath = array('exePath' => 'C:\Program Files (x86)\Prince\engine\bin\prince.exe');
// you can add parameter for the constructor call $this->load->library('prince', $exePath); // it also should be a local path where the folder should be writable by apache $xmlPath = 'C:\wamp\www\tools\files\banana\test.html'; $pdfPath = 'C:\wamp\www\tools\files\banana\test.pdf'; $this->prince->convert_file_to_file($xmlPath, $pdfPath);
}
Конструкция захватывает переменную как массив, а не как строку, как это должно быть! Поэтому я отредактировал
__construct
совсем немного:public function __construct($exePathArr) { // var_dump($exePathArr); $exePath = "banana"; // just to make sure that this var is a string :P // var_dump($exePath); $exePath = $exePathArr['exePath']; // var_dump($exePath); $this->exePath = $exePath; $this->styleSheets = ''; $this->scripts = ''; ... ....... ..........
Это сообщение, открытое на веб-сайте "Принц": http://www.princexml.com/forum/topic/3318/princexml-and-codeigniter-how-to-add-the-library?p=1
Надеюсь, это поможет людям, которым это тоже нужно.
Я проверял это как на WAMP, так и на UBUNTU SERVER.
Вы должны попробовать это:
public function banana(){
// it should be a local path instead of URL
$exe_path = 'c:\\some_folder\prince\prince.exe';
// you can add parameter for the constructor call
$this->load->library('prince', $exe_path);
// it also should be a local path where the folder should be writable by apache
$xmlPath = 'c:\\some_folder\temp\test.html';
$this->prince->convert_file_to_passthru($xmlPath);
}