【问题标题】:How to add "Prince" library to CodeIgniter?如何将“Prince”库添加到 CodeIgniter?
【发布时间】:2016-06-14 02:10:11
【问题描述】:

我想使用这个库:http://www.princexml.com/ 这可以帮助我从 HTML/XML 文件创建 PDF 文件。

我的控制器上有这个:

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 错误

严重性:警告

消息:Prince::__construct() 缺少参数 1,已调用 C:\wamp\www\tools\system\core\Loader.php 在第 1247 行并定义

文件名:libraries/prince.php

行号:48

回溯:

文件:C:\wamp\www\tools\application\libraries\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

文件名:libraries/prince.php

行号:50

回溯:

文件:C:\wamp\www\tools\application\libraries\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

文件名:libraries/prince.php

行号:796

回溯:

文件:C:\wamp\www\tools\application\libraries\prince.php 行:796 函数:proc_open

文件:C:\wamp\www\tools\application\libraries\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\libraries\prince.php

行号:814

回溯:

文件:C:\wamp\www\tools\application\libraries\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 的变量的原因。

我如何使用所有“Prince”库并让它在 CodeIgniter 上运行?

【问题讨论】:

  • 根据我的经验,当您加载一个库时,它会创建该库工作者的一个实例(即 new Prince()),并将其作为成员添加到 CI 对象中。所以在你像你正在做的那样加载它之后:$this->load->library('prince');,你可以使用$this-><prince_function>();访问prince函数
  • no.. 我得到的第一个错误是因为它期望库中的构造函数中有一个变量。我不知道该怎么做。我尝试添加 EXE 路径(使用别名:http://localhost/prince/prince.exe),但它似乎不像那样工作:X
  • 您能否在删除手动实例化 Prince 类的第二行时验证这是否不起作用?
  • @Glubus 是的,我得到同样的错误:X
  • 您也可以试试 PrinceXML 的云合作伙伴:docraptor.com。这将消除安装库的需要。

标签: php codeigniter wamp princexml


【解决方案1】:

你应该试试这个:

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);
}

【讨论】:

  • 不工作。我都试过了:$exe_path = 'C:/Program%20Files%20(x86)/Prince/engine/bin/prince.exe';$exe_path = 'C:\Program Files (x86)\Prince\engine\bin\prince.exe'; 和这个:$xmlPath = 'C:\wamp\www\banana\index.html';
  • 我在库文件夹中有pronce.php 文件。我做错了什么?
  • 我尝试将它移动到我的 ubuntu 服务器,但我得到了同样的错误。我将变量从字符串更改为$params = array('exePath' => '/usr/bin/prince');,我只收到Array to string conversion php的错误
【解决方案2】:

在 CI 上使用“Prince”作为库:

  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#16234

希望这也能帮助有需要的人。

我在 WAMP 和 UBUNTU SERVER 上都对此进行了测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多