輕松學(xué)習(xí)PHP配置文件
PHP經(jīng)過長時(shí)間的發(fā)展,很多用戶都很了解PHP了,這里我發(fā)表一下個(gè)人理解,和大家討論討論。PHP.INI文件相信每位PHP愛好者都不會(huì)生疏,在PHP的上一個(gè)版本PHP3.0中它被命名為PHP3.INI。用NOTEPAD打開它,文件通常在操作系統(tǒng)的Windows目錄下。大家都看到,PHP.INI文件里面有很多分號(hào)“”,和Windows系統(tǒng)一樣。
這些分號(hào)用來表示注解,也就是說為了PHP配置文件清楚易懂,開發(fā)者在分號(hào)后面對(duì)每個(gè)配置功能做了簡短說明,系統(tǒng)處理時(shí)會(huì)忽略這些注解行。當(dāng)然,另外一個(gè)好處是,當(dāng)PHP系統(tǒng)配置有變化的時(shí)候,我們可以對(duì)某些行加上或去掉注解就行了,簡單又方便。
auto_prepend_file string 可以指定一個(gè)文件自動(dòng)地在讀取所有php文件之前解析執(zhí)行,可以為PHP、ASP、HTML等任何文件(不過圖像文件可不行),在非凡時(shí)候倒是很有用。比如你想在每個(gè)PHP頁面上增加一段廣告,又假設(shè)你在開發(fā)一個(gè)網(wǎng)站,想讓所有訪問者在讀取任何PHP頁面之前進(jìn)行身份驗(yàn)證,你就可以把你的驗(yàn)證代碼作成單獨(dú)文件,然后在這里設(shè)置string為該文件名就行啦。細(xì)心的讀者要問了:假如我只是某些文件需要這些功能,可怎么辦呀,開動(dòng)腦筋吧,舉個(gè)PHP配置文件例子:
- myprefix.php文件
- <?php
- if (strstr(strtoupper( PHP_SELF),"/PHPTEST/"))
- echo "我的廣告!<BR>";
- ?>
這樣只要設(shè)置:auto_prepend_file=“myprefix.php”,那么所有phptest目錄下的PHP文件就都包含你的廣告頭啦!還需要說明的是這個(gè)文件應(yīng)該放在include_path所指的路徑里面,不然可能會(huì)出錯(cuò)的,下面就會(huì)提到它。
auto_append_file string 和上面功能類似,只是自動(dòng)加在PHP文件末尾,而且PHP程序用exit()退出時(shí)就不管用了。有了這個(gè)功能,我們可以易如反掌地添加公司地址的腳注了!include_path string 這個(gè)參數(shù)的作用是讓include()、require()等函數(shù)在這里所定義的路徑中查找文件,是不是有點(diǎn)象DOS時(shí)代里用的SET PATH命令?這個(gè)參數(shù)可以提供一個(gè)路徑列表,不過在UNIX中路徑間用冒號(hào)分隔,在NT中用分號(hào),而且斜杠的方向也不相同。PHP配置文件如:
- UNIX例:include_path=.:/home/lib
- NT 例:include_path=".:c:homeib" 其中“.”表示當(dāng)前目錄。
- gpc_order string
GPC是GET/POST/COOKIE三種變量的***個(gè)字母,它的順序體現(xiàn)系統(tǒng)處理三種變量的優(yōu)先級(jí)別,從左到右,優(yōu)先權(quán)依次遞增。默認(rèn)設(shè)置為 GPC,這樣當(dāng)有其中任兩種或三種名稱相同變量傳遞到服務(wù)器時(shí),系統(tǒng)會(huì)按優(yōu)先權(quán)排序,只讀取優(yōu)先權(quán)較高的變量。又比如設(shè)定成 “GP” 表示忽視 cookie,并在存取方法 (method) 相同時(shí),以 POST 取代GET。當(dāng)然,我們?cè)诰幊踢^程中應(yīng)當(dāng)盡量避免同時(shí)用不同的方式傳遞名稱相同的變量,否則程序的可讀性會(huì)變壞,而且在配置不同的系統(tǒng)里可能會(huì)有不同的輸出結(jié)果。
magic_quotes_gpc boolean 這個(gè)參數(shù)能確定包含在GET/POST/COOKIE這三種變量中的非凡字符:單引號(hào)、雙引號(hào)、斜杠,是否加轉(zhuǎn)義字符反斜杠(就是C語言里常用的“”)?因?yàn)樵赑HP數(shù)據(jù)庫等系統(tǒng)中,單引號(hào)等字符通常有非凡意義,為了和真正的字符區(qū)分,我們可以設(shè)置magic_quotes_gpc=on,這樣假如我們從用戶端得到的變量中有單引號(hào)時(shí),會(huì)在前面加轉(zhuǎn)義符,然后我們可以根據(jù)需要用函數(shù)stripslashes(string str);(該函數(shù)可去掉字串中的反斜杠轉(zhuǎn)義符“”。若是連續(xù)二個(gè)反斜杠,則去掉一個(gè),留下一個(gè)。若只有一個(gè)反斜杠,就直接去掉。)來去掉轉(zhuǎn)義符“”,我們可以比較一下:
- <form>
- <input type="Text" value="" name="a">
- <input type="Submit">
- </form>
- <?php
- echo a;
- ?>
讓我們分別在magic_quotes_gpc=on和off的情況下,在文本框中輸入單引號(hào)、雙引號(hào),然后提交,看看有什么區(qū)別?SMTP string 指定郵件發(fā)送服務(wù)器的域名或IP地址,這樣我們就可以發(fā)信啦,比起微軟的ASP來,PHP的這個(gè)功能簡單方便得多了,有人要問,假如我沒有配備郵件服務(wù)器怎么辦?很簡單,只要填上當(dāng)?shù)豂SP的郵件服務(wù)器就行了。其實(shí)收發(fā)郵件服務(wù)器就像我們現(xiàn)實(shí)生活中的郵局一樣,在哪個(gè)郵局都能發(fā)信,而收信是在固定郵局。
- mysql.default_host string
- mysql.default_user string
- mysql.default_password string
用過ODBC的讀者們都知道,設(shè)置ODBC的時(shí)候總需要設(shè)置數(shù)據(jù)庫所在及其默認(rèn)的登錄用戶名和口令,這幾個(gè)參數(shù)也是這個(gè)意思,不過是用在MYSQL里面罷了。為了安全起見,我們還有必要在MYSQL里對(duì)該用戶的權(quán)力做一些限定,千萬不要偷懶用“root“?。〖偃鐬榱朔奖愣O(shè)置了這些參數(shù),那我們就能直接用函數(shù)mysql_connect()來連接數(shù)據(jù)庫了,注重這里可以不用任何參數(shù)!大家可能在想,雖然這樣很方便,同時(shí)也很危險(xiǎn)呀!別急,在PHP的安全模式里這些參數(shù)是無效的,下面我們來看看安全模式的設(shè)置吧。
#T#Safe mode boolean 這可不是WINDOWS 98的安全模式啊。當(dāng)PHP系統(tǒng)處于安全模式下時(shí),我們就能對(duì)PHP程序的行為進(jìn)行一定的控制,這時(shí)候一些數(shù)據(jù)庫比如MYSQL、INFOMIX等的默認(rèn)數(shù)據(jù)庫主機(jī)、用戶名、口令等設(shè)置無效,非法用戶就不能輕易連接數(shù)據(jù)庫了。而且在安全模式下safe_mode_allowed_env_vars string該項(xiàng)設(shè)置表示什么類型的系統(tǒng)環(huán)境變量可以被程序更改,若設(shè)置成safe_mode_allowed_env_vars=PHP_則表示只有 PHP_打頭的系統(tǒng)環(huán)境變量可以被修改,例如這時(shí)假如在程序中企圖使用putenv("windir=UUU");來修改環(huán)境變量,系統(tǒng)就會(huì)提示一個(gè)安全模式的保護(hù)錯(cuò)誤。還有,安全模式對(duì)系統(tǒng)命令system()等有一定限制,如只能在指定目錄運(yùn)行等,這樣能對(duì)系統(tǒng)文件有一定的保護(hù)作用。log_errors boolean 這個(gè)參數(shù)指定PHP程序出錯(cuò)時(shí)是否要將錯(cuò)誤信息記錄在 LOG文檔中。在NT系統(tǒng)中假如我們同時(shí)設(shè)置error_log =syslog的話,我們就能在事件查看器的應(yīng)用程序日志里看到PHP所發(fā)生過的錯(cuò)誤信息,這對(duì)測(cè)試一個(gè)大型的系統(tǒng)有些幫助。
- error_prepend_string = "<font color=ff0000>"
- error_append_string = "</font>"
這兩個(gè)設(shè)置參數(shù)更有意思啦,按如上設(shè)置,那么我們一眼就能看到:我們的程序是否出錯(cuò)了!因?yàn)樗墓δ苁前殉鲥e(cuò)信息設(shè)置成顯眼的紅顏色了。