Codeigniter: невозможно найти указанный класс: Exceptions.php

Вот мой контроллер:

$html = $this->load->view('print_po', $po, TRUE);
$this->load->library('pdf');
$pdf = $this->pdf->load();

Теперь я попробовал и прокомментировал каждую строку, и та, которая показывает ошибку:

$pdf = $this->pdf->load();

Вот мой класс библиотеки в application/libraries:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class pdf {

    function pdf()
    {
        $CI = & get_instance();
        log_message('Debug', 'mPDF class is loaded.');
    }

    function load($param=NULL)
    {
        include_once APPPATH.'/third_party/mpdf/mpdf.php';

        if ($params == NULL)
        {
            $param = '"en-GB-x","A4","","",10,10,10,10,6,3';
        }

        return new mPDF($param);
    }
}

Ошибка возникает только после переноса кода с одного сервера на другой (ошибка возникает на сервере CentOS, который, я уверен, чувствителен к регистру). Мой вопрос здесь: что мне нужно изменить, чтобы codeIgniter нормально загружал Exceptions.php?


person Cristi Berceanu    schedule 07.08.2013    source источник


Ответы (1)


Во-первых, удалите косую черту в первой из /third_party фраз:

include_once APPPATH.'third_party/mpdf/mpdf.php';

CodeIgniter определяет константу APPPATH с косой чертой в конце. Взгляните на index.php:

define('APPPATH', $application_folder.'/');

Во-вторых, убедитесь, что имена файлов/папок совпадают с теми, которые вы написали. Лучше писать их строчными буквами. Здесь является смежной темой.

Обновление:

Имя класса должно быть написано прописными буквами. В этом случае измените pdf на Pdf:

class Pdf {
 // ...
}

Из документации CI:

Соглашения об именах:

  • Имена файлов должны быть написаны с заглавной буквы. Например: Myclass.php
  • Объявления классов должны быть написаны с заглавной буквы. Например: class Myclass
  • Имена классов и имена файлов должны совпадать.
person Hashem Qolami    schedule 07.08.2013
comment
Я сделал то, что вы предложили, но не работает. Кроме того, все файлы в нижнем регистре. Я думаю, что проблема здесь с CI и где-то отсутствует ucfirst()? - person Cristi Berceanu; 07.08.2013
comment
Я получаю сообщение об ошибке: Невозможно найти указанный класс: Exceptions.php Я проверил ваше обновление и пробовал это раньше, но все еще не работает. Также я прокомментировал if (!defined('BASEPATH')) exit('No direct script access allowed'); и $CI = & get_instance(); log_message('Debug', 'mPDF class is loaded.'); - person Cristi Berceanu; 07.08.2013
comment
Извините за двойное сообщение... Итак, я обнаружил, что ошибка вызвана этой строкой: include_once APPPATH.'third_party/mpdf/mpdf.php'; Не знаю, что здесь происходит. - person Cristi Berceanu; 07.08.2013
comment
@CristiBerceanu Попробуйте включить файл, используя путь относительно файла index.php. например: include_once './application/third_party/mpdf/mpdf.php';. зависит от структуры вашей папки. - person Hashem Qolami; 07.08.2013
comment
Я сделал, но до сих пор нет результата. :( - person Cristi Berceanu; 07.08.2013
comment
@CristiBerceanu Если проблема связана с функцией include, сначала проверьте, существует ли файл: var_dump( file_exists(APPPATH.'third_party/mpdf/mpdf.php') ); сообщите мне результат. - person Hashem Qolami; 07.08.2013
comment
Пробовал это и раньше, он возвращает bool (true). - person Cristi Berceanu; 07.08.2013
comment
@CristiBerceanu Это странно ... также проверьте, доступен ли файл для чтения на сервере, используя var_dump( is_readable(APPPATH.'third_party/mpdf/mpdf.php') );, если он возвращает true, проблема в чем-то другом. - person Hashem Qolami; 07.08.2013
comment
@CristiBerceanu Значит, ошибка не должна принадлежать include, вы уверены, что класс mpdf работает без ошибок? вместо этого создайте крошечный класс, включите его и выполните несколько тестов для отладки кода. Я не могу сказать ничего другого. что-то не так, но это где-то еще, а не в коде на текущей странице. - person Hashem Qolami; 07.08.2013
comment
Использование другого класса действительно работает нормально. Мой вопрос: почему mpdf пытается загрузить Exceptions.pdf. - person Cristi Berceanu; 08.08.2013
comment
@CristiBerceanu У меня нет опыта работы с классом mPDF, я никогда раньше не использовал, но если другой класс работает нормально, коды на этой странице полностью в порядке. есть много библиотек для создания pdf файла, попробуйте другую. - person Hashem Qolami; 08.08.2013
comment
@CristiBerceanu Лучше задать отдельный вопрос по этой проблеме, но не могли бы вы пометить этот ответ как действительный, пожалуйста? - person Hashem Qolami; 08.08.2013