Применение Codeigniter 3 к новому хосту домена дает ошибку mkdir() для session_files_drive.php

У меня есть настройка инфраструктуры Codeigniter, которую я перемещаю между настройками нескольких доменов в качестве отправной точки по умолчанию. Это дает мне следующую ошибку. То же самое, когда я добавил чистую установку CI3 и добавил информацию о базе данных, а также следующие автозагрузки:

$autoload['libraries'] = array('database', 'session', 'user_agent', 'upload');
$autoload['helper'] = array('form', 'url');

Я попытался удалить библиотеку 'session',, и ошибка исчезла.

Ниже вы видите ошибку:

A PHP Error was encountered
Severity: Warning

Message: mkdir(): Invalid path

Filename: drivers/Session_files_driver.php

Line Number: 136

Backtrace:

File: /customers/9/0/3/***.***/httpd.www/index.php
Line: 315
Function: require_once

A PHP Error was encountered
Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at /customers/9/0/3/***.***/httpd.www/system/core/Exceptions.php:271)

Filename: core/Common.php

Line Number: 564

Backtrace:

An uncaught Exception was encountered
Type: Exception

Message: Session: Configured save path '' is not a directory, doesn't exist or cannot be created.

Filename: /customers/9/0/3/***.***/httpd.www/system/libraries/Session/drivers/Session_files_driver.php

Line Number: 138

Backtrace:

File: /customers/9/0/3/***.***/httpd.www/index.php
Line: 315
Function: require_once

Я скрыл доменное имя. Извините за это, но я не думаю, что это крайне важно.

Вот мой конфиг для сессий:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

пожалуйста, проверьте это сообщение: stackoverflow.com/questions/31042456/…

Vickel 05.02.2019 22:55

также помните: если вы добавите какой-либо пробел/строку перед стартовым тегом php (<?php) в контроллере, он может отображать ошибку такого типа: «Невозможно изменить информацию заголовка — заголовки уже отправлены (вывод начался в /customers/9/0/ 3/***.***/httpd.www/system/core/Exceptions.ph‌​p:271) ".

Vickel 06.02.2019 00:33

и это: stackoverflow.com/questions/8028957/…, надеюсь, это поможет...

Vickel 06.02.2019 00:35

Просматривая обратную трассировку (кстати, да, можно скрыть имя домена), кажется, что либо ваша библиотека сеансов неправильно настроена, либо каталог, в котором вы собираетесь хранить журналы, не существует или недоступен для записи. Не могли бы вы опубликовать конфигурацию сеанса?

Javier Larroulet 06.02.2019 03:20

@Vickel Ваше первое предложение решило мою проблему с mkdir()! Большое спасибо! Но как мне отметить ваш комментарий как правильный? Или вам нужно дать правильный ответ, возможно, для этого?

moiamserru 06.02.2019 07:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
1 236
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы используете драйвер хранилища файловых сессий Codeigniter /default), вам нужно помнить, что он поддерживает только абсолютные пути для $config['sess_save_path'].

в config.php указано:

|   The location to save sessions to, driver dependent.
|
|   For the 'files' driver, it's a path to a writable directory.
|   WARNING: Only absolute paths are supported!
|
|   For the 'database' driver, it's a table name.
|   Please read up the manual for the format with other session drivers.
|
|   IMPORTANT: You are REQUIRED to set a valid save path!

в зависимости от вашей среды используйте их:

mkdir /<path to your application directory>/sessions/

chmod 0700 /<path to your application directory>/sessions/

chown www-data /<path to your application directory>/sessions/

или

$config['sess_save_path'] = sys_get_temp_dir(); 
//php function which returns the directory path used for temporary files

подробнее о Драйвер файлов CI-сессий

P.S. взгляните на Session_files_driver.php (в вашем каталоге system/session/driver). Там вы видите использование mkdir в строке 136: if ( ! mkdir($save_path, 0700, TRUE))=>>through error if dir is not writable).

У меня не было $config['sess_save_path'] = sys_get_temp_dir(); установить в моем файле конфигурации. После добавления заработало как надо! Спасибо!

moiamserru 06.02.2019 17:20

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

После объединения двух таблиц возвращает только один результат в codeigniter
Как хранить несколько продуктов в добавлении в корзину, используя сеанс в codeigniter-3
Определить URL-адрес запроса ajax-запроса
Слишком много времени уходит на экспорт excel с использованием библиотеки spout с php и mysqli?
Создайте ссылку действия на другую страницу или каталоги с помощью PHP внутри HTML-страниц
Получение контроллера формы сценария платежного шлюза и отображение в представлении, но кнопка оплаты не отображается
Событие onchange не работает. Выберите раскрывающийся список, исходящий от контроллера
Я передаю два результата запроса внутри представления, но работает только один результат. Пожалуйста, дайте мне решение
Как найти диапазон start_time и end_time, если он найден в диапазоне, а затем проверить start_date и end_date
Хранить данные массива в mysql с помощью codeigniter-3