У меня есть этот файл конфигурации:
error_reporting(E_ALL);
ini_set("display_errors", 1);
ini_set('session.cookie_httponly', 1); //This line 4 and error Line
и этот загрузчик конфигурации:
namespace App\Core;
class Config
{
// this is public to allow better Unit Testing
public static $config;
public static function get($key)
{
if (!self::$config) {
$config_file = '../application/config/config.' . Environment::get() . '.php';
if (!file_exists($config_file)) {
return false;
}
self::$config = require $config_file;
}
return self::$config[$key];
}
}
А этот controller.php:
namespace App\Core;
/**
* This is the "base controller class". All other "real" controllers extend this class.
* Whenever a controller is created, we also
* 1. initialize a session
*/
class Controller
{
public $templates;
public function __construct()
{
// always initialize a session
Session::init();
Auth::checkSessionConcurrency();
$this->templates = new \League\Plates\Engine(Config::get('PATH_VIEW'));
$this->db = new DB(Config::get('DB_TYPE'), Config::get('DB_HOST'), Config::get('DB_USER'), Config::get('DB_PASS'), Config::get('DB_NAME'), Config::get('DB_PORT'));
}
}
Теперь для контроллера индекса у меня есть:
namespace App\Front\Controller;
use App\Front\Model\NoteModel;
use App\Core\Config;
class IndexController extends \App\Core\Controller
{
/**
* Construct this object by extending the basic Controller class
*/
public function __construct()
{
parent::__construct();
}
public function index()
{
echo $this->templates->render('index/index', [NoteModel::getAllNotes()]);
}
}
Теперь в действии (PHP 7.2) я вижу эту ошибку:
Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in C:\xampp\htdocs\cms\application\config\config.development.php on line 4
я знаю: невозможно поставить ini_set после запуска сеанса в php> 7:
МОЕ ИСПРАВЛЕНИЕ:
Я работаю с контроллером и Двигаться, эти две строки до Session::init(); в Controller.php:
$this->templates = new \League\Plates\Engine(Config::get('PATH_VIEW'));
$this->db = new DB(Config::get('DB_TYPE'), Config::get('DB_HOST'), Config::get('DB_USER'), Config::get('DB_PASS'), Config::get('DB_NAME'), Config::get('DB_PORT'));
И в действии Не видеть / показывать ошибку. В чем проблема и мое ИСПРАВЛЕНИЕ (переместить код до сеанса) верный способ ?! Спасибо за любую помощь.
@ delboy1978uk: вы имеете в виду создать / добавить php.ini в корневую папку моего скрипта и удалить из файла конфигурации ?!
У вашей установки php будет php.ini в вашей папке xampp somehwre. Найдите его, измените настройки в соответствии с вашим кодом и перезапустите apache. Если это сработает, я напишу правильный ответ, чтобы другие знали, что делать. (Это должно сработать)
@ delboy1978uk: Конечно, но если у меня нет доступа для редактирования php.ini на сервере, я не могу исправить это предупреждение.
вы используете PHP как модуль apache? в таком случае вы также можете изменить настройки в .htaccess. secure.php.net/manual/en/configuration.changes.php
В противном случае я бы с самого начала поместил эти настройки в ваш index.php.
@ delboy1978uk: если добавление в index.php исправлено и не показывает предупреждающее сообщение, но как проверить, что ini_set включен и работает правильно ?!
пользователь ini_get (); может быть в вашем контроллере, чтобы проверить значение конфигурации echo ini_get ('session.cookie_httponly'); die ('--- остановись здесь ---');






Почему бы просто не установить эти настройки ini в php.ini?