Я хочу использовать эту библиотеку: 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«-о —Имя файла: 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?
Вы должны попробовать это:
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);
}
Чтобы использовать «Принц» в качестве библиотеки на 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#16234
Надеюсь, это поможет людям, которым это тоже нужно.
Я проверял это как на WAMP, так и на UBUNTU SERVER.