PHP Codeigniter в Centos: ошибка include_once для пользовательских системных библиотек - PullRequest
2 голосов
/ 16 ноября 2011

Мы строим несколько приложений вокруг одной установки Codeigniter (v2.0.3).Мы начали разработку в среде Windows (с использованием XAMPP) и развернули нашу альфа-установку на виртуальной машине CentOS 5.6 (которая отлично работает).По мере развития проекта мне стал нужен доступ к видеоинструментам (ffmpeg / mencoder), которые (практически) недоступны в Windows.Я использовал виртуальную установку CentOS 5.7 (запущенную в VirtualBox 3.2.8) для разработки других приложений, поэтому я установил программное обеспечение на эту виртуальную CentOS.Мы добавили несколько библиотек в папку «Codeigniter / system / library», чтобы они были доступны для всех различных приложений.На моем локальном виртуальном CentOS наши основные библиотеки не загружаются, мы получаем сообщение об ошибке, в котором говорится, что классы не существуют.Пути существуют, и мы можем прочитать их содержимое, и include_once не выдает ошибку ... они просто не будут работать.

Мы отследили включение основных библиотек и обнаружили, что наша библиотека былазагружается в «system / core / Loader.php» по строке 886 через «include_once».После долгих изменений мы определили, что если мы изменили этот «include_once» на «include», файл был включен, и весь программный пакет работал точно так, как ожидалось (точно так же, как и в других системах).

Какого черта?Нужно ли включать "include_once" где-нибудь в конфиге PHP?Путь, очевидно, правильный, так как «include» работает.У меня просто нет никакого желания менять системное ядро ​​CI, если в этом нет полной необходимости.

Любой вклад (или даже разумные предположения) приветствуется.Приветствия.

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

Прежде всего проверьте, установлен ли у вас php-apc.если он у вас есть, отредактируйте файл apc.ini (он должен быть /etc/php.d/apc.ini в CentOS) и отключите оптимизацию include_once:

apc.include_once_override=0 

он может дать очень странные результаты сCodeIgniter, как, например, не найти библиотеки или помощники ...

перезагрузите ваш веб-сервер:

service httpd restart

и теперь все должно быть в порядке.:)

0 голосов
/ 10 марта 2014

Временное исправление:

добавить FCPATH с именем папки приложения.

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

добавить это в путь к приложению:

// The path to the "application" folder
    if (is_dir($application_folder))
    {
        define('APPPATH', FCPATH.$application_folder.'/');
    }
    else
    {
        if ( ! is_dir(BASEPATH.$application_folder.'/'))
        {
            exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);
        }

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

Надеюсь, это поможет Спасибо

0 голосов
/ 15 февраля 2012

Ответ автора:

Мы по крайней мере определили, что это, похоже, связано с нашей версией PHP.Наши старые системы, которые работали, были на PHP 5.3.3.Более новый (который не работает) на PHP 5.3.4.Мы вернули версию на 5.3.3, и внезапно «include_once» в CodeIgniter волшебным образом начали работать.Как насчет яблок?Сейчас мы называем это ошибкой PHP, и мы попытаемся воспроизвести ее на благо всего человечества (или, по крайней мере, любого, кто найдет эту проблему).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...