Codeigniter open_basedir_restriction действует на виртуальном хостинге

Серьезность: Предупреждение

Сообщение: mkdir (): действует ограничение open_basedir. File () находится за пределами разрешенного пути (путей): (/ home / thelazyppl /: / home / thelazyppl: / tmp: / usr / local / lib / php /)

Имя файла: drivers / Session_files_drivers.php

Корневая папка сайта — это сайт WordPress, поэтому я создал поддомен для сайта Codeigniter с именем «Bazaar» в корневой папке. Я уже настроил base_url в config.php и WordPress htaccess, чтобы разрешить папку «Bazaar», но все еще ничего не работает.

Мой хост не позволяет модификациям файла php.ini отключить open_basedir, есть ли другой способ разрешить это или я сделал что-то не так в процессе?

3

Решение

Ваша установка CodeIgniter пытается сохранить файлы своего сеанса в недоступном для записи месте. Поскольку вы пользуетесь виртуальным хостингом, я бы порекомендовал хранить данные вашего сеанса в базе данных.

Исходя из имени файла, вызвавшего ошибку, похоже, что вы находитесь на CodeIgniter 3. Есть некоторая информация в гид пользователя о том, как правильно его настроить.

Чтобы продолжить использовать драйвер файлов, вам нужно будет изменить содержимое $config['sess_save_path'] переменная, чтобы указать на что-то вроде /tmp или же /home/thelazyppl/tmp (после того, как вы создали tmp папка в вашем FTP за пределами вашего www или же public_html каталог).

Лучшим вариантом будет использовать драйвер базы данных, подробности которого чуть ниже.

Если у вас возникли эти проблемы в CodeIgniter 2, вам определенно необходимо включить базу данных. Для этого вы бы изменили $config['sess_use_database'] возможность TRUE а затем запустите SQL, показанный в CodeIgniter 2 руководство пользователя.

7

Другие решения

После прочтения официальная документация

В config.php

Вам нужно изменить

ОТ

$config['sess_driver'] = 'files';
$config['sess_save_path'] = NULL;

К

$config['sess_driver'] = 'database';
$config['sess_save_path'] = 'ci_sessions';

а также вам нужно создать таблицу по имени ci_sessions в случае, если он не существует.

Чтобы использовать драйвер сеанса базы данных, вы также должны создать эту таблицу, о которой мы уже упоминали, а затем установить ее в качестве $config['sess_save_path'] значение. Например, если вы хотите использовать «ci_sessions» в качестве имени таблицы, вы должны сделать это:

Заметка

Если вы обновили предыдущую версию CodeIgniter и у вас не настроен параметр «sess_save_path», то библиотека Session будет искать старый параметр «sess_table_name» и использовать его вместо этого. Пожалуйста, не полагайтесь на это поведение, так как оно будет удалено в будущем.

И затем, конечно, создать таблицу базы данных …

Для MySQL:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(128) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
KEY `ci_sessions_timestamp` (`timestamp`)
);

Для PostgreSQL:

CREATE TABLE "ci_sessions" (
"id" varchar(128) NOT NULL,
"ip_address" varchar(45) NOT NULL,
"timestamp" bigint DEFAULT 0 NOT NULL,
"data" text DEFAULT '' NOT NULL
);

CREATE INDEX "ci_sessions_timestamp" ON "ci_sessions" ("timestamp");

Вам также нужно будет добавить ПЕРВИЧНЫЙ КЛЮЧ в зависимости от настроек «sess_match_ip». Приведенные ниже примеры работают как на MySQL, так и на PostgreSQL:

// When sess_match_ip = TRUE
ALTER TABLE ci_sessions ADD PRIMARY KEY (id, ip_address);

// When sess_match_ip = FALSE
ALTER TABLE ci_sessions ADD PRIMARY KEY (id);

// To drop a previously created primary key (use when changing the setting)
ALTER TABLE ci_sessions DROP PRIMARY KEY;
0

По вопросам рекламы [email protected]