Codeigniter open_basedir_restriction对共享主机有效

时间:2015-02-09 16:22:42

标签: php codeigniter open-basedir

严重性:警告

消息: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,是否有其他方法允许它或者我在这个过程中做错了什么?

3 个答案:

答案 0 :(得分:7)

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

根据导致错误的文件名,看起来你在CodeIgniter 3上。user guide中有一些关于如何正确配置它的信息。

要继续使用文件驱动程序,您需要更改$config['sess_save_path']变量的内容,使其指向/tmp/home/thelazyppl/tmp(在您创建{{1}之后在tmpwww目录之外的FTP中的文件夹。

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

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

答案 1 :(得分:0)

阅读official documentation

之后

在config.php中

您需要修改

FROM

$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”,则会话库将查找旧的“ 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;

答案 2 :(得分:0)

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

原因

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

注意:如果您是域所有者,但是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\"

应用更改。

source Plesk