Я недавно обновился до Joomla 3.5.1 и получаю следующую ошибку при загрузке / включении файла php в мой корневой каталог.
«Ошибка отображения страницы с ошибкой: Ошибка создания приложения: не удалось запустить сеанс, поскольку заголовки уже были отправлены test.php в строке 1»
Я загружаю файл test.php в модуль. Test.php находится в главном корне установки joomla. Однако, поскольку сама Joomla уже установила сеанс, я не могу получить доступ к базе данных joomla через test.php из-за ошибки сеанса выше.
В test.php у меня есть следующий код для начала;
<?php
define( '_JEXEC', 1 );
define( '_VALID_MOS', 1 );
define( 'JPATH_BASE', realpath(dirname(__FILE__)));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
Обычно эта проблема вызвана почти незаметным пробелом (или новой строкой) в начале файла. Проверьте файл test.php на наличие пробелов перед открытием <? php.
Я думаю, что причина, по которой вы получаете эту ошибку после обновления 3.5.1, заключается в том, что теперь они выдают исключение в /libraries/joomla/session/handler/native.php строка 252, если header_sent () возвращает истину. Чтобы избежать этого, вы можете попытаться установить для директивы session.use_cookies значение false с помощью
ini_set('session.use_cookies', 0);
Но это на самом деле больше трюк, чем решение, вы не должны этого делать. На самом деле я не могу придумать причину, почему вы хотите реинициализировать Joomla! рамки, как это. Правильный способ — создать файл, например /modules/mod_mymod/helper.php
defined('_JEXEC') or die('Restricted access');
class MyModHelper {
public static function doSth() {
$db = JFactory::getDBO();
//your code here
}
}
И тогда вы можете выполнить код практически из любого места с
require_once JPATH_ROOT.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.'mod_mymod'.DIRECTORY_SEPARATOR.'helper.php';
MyModHelper::doSth();
Но я пришел сюда, потому что я получил ту же ошибку при выполнении Joomla! CLI скрипт. Несколько слов об этом, потому что ваш заголовок как-то подходит. На некоторых машинах метод header_sent (), кажется, возвращает true даже для Joomla по умолчанию! Сценарии CLI, такие как «finder_indexer.php». Чтобы решить это я написал
ob_start();
в начале сценария для буферизации вывода и предотвращения вывода CLI до начала сеанса.
Пожалуйста, следуйте инструкциям ниже, это, вероятно, решит проблему.