Мы создаем несколько приложений вокруг одной установки 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, если это не совсем необходимо.
Любой вход (или даже разумная спекуляция) будет оценен. Приветствия.
Прежде всего проверьте, установлен ли 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.'/'); }
Надеюсь, это поможет Спасибо