Php Codeigniter open_basedir_限制对共享主机有效

Php Codeigniter open_basedir_限制对共享主机有效,php,codeigniter,open-basedir,Php,Codeigniter,Open Basedir,严重性:警告 消息:mkdir():open_basedir限制生效。文件()不在允许的路径内:(/home/thelazyppl/:/home/thelazyppl:/tmp:/usr/local/lib/php/) 文件名:drivers/Session\u files\u drivers.php 该站点的根文件夹是wordpress网站,因此我在根文件夹中为Codeigniter站点“Bazaar”创建了一个子域。我已经在config.php和wordpress htaccess中设置了b

严重性:警告

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

文件名:drivers/Session\u files\u drivers.php

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


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

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

根据导致错误的文件名,看起来您使用的是CodeIgniter 3。中有一些关于如何正确配置的信息

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

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

如果您在CodeIgniter 2上遇到这些问题,您肯定需要启用数据库。为此,您需要将
$config['sess\u use\u database']
选项更改为
TRUE
,然后在读取

在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\u save\u path']
值。例如,如果要使用“ci_会话”作为表名,可以执行以下操作:

注意

如果您已从以前版本的CodeIgniter升级,并且没有配置“sess\u保存\u路径”,则会话库将查找旧的“sess\u表\u名称”设置并使用它。请不要依赖此行为,因为它将在将来被删除

然后,当然,创建数据库表

对于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");
// 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;
您还需要根据“sess\u match\u ip”设置添加主键。以下示例适用于MySQL和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");
// 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;

我在Plesk托管的codeigniter网站上也遇到了同样的问题 作为参考,我正在设置适合我的解决方案

原因

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

注意:如果您是域所有者,并且open_basedir设置不适用于您,请与您的服务提供商联系以获得帮助

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

在Plesk中,转到Domains>example.com>PHP设置

修改open_basedir的值:

{WEBSPACEROOT}{/}{:}{TMP}{/}{:}/var/lib/php/session
对于Linux

下面是包含目录/var/lib/php/session以打开_basedir的示例:

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

下面是包含目录E:\custom\u folder\sessions以打开\u basedir的示例:

    {WEBSPACEROOT}{/};{TMP};{/};"E:\custom_folder\sessions\"
应用更改


是的,它在工作。。!!我们还可以设置
$config['sess\u save\u path']='/home/public/session'
它将成为您的会话目录路径