chmod()hasbeendisabledforsecurityreasons

flowerszhong發表於2016-08-08

最近用 codeigniter 寫一個小系統,引用了session 庫,codeigniter預設的session儲存方式為files。鑑於安全性,檔案即肯定涉及到許可權問題。

在類 UNIX 作業系統中,這可以通過在該目錄上執行 chmod 命令,將許可權設定為 0700 來實現, 這樣就可以只允許目錄的所有者執行讀取和寫入操作。但是要注意的是,指令碼的執行者通常不是你自己, 而是類似於 `www-data` 這樣的使用者,所以只設定許可權可能會破壞你的程式。

但使用者買的是萬網的虛擬主機,預設是沒有開啟 chmod 函式的設定。於是就碰到了這個問題:”chmod() has been disabled for security reasons”。解決方法有兩個:

1.開啟設定

登入萬網虛擬主機控制皮膚:點選左側【高階環境設定】->【php.ini設定】,將【chmod函式】設定為開啟。

2.更換session儲存方式為資料庫驅動

在config.php檔案裡設定

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

要求在資料庫中建表:ci_sessions,如MySql:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `id` varchar(40) 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`)
);

參考資料

http://codeigniter.org.cn/user_guide/libraries/sessions.html
https://help.aliyun.com/knowledge_detail/36434.html


相關文章