PHP 配置文件中open_basedir選項做用

以下是php.ini中的原文說明以及默認配置:
; open_basedir, if set, limits all file operations to the defined directory
; and below. This directive makes most sense if used in a per-directory or
; per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
open_basedir = .
open_basedir可將用戶訪問文件的活動範圍限制在指定的區域,一般是其家目錄的路徑,也
可用符號"."來表明當前目錄。注意用open_basedir指定的限制其實是前綴,而不是目錄名。
舉例來講: 若"open_basedir = /dir/user", 那麼目錄 "/dir/user" 和 "/dir/user1"都是
能夠訪問的。因此若是要將訪問限制在僅爲指定的目錄,請用斜線結束路徑名。例如設置成:
"open_basedir = /dir/user/"

open_basedir也能夠同時設置多個目錄, 在Windows中用分號分隔目錄,在任何其它系統中用
冒號分隔目錄。當其做用於Apache模塊時,父目錄中的open_basedir路徑自動被繼承。

有三種方法能夠在Apache中爲指定的用戶作獨立的設置:

(a) 在Apache的httpd.conf中Directory的相應設置方法:

php_admin_value open_basedir /usr/local/apache/htdocs/
#設置多個目錄能夠參考以下:
php_admin_value open_basedir /usr/local/apache/htdocs/:/tmp/


(b) 在Apache的httpd.conf中VirtualHost的相應設置方法:
php_admin_value open_basedir /usr/local/apache/htdocs/
#設置多個目錄能夠參考以下:
php_admin_value open_basedir /var/www/html/:/var/tmp/

(c) 由於VirtualHost中設置了open_basedir以後, 這個虛擬用戶就不會再自動繼承php.ini
中的open_basedir設置值了,這就難以達到靈活的配置措施, 因此建議您不要在VirtualHost
中設置此項限制. 例如,能夠在php.ini中設置open_basedir = .:/tmp/, 這個設置表示容許
訪問當前目錄(即PHP腳本文件所在之目錄)和/tmp/目錄.

請注意: 若在php.ini所設置的上傳文件臨時目錄爲/tmp/, 那麼設置open_basedir時就必須
包含/tmp/,不然會致使上傳失敗. 新版php則會提示"open_basedir restriction in effect"
警告信息, 但move_uploaded_file()函數仍然能夠成功取出/tmp/目錄下的上傳文件,不知道
這是漏洞仍是新功能.

針對ShopEx472版本的配置:

open_basedir = "D:/Server;../catalog;../include;../../home;../syssite;../templates;../language;../../language;../../../language;../../../../language"php

相關文章
相關標籤/搜索