Как добавить библиотеку "Принц" в 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:

  1. Добавьте Prince.php в папку библиотеки (/application/library/Prince.php) и убедитесь, что первая буква имени файла написана заглавными буквами.

  2. Чтобы передать переменные в библиотеку, это должно быть сделано с использованием массива, а не простой строки. $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);
    

    }

  3. Конструкция захватывает переменную как массив, а не как строку, как это должно быть! Поэтому я отредактировал __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);
}
Другие вопросы по тегам