配置文件
php.ini
在 PHP 啟動(dòng)時(shí)被讀取。對(duì)于服務(wù)器模塊版本的 PHP,僅在 web 服務(wù)器啟動(dòng)時(shí)讀取一次比勉。對(duì)于 CGI 和 CLI 版本埋同,每次調(diào)用都會(huì)讀取州叠。
- Apache web 服務(wù)器在啟動(dòng)時(shí)會(huì)把目錄轉(zhuǎn)到根目錄,這將導(dǎo)致 PHP 嘗試在根目錄下讀取 php.ini凶赁,如果存在的話咧栗。
- 在 php.ini 中可以使用環(huán)境變量逆甜。
由擴(kuò)展庫(kù)處理的php.ini指令,其文檔分別在各擴(kuò)展庫(kù)的頁(yè)面致板。內(nèi)核配置選項(xiàng)見附錄交煞。不過也許不是所有的 PHP 指令都在手冊(cè)中有文檔說(shuō)明。要得到自己的 PHP 版本中的配置指令完整列表斟或,請(qǐng)閱讀php.ini文件素征,其中都有注釋。此外萝挤,也許從 Git 得到的? 最新版php.ini 也有幫助御毅。
注:php.ini的詳細(xì)配置,可參見PHP官方手冊(cè):http://php.net/manual/zh/ini.php
PHP的配置文件信息怜珍,參見PHP官方手冊(cè):http://php.net/manual/zh/configuration.file.php
.user.ini 文件
自 PHP 5.3.0 起端蛆,PHP 支持基于每個(gè)目錄的 .htaccess 風(fēng)格的 INI 文件。此類文件僅被 CGI/FastCGI SAPI 處理酥泛。此功能使得 PECL 的 htscanner 擴(kuò)展作廢今豆。如果使用 Apache,則用 .htaccess 文件有同樣效果柔袁。
語(yǔ)法
語(yǔ)法非常簡(jiǎn)單晚凿。
空白字符和以分號(hào)開始的行被簡(jiǎn)單地忽略。
章節(jié)標(biāo)題(例如: [php])也被簡(jiǎn)單地忽略瘦馍,即使將來(lái)它們可能有某種意義歼秽。
設(shè)置指令的格式如下:directive = value
注意:指令名 directive 是大小寫敏感的。要區(qū)分大小寫情组。
值(value)可以是:
- 用引號(hào)界定的字符串(如:"foo")
- 一個(gè)數(shù)字(整數(shù)或浮點(diǎn)數(shù)燥筷,如:0, 1, 34, -1, 33.55)
- 一個(gè)PHP常量(如:E_ALL, M_PI)
- 一個(gè)INI常量(On, Off, none)
- 一個(gè)表達(dá)式(如:E_ALL & ~E_NOTICE)
一個(gè)空字符串可以用在等號(hào)后不寫任何東西表示,或者用 none 關(guān)鍵字:
foo = ; 將foo設(shè)為空字符串
foo = none ; 將foo設(shè)為空字符串
foo = "none" ; 將foo設(shè)為字符串''none''
INI文件中的表達(dá)式僅使用:
位運(yùn)算符院崇、邏輯非肆氓、圓括號(hào),| 位或 底瓣、& 位與 谢揪、~ 位非 、! 邏輯非 捐凭,布爾標(biāo)志用 On 表示打開拨扶,用 Off 表示關(guān)閉。
如果你在指令值中使用動(dòng)態(tài)擴(kuò)展(PHP擴(kuò)展或Zend擴(kuò)展)中的常量茁肠,那么你只能在加載這些動(dòng)態(tài)擴(kuò)展的指令行之后使用這些常量患民。
重要配置 - 變量相關(guān)
啟用全局變量
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
register_globals=off | "0" | PHP_INI_PERDIR | 在 PHP <= 4.2.3 時(shí)是 PHP_INI_ALL。 從 PHP 5.3.0 起不推薦使用垦梆。 在 PHP 5.4.0 中移除該選項(xiàng)匹颤。 |
有些程序(如OSC)需要啟用全局變量仅孩。
這個(gè)設(shè)置的作用是:關(guān)閉自動(dòng)注冊(cè)的全局變量,
在設(shè)置為On的時(shí)候印蓖,php會(huì)將 $_POST辽慕,$_GET,$_COOKIE赦肃,$_ENV溅蛉,$_SESSION數(shù)組中的$key=>$value 直接注冊(cè)為變量,比如$_POST['username']就會(huì)被注冊(cè)為$username摆尝。
雖然方便了調(diào)用温艇,但是會(huì)有三個(gè)問題:
- 不知道變量是哪里來(lái)的,$_POST來(lái)的還是$_SESSION來(lái)的呢堕汞?非常不方便別人閱讀代碼勺爱。
- 變量之間互相覆蓋,引起不必要的麻煩讯检。
- 安全問題琐鲁。
所以要設(shè)置為Off。
短標(biāo)簽
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
short_open_tag = on | “1” | PHP_INI_ALL | 在 PHP 4.0.0 時(shí)是 PHP_INI_ALL人灼。 在 PHP < 5.3.0 時(shí)是 PHP_INI_PERDIR围段。 |
注:關(guān)于可修改范圍,參見:http://blog.csdn.net/XavierDarkness/article/details/78031266
這個(gè)設(shè)置決定是否允許使用 PHP 代碼開始標(biāo)志的縮寫形式(<? ?>)投放。如果禁用了奈泪,必須使用 PHP 代碼開始
標(biāo)志的完整形式(<?php ?>)。
本指令也會(huì)影響到縮寫形式 <?=灸芳,它和 <? echo 等價(jià)涝桅。使用此縮寫需要 short_open_tag 的值為 On。 從
PHP 5.4.0 起烙样, <?= 總是可用的冯遂。
短標(biāo)簽在安全上的作用:當(dāng)程序過濾<?php ?>形式的PHP代碼時(shí),可以用@int_set('short_open_tag',0)
開啟短標(biāo)簽谒获,用短標(biāo)簽形式<? ?>繞過過濾蛤肌。
安全模式
安全模式
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
safe_mode=off | "0" | PHP_INI_SYSTEM | 在 PHP 5.4.0 中移除該選項(xiàng)。 |
php的安全模式是個(gè)非常重要的內(nèi)嵌的安全機(jī)制批狱,能夠控制一些php中的函數(shù)裸准,比如system(),同時(shí)把很多文件操作函數(shù)進(jìn)行了權(quán)限控制精耐,也不允許對(duì)某些關(guān)鍵文件的文件狼速,比如/etc/passwd,但是默認(rèn)的php.ini是沒有打開安全模式的卦停。
當(dāng) safe_mode 設(shè)置為 on向胡,PHP 將通過文件函數(shù)或其目錄檢查當(dāng)前腳本的擁有者是否和將被操作的文件的擁有者相匹配。
在 PHP 5.4.0 中移除該選項(xiàng)惊完。
安全模式下執(zhí)行程序主目錄
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
safe_mode_exec_dir=/var/www/html | NULL | PHP_INI_SYSTEM | 自 PHP 4.1.0 起可用 |
如果 PHP 使用了安全模式僵芹,system() 和其它程序執(zhí)行函數(shù)將拒絕啟動(dòng)不在此目錄中的程序。必須使用 / 作為目錄分隔符小槐,包括 Windows 中拇派。
簡(jiǎn)單來(lái)說(shuō),就是這個(gè)目錄下可以執(zhí)行凿跳。
禁用類/函數(shù)
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
disable_class= | "" | php.ini only | 從 PHP 4.3.2 起可用件豌。 |
disable_functions= | "" | php.ini only | 從 PHP 4.0.1 起可用。 |
disable_functions=opendir,readdir,scandir,fopen,unlink
禁用某些類控嗜,禁止某些函數(shù)茧彤。接受逗號(hào)分隔的函數(shù)名列表作為參數(shù)。只能設(shè)置在 php.ini 中疆栏。
- disable_classes string
本指令可以使你出于安全的理由禁用某些類曾掂。用逗號(hào)分隔類名。disable_classes 不受安全模式的影響壁顶。 本指令只能設(shè)置在 php.ini 中珠洗。例如不能將其設(shè)置在 httpd.conf。 - disable_functions string
本指令允許你基于安全原因禁止某些函數(shù)若专。接受逗號(hào)分隔的函數(shù)名列表作為參數(shù)许蓖。 disable_functions 不受安全模式的影響。 本指令只能設(shè)置在 php.ini 中调衰。例如不能將其設(shè)置在 httpd.conf膊爪。
上傳文件及目錄權(quán)限
設(shè)置上傳文件大小
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
file_uploads = on | "1" | PHP_INI_SYSTEM | 在 PHP <= 4.2.3 時(shí)是 PHP_INI_ALL。 從 PHP 4.0.3 起可用窖式。 |
upload_max_filesize = 8M | "2M" | PHP_INI_PERDIR | 在 PHP <= 4.2.3 時(shí)是 PHP_INI_ALL蚁飒。 |
post_max_size = 8M | "8M" | PHP_INI_PERDIR | 在 PHP <= 4.2.3 時(shí)是 PHP_INI_SYSTEM。 從 PHP 4.0.3 起可用萝喘。 |
POST的數(shù)值要大于等于upload淮逻,否則upload不起作用。
詳見:http://php.net/manual/zh/ini.core.php#ini.file-uploads
文件上傳臨時(shí)目錄
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
upload_tmp_dir = | NULL | PHP_INI_SYSTEM |
上傳臨時(shí)文件保存的目錄阁簸,需要可寫爬早,如果不設(shè)置,則采用系統(tǒng)臨時(shí)目錄启妹。(/tmp)
用戶訪問目錄限制
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
open_basedir = .:/tmp/ | NULL | PHP_INI_ALL | 在 PHP < 5.2.3 時(shí)是 PHP_INI_SYSTEM筛严。 |
使用open_basedir選項(xiàng)能夠控制PHP腳本只能訪問指定的目錄,這樣能避免PHP腳本訪問不應(yīng)該訪問的文件饶米,一定程度上限制了phpshell的危害桨啃。我們一般可以設(shè)置為只能訪問網(wǎng)站目錄,表示允許訪問當(dāng)前目錄(即PHP腳本文件所在之目錄)和/tmp/目錄车胡,有效防止php木馬跨站運(yùn)行。
將 PHP 所能打開的文件限制在指定的目錄樹照瘾,包括文件本身匈棘。本指令不受安全模式打開或者關(guān)閉的影響。
特殊值 . 指明腳本的工作目錄將被作為基準(zhǔn)目錄析命。但這有些危險(xiǎn)主卫,因?yàn)槟_本的工作目錄可以輕易被 chdir() 而改變。
在 httpd.conf 文件中中鹃愤,open_basedir 可以像其它任何配置選項(xiàng)一樣用“php_admin_value open_basedir none”[方法關(guān)閉(例如某些虛擬主機(jī)中)簇搅。
在 Windows 中,用分號(hào)(;)分隔目錄软吐。在任何其它系統(tǒng)中用冒號(hào)(:)分隔目錄瘩将。作為 Apache 模塊時(shí),父目錄中的 open_basedir 路徑自動(dòng)被繼承关噪。
注意:用 open_basedir 指定的限制實(shí)際上是前綴鸟蟹,不是目錄名。也就是說(shuō)“open_basedir = /dir/incl”也會(huì)允許訪問“/dir/include”和“/dir/incls”使兔,如果它們存在的話建钥。如果要將訪問限制在僅為指定的目錄,用斜線結(jié)束路徑名虐沥。例如:“open_basedir = /dir/incl/”熊经。
默認(rèn)是允許打開所有文件。
錯(cuò)誤信息
錯(cuò)誤信息控制
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
display_error = On | "1" | PHP_INI_ALL |
該選項(xiàng)設(shè)置是否將錯(cuò)誤信息作為輸出的一部分顯示到屏幕欲险,或者對(duì)用戶隱藏而不顯示镐依。
站點(diǎn)發(fā)布后應(yīng)該關(guān)閉這項(xiàng)功能,以免暴露信息天试。調(diào)試的時(shí)候當(dāng)然是要On的槐壳,不然就什么錯(cuò)誤信息也看不到了。
設(shè)置 "stderr" 表示發(fā)送到 stderr 而不是 stdout喜每。 "stderr"從 PHP 5.2.4 開始可用务唐。在以前的版本中,該配置值的類型為 boolean带兜。
Note:
盡管 display_errors 也可以在運(yùn)行時(shí)設(shè)置 (使用 ini_set())枫笛, 但是腳本出現(xiàn)致命錯(cuò)誤時(shí)任何運(yùn)行時(shí)的設(shè)置都是無(wú)效的。 因?yàn)樵谶@種情況下預(yù)期運(yùn)行的操作不會(huì)被執(zhí)行刚照。
設(shè)置錯(cuò)誤報(bào)告級(jí)別
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
error_reporting = E_ALL | NULL | PHP_INI_ALL |
這個(gè)設(shè)置的作用是將錯(cuò)誤級(jí)別設(shè)置為最高刑巧,可以顯示所有的問題,方便查錯(cuò),也有利于寫出高質(zhì)量的代碼啊楚。
日志級(jí)別是一些常量吠冤,在php.ini中有寫,推薦使用 E_ALL | E_STRICT特幔,即所有級(jí)別咨演。
設(shè)置錯(cuò)誤報(bào)告的級(jí)別闸昨。該參數(shù)可以是一個(gè)任意的表示二進(jìn)制位字段的整數(shù)蚯斯,或者常數(shù)名稱。錯(cuò)誤級(jí)別和常數(shù)是在 預(yù)定義常量定義的饵较,在php.ini 之中也有專門的說(shuō)明拍嵌。在程序運(yùn)行時(shí),還可以通過 error_reporting() 函數(shù)進(jìn)行設(shè)置循诉。
在PHP 4和PHP 5之中横辆,其默認(rèn)值為 E_ALL & ~E_NOTICE。 該設(shè)置表示除了 E_NOTICE 其他都顯示的錯(cuò)誤級(jí)別茄猫。在開發(fā)過程中很有必要顯示它們狈蚤。
詳見:http://php.net/manual/zh/errorfunc.configuration.php#ini.error-reporting
錯(cuò)誤日志
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
error_log = | NULL | PHP_INI_ALL |
錯(cuò)誤日志的位置,必須對(duì)web用戶可寫入划纽,如果不定義則默認(rèn)寫入到web服務(wù)器的錯(cuò)誤日志中去 脆侮。
設(shè)置腳本錯(cuò)誤將被記錄到的文件。該文件必須是web服務(wù)器用戶可寫的勇劣。如果特殊值 syslog 被設(shè)置靖避,則將錯(cuò)誤信息發(fā)送到系統(tǒng)日志記錄器。在Unix以及類似系統(tǒng)上比默,使用的是 syslog(3) 幻捏,而在 Windows NT 類系統(tǒng)上則為事件日志。Windows 95上不支持系統(tǒng)日志記錄命咐。參見:syslog(). 如果該配置沒有設(shè)置篡九,則錯(cuò)誤信息會(huì)被發(fā)送到 SAPI 錯(cuò)誤記錄器。例如醋奠,出現(xiàn)在Apache的錯(cuò)誤日志中榛臼,或者在CLI中發(fā)送到 stderr。
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
log_errors = on | NULL | PHP_INI_ALL |
設(shè)置是否將腳本運(yùn)行的錯(cuò)誤信息記錄到服務(wù)器錯(cuò)誤日志或者error_log之中钝域。注意讽坏,這是與服務(wù)器相關(guān)的特定配置項(xiàng)。
魔術(shù)引號(hào)及遠(yuǎn)程文件
魔術(shù)引號(hào) 【W(wǎng)arning:本特性已自 PHP 5.3.0 起廢棄并將自 PHP 5.4.0 起移除例证÷肺兀】
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
magic_quotes_gpc = On | “1” | PHP_INI_PERDIR | 在 PHP <= 4.2.3 時(shí)是 PHP_INI_ALL。 從 PHP 5.3.0 起不推薦使用。 在 PHP 5.4.0 中移除該選項(xiàng) |
magic_quotes_runtime = Off | “0” | PHP_INI_ALL | 在 PHP 5.4.0 中移除該選項(xiàng) |
為 GPC (Get/Post/Cookie) 操作設(shè)置 magic_quotes 狀態(tài)胀葱。 當(dāng) magic_quotes 為 on漠秋,所有的 ' (單引號(hào))、"
(雙引號(hào))抵屿、\(反斜杠)和 NULL 被一個(gè)反斜杠自動(dòng)轉(zhuǎn)義庆锦。
Note:
在 PHP 4,$_ENV也會(huì)被轉(zhuǎn)義轧葛。
Note:
如果 magic_quotes_sybase 也是 ON搂抒,它會(huì)完全覆蓋 magic_quotes_gpc。 兩個(gè)指令都啟用意味著只有單引號(hào)被轉(zhuǎn)義為 ''尿扯。 雙引號(hào)求晶、反斜杠和 NUL's 不會(huì)被轉(zhuǎn)義。
如果啟用了 magic_quotes_runtime衷笋,大多數(shù)返回任何形式外部數(shù)據(jù)的函數(shù)芳杏,包括數(shù)據(jù)庫(kù)和文本段將會(huì)用反斜線轉(zhuǎn)義引號(hào)。 如果啟用了magic_quotes_sybase辟宗,單引號(hào)會(huì)被單引號(hào)轉(zhuǎn)義而不是反斜線爵赵。
受 magic_quotes_runtime 影響的函數(shù)(不包括 PECL 里的函數(shù)):
參見:http://blog.csdn.net/XavierDarkness/article/details/78032716
是否允許打開遠(yuǎn)程文件
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
allow_url_fopen = on | "1" | PHP_INI_SYSTEM | 在 PHP <= 4.3.4 時(shí)是 PHP_INI_ALL。 |
本選項(xiàng)激活了 URL 形式的 fopen 封裝協(xié)議使得可以訪問 URL 對(duì)象例如文件泊脐。默認(rèn)的封裝協(xié)議提供用 ftp 和 http 協(xié)議來(lái)訪問遠(yuǎn)程文件空幻,一些擴(kuò)展庫(kù)例如 zlib可能會(huì)注冊(cè)更多的封裝協(xié)議。
Note:
出于安全性考慮晨抡,此選項(xiàng)只能在 php.ini 中設(shè)置氛悬。
Note:
此選項(xiàng)是緊接著版本 4.0.3 發(fā)布后引進(jìn)的。版本 4.0.3 以及之前的版本只能在編譯時(shí)通過配置項(xiàng) --disable-url-fopen-wrapper
來(lái)取消此特性耘柱。
Warning:Windows 版在 PHP 4.3.0 之前如捅,以下函數(shù)不支持遠(yuǎn)程文件訪問:include,include_once, require调煎,require_once 和GD 和圖像處理 函數(shù)中的 imagecreatefromXXX 函數(shù)镜遣。
是否允許包含遠(yuǎn)程文件
名字 | 默認(rèn) | 可修改范圍 | 更新日志 |
---|---|---|---|
allow_url_include = off | “0” | PHP_INI_ALL | 在 PHP 5 時(shí)是 PHP_INI_SYSTEM。 從 PHP 5.2.0 起可用士袄。 |
本選項(xiàng)激活允許 include, include_once, require, require_once等函數(shù)使用 URL 形式的 fopen 封裝協(xié)議悲关。簡(jiǎn)
單來(lái)說(shuō)就是可以包含遠(yuǎn)程文件。
Note:
此選項(xiàng)要求開啟 allow_url_fopen 娄柳。