Доступ к суперобъекту CodeIgniter из внешнего php-скрипта вне установки codeigniter
Я так долго пытался, но не смог найти решение. По какой-то причине мне нужно получить доступ к суперобъекту 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 (вне установки codeigniter), он содержит следующий код:
<?php
require('new/external.php');
$ci =& get_instance();
echo $ci->somemodel->somemethod();
?>
Теперь, когда я загружаю файл my_script.php из браузера, он выдает следующую ошибку:
Путь к вашей системной папке не отображается правильно. Пожалуйста, откройте следующий файл и исправьте это: index.php
Если я помещу файл my_script.php в папку codeigniter с исправленным путем к файлу в функции require(), то это сработает. Но мне действительно нужно, чтобы он работал вне установки codeigniter.
Есть идеи, как избавиться от этой проблемы?
Заранее спасибо.
2 ответа
CI основной index.php
устанавливает пути к системной и прикладной папкам. Если вы в том числе 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
даже если вы включите его в другом месте.
Проблема с загрузкой 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