【问题标题】:Undefined method with Composer library and CodeIgniter带有 Composer 库和 CodeIgniter 的未定义方法
【发布时间】:2017-05-05 10:03:10
【问题描述】:

我正在做一个项目,这对我来说有点太难了... 我解释一下。

我需要用 PHP 解析 PDF 文件,以分析这些文件的内容。为此,我使用pdfparser.org 库。 我首先尝试像往常一样包含这个库,但没有任何结果。 在阅读了所有的互联网之后,由于这个库需要安装 Composer(并且在我的虚拟主机上我无法安装 Composer),我已经在我的 Windows PC 上应用了 Composer 进程。我得到了带有“autoload.php”文件的“供应商”文件夹。很好!!

然后,我尝试将其正确包含在 CodeIgniter 中。我选择的解决方案是:

  1. 在应用程序/库/中创建文件“Pdfparser.php”

    class Pdfparser
    {
        public function __construct()
        {
            require_once APPPATH."/third_party/pdfparser.php";
        }
    }
    
  2. 然后,我在 application/third_party/ 中添加 PdfParser “Composer”应用程序,并在 /third_party/pdfparser.php 中添加:

    if (!defined('pdfparser')) {
        define('pdfparser', dirname(__FILE__) . '/');
        require(pdfparser . 'pdfparser/autoload.php');
    }
    
  3. 然后,我将此库添加到 CodeIgniter /application/config/autoload.php 为:

    $autoload['libraries'] = array('pagination', 'form_validation','email','upload','pdfparser');
    
  4. 最后,我在 application/controllers/Admin.php 的函数中调用它:

    $parser = new Pdfparser();
            $pdf    = $parser->parseFile(myfile.pdf);
            $full_text = $pdf->getText();
    

    (这4.代码块直接取自官方文档:http://www.pdfparser.org/documentation,刚刚改编)。

  5. 但是现在,我断网了……我有这个错误:

    PHP Fatal error:  Call to undefined method PdfParser::parseFile() in /path/application/controllers/Admin.php on line 3083
    
  6. 在查看了 CodeIgniter 文档后,我尝试将 Composer 自动加载器添加到核心......我在 application/config/autoload.php 中添加了:

    $config['composer_autoload'] = APPPATH . "/third_party/pdfparser/autoload.php";
    
  7. 当然,它不起作用。我迷路了……

【问题讨论】:

  • 试试这样...$config['composer_autoload'] = TRUE;
  • Hikmat :我试过了,但仅此而已......然后,我尝试将我的 Composer 库直接添加到 application/vendor 文件夹中, $config['composer_autoload'] = TRUE;但没有比这更好的了……

标签: php codeigniter composer-php autoload


【解决方案1】:

正确使用作曲家。 $config['composer_autoload'] = TRUE; 并在您的应用程序文件夹中运行 composer install smalot/pdfparser 。然后在你的控制器内部它应该运行,如果不使用 Use :)

use Smalot\PdfParser;
class My_controller extends CI_Controller {
}

【讨论】:

  • 问题来了!我不能在我的虚拟主机上执行此操作...例如,如果我在本地存储上执行此操作,然后上传生成的“供应商”文件夹,它会工作吗?
  • 我也无法通过 ssh 访问,但它可以按照您描述的方式工作
  • 现在它似乎可以工作了,因为它找到了类并执行了代码!唯一的问题是我收到“TCPD_PARSER 错误:空 PDF 数据。”...我正在检查它的来源...谢谢!
  • 我已经解决了所有问题!真的谢谢你!!
  • 你不必建立自己的库,使用组件。不客气;)
【解决方案2】:

当使用作曲家时,要在你的项目中包含一个库,你可以这样做:

composer install smalot/pdfparser

那么,要包含新安装的库,只需要包含composer提供的“autoload.php”文件即可:

<?php

include 'vendor/autoload.php';

$parser = new Pdfparser();
$pdf    = $parser->parseFile(myfile.pdf);
$full_text = $pdf->getText();

var_dump($full_text);

仅此而已。

【讨论】:

【解决方案3】:

替换你的代码

class Pdfparser
{
    public function __construct()
    {
        require_once APPPATH."/third_party/pdfparser.php";
    }
}

   <?php

require_once APPPATH."/third_party/pdfparser.php";
class Pdfparser
{
    public function __construct()
    {
    }
}

包括你的课外。

您可以像这样加载库而不是使用自动加载...

$this->load->library('library_name');

例子:

 $this->load->library('pdfparser');

【讨论】:

  • 谢谢!我已经尝试了这两种解决方案,但我得到了同样的错误......我失去了希望:'(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
相关资源
最近更新 更多