Я так долго пробовал, но не мог найти решение. По какой-то причине мне нужно получить доступ к супер-объекту codeigniter get_instance () из внешнего php-скрипта, который находится вне установки codeigniter.
Так, например, у меня есть собственный php-скрипт под названием my_script.php внутри public_html. И codeigniter установлен внутри public_html / codeigniter.
Вслед за обсуждением здесь: http://ellislab.com/forums/viewthread/101620/ Я создал файл под названием external.php и поместил его в папку public_html / codeigniter, он содержит следующий код:
<?php // Remove the query string $_SERVER['QUERY_STRING'] = ''; // Include the codeigniter framework ob_start(); require('./new/index.php'); ob_end_clean(); ?>
Затем я создал файл my_script.php и поместил его в папку public_html (вне установки codeignign), он содержит следующий код:
<?php require('new/external.php'); $ci =& get_instance(); echo $ci->somemodel->somemethod(); ?>
Теперь, когда я загружаю файл my_script.php из браузера, он вызывает следующую ошибку:
Возможно, ваш путь к системной папке установлен правильно. Откройте следующий файл и исправьте это: index.php
Если я поместил файл my_script.php в папку codeigniter с исправленным пути к файлу в функции require (), тогда он будет работать. Но мне действительно нужно, чтобы она работала извне установки кода.
Любая идея, как избавиться от этой проблемы?
Заранее спасибо.
Основной index.php
CI устанавливает пути к папкам системы и приложения. Если вы включаете index.php
из другого каталога, эти пути устанавливаются относительно вашего каталога «включая».
Попробуйте изменить следующие строки в index.php
$system_path = 'system'; // change to... $system_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'system'; // and... $application_folder = 'application'; // change to... $application_folder = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'application';
Имя dirname(__FILE__)
даст вам абсолютный путь index.php
даже если вы dirname(__FILE__)
его в другое место.
Проблема с загрузкой codeigniter из внешнего файла вне установки codeigniter решена с использованием первого ответа, который я обозначил как принятый. И проблема с вызовом контроллера / метода по умолчанию была решена с использованием константы (define). Вот обновленный код для файла external.php:
<?php // Remove the query string $_SERVER['QUERY_STRING'] = ''; // Include the codeigniter framework define("REQUEST", "external"); ob_start(); require('./new/index.php'); ob_end_clean(); ?>
И вот метод контроллера по умолчанию:
public function index($flag = NULL) { if (constant("REQUEST") != "external") { // some code here } }
Большое спасибо вкладчику hyubs. @hyubs