Доступ к суперобъекту 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

Другие вопросы по тегам