4

严重性:警告

消息:mkdir(): open_basedir 限制生效。File() 不在允许的路径内:(/home/thelazyppl/:/home/thelazyppl:/tmp:/usr/local/lib/php/)

文件名:drivers/Session_files_drivers.php

该站点的根文件夹是一个 wordpress 网站,因此我在根文件夹中为 Codeigniter 站点创建了一个名为“Bazaar”的子域。我已经在 config.php 和 wordpress htaccess 中设置了 base_url 以允许文件夹“Bazaar”,但仍然没有任何工作。

我的主机不允许修改 php.ini 文件以禁用 open_basedir,是否有其他方法可以允许它,或者我在此过程中做错了什么?

4

3 回答 3

9

您的 CodeIgniter 安装正在尝试将其会话文件保存到不可写的位置。当您使用共享主机时,我建议您将会话数据存储在数据库中。

根据导致错误的文件名,您似乎在使用 CodeIgniter 3。用户指南中有一些关于如何正确配置它的信息。

要继续使用文件驱动程序,您需要更改$config['sess_save_path']变量的内容以将其指向类似/tmp或的内容(在您的or目录之外的 FTP 中/home/thelazyppl/tmp创建文件夹之后)。tmpwwwpublic_html

更好的选择是使用数据库驱动程序,其详细信息就在下面。

如果您在 CodeIgniter 2 上遇到这些问题,您肯定需要启用数据库。为此,您需要将$config['sess_use_database']选项更改为TRUE然后运行​​CodeIgniter 2 用户指南中显示的 SQL 。

于 2015-02-10T04:09:13.147 回答
4

看完官方文档

在 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”设置并使用它。请不要依赖这种行为,因为它会在未来被删除。

然后,当然,创建数据库表……</p>

对于 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;
于 2018-10-24T13:19:47.433 回答
0

我在 Plesk 中托管的 codeigniter 网站遇到了同样的问题,以供参考我设置解决方案对我有用

原因

PHP 脚本正在尝试访问不允许访问的文件夹。此限制受到每个虚拟主机的 PHP open_basedir 变量的限制。默认情况下,open_basedir 设置为允许 PHP 文件访问 tmp 和 httpdocs 目录。解析度

注意:如果您是域所有者并且您无法使用 open_basedir 设置,请联系您的服务提供商寻求帮助。

调整 open_basedir 的值以包含错误消息中缺少的路径:

在 Plesk 中,转至域 > example.com > PHP 设置。

修改open_basedir的值:

对于 Linux

下面是将目录 /var/lib/php/session 包含到 open_basedir 的示例:

{WEBSPACEROOT}{/}{:}{TMP}{/}{:}/var/lib/php/session

对于 Windows

下面是将目录 E:\custom_folder\sessions 包含到 open_basedir 的示例:

    {WEBSPACEROOT}{/};{TMP};{/};"E:\custom_folder\sessions\"

应用更改。

来源 Plesk

于 2020-01-08T22:42:25.790 回答