PHP Codeigniter в Centos: include_once не работает для пользовательских системных библиотек

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

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

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

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

Solutions Collecting From Web of "PHP Codeigniter в Centos: include_once не работает для пользовательских системных библиотек"

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

apc.include_once_override=0 

это может привести к очень нечетным результатам с помощью CodeIgniter, например, не найти библиотеки или помощники …

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

 service httpd restart 

и теперь все должно быть хорошо. 🙂

Ответа на этот вопрос asker:

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

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

добавьте 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.'/'); } 

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