php.ini配置文件
php.ini配置文件:
engine=On;
使PHP腳本語言引擎在Apache下有效。當設置engine=Off後不能解析PHP文件。
short_open_tag=Off;
設置<? code ?>標誌是否能被識別。設置short_open_tag=Off後不能識別在<? code ?>中的代碼
。
asp_tags = Off;
設置<% code %>標誌是否能被識別。設置asp_tags==Off;後不能識別。
precision = 14;
設置浮點類型數據顯示位數,包括小數點前的。此處表示共顯示14位。
y2k_compliance = Off ;
設置是否打開2000年適應。增強兼容性。
output_buffering = Off ;
打開緩存的輸出順序為:
echo,print--->php output_buffering--->server buffering--->brower buffering--->display
未打開緩存順序:
echo,print--->server buffering---> brower buffering--->display
只有輸出數據達到瀏覽器輸出緩存長度或腳本結束時瀏覽器才會將數據輸出到頁面上
例:
/////////////////////////////////////////////////////////////////////////////////////////////////////
<?php
for($i==0;$i<5;$i++)
{
echo $i.‘----------‘;
flush();
sleep(1);
}
?>
說明:設置output_buffering = Off;後程序輸出有間歇性。
/////////////////////////////////////////////////////////////////////////////////////////////////////
註:
當設置output_buffering = Off ;即沒有設置output_buffering時,header()和cookie的
設置必須要在echo、print前面。當有緩存區時可放在後面,當一定要在向瀏覽器flush()
一次數據之前調用header()
例:
/////////////////////////////////////////////////////////////////////////////////////////////////////
設置output_buffering = Off;
<?php
for($i==0;$i<5;$i++)
{
echo $i.‘----------‘;
}
header("content-type:text/html;charset:utf-8");
?>
結果:----------1----------2----------3----------4---------- Warning: Cannot modify
header information - headers already sent by (output started at
/var/www/html/test.php:5) in /var/www/html/test.php on line 8
output_handler="ob_get_length"
output_handler=
默認為 null , 其值只能設置為一個內置的函數名,作用就是將腳本的所有輸出,用所定義的函
數進行處理。
/////////////////////////////////////////////////////////////////////////////////////////////////////
zlib.output_compression=On
zlib.output_compression_level = 5
zlib.output_compression=On用來設置是否開啟zlib輸出壓縮。設置後其會被壓縮成gzip格式,
請求頭中的accept-encoding變成gzip。
zlib.output_compression_level = 5被用來設置壓縮等級。
zlib.output_handler-
與output_handler相同。
implicit_flush=On
強制讓輸出層在每個輸出塊之後自動刷新自身數據。等效於在每個echo、print後調用flush()
unserialize_callback_func=
該指令允許您控制當一個請求的響應unserializer實例化一個未定義類。對於大多數用戶來說,
這個指令是無關緊要的,因為PHP已經輸出一個警告,在這種情況下,如果PHP的錯誤報告被調整
到合適的水平。
serialize_precision
將浮點型和雙精度型數據序列化存儲時的精度(有效位數)。默認值能夠確保浮點型數據被解序列
化程序解碼時不會丟失數據。
allow_call_time_pass_reference
設置是否打開強制通過引用傳遞參數給函數。此方法已不被贊成並在 PHP/Zend 未來的版本中很
可能不再支持。鼓勵使用的方法是在函數定義中指定哪些參數應該用引用傳遞。
在函數調用時通過引用傳遞參數是不推薦的,因為它影響到了代碼的整潔。如果函數的參數沒有
聲明作為引用傳遞,函數可以通過未寫入文檔的方法修改其參數。要避免其副作用,最好僅在函
數聲明時指定那個參數需要通過引用傳遞。
例:
/////////////////////////////////////////////////////////////////////////////////////////////////////
<?php
$num=10;
priNum(&$num);
echo $num;
function priNum($num)
{
echo $num++;
echo ‘<br>‘;
}
?>
在allow_call_time_pass_reference =On能正常執行;在
allove_call_time_pass_referencee=Off時會報Emits an E_DEPRECATED level error錯誤
/////////////////////////////////////////////////////////////////////////////////////////////////////
--------------------------------------------------------
參考:http://php.net/manual/zh/ini.sect.safe-mode.php
--------------------------------------------------------
safe_mode=Off
開啟之後,主要會對系統操作、文件、權限設置等方法產生影響.
具體參考:http://blog.csdn.net/tangxi383367315/article/details/7722086
safe_mode_gid=Off
默認情況下,安全模式在打開文件時會做 UID 比較檢查。如果想將其放寬到 GID 比較,則打開
safe_mode_gid。是否在文件訪問時使用 UID(FALSE)或者 GID(TRUE)來做檢查。
safe_mode_include_dir
當從此目錄及其子目錄(目錄必須在 include_path 中或者用完整路徑來包含)包含文件時越過
UID/GID 檢查。即在此路徑中的目錄可越過UID/GID的檢查。
定的限制實際上是一個前綴,而非一個目錄名。這也就是說“safe_mode_include_dir =
/dir/incl”將允許訪問“/dir/include”和“/dir/incls”,如果它們存在的話。如果希望將訪
問控制在一個指定的目錄,那麽請在結尾加上一個斜線,例如:“safe_mode_include_dir =
/dir/incl/”。
safe_mode_exec_dir
如果 PHP 使用了安全模式,system() 和其它程序執行函數將拒絕啟動不在此目錄中的程序。必
須使用 / 作為目錄分隔符,包括 Windows 中。
所以如果要在PHP中啟動程序,必須要放在此目錄下。
safe_mode_allowed_env_vars=PHP_
設置某些環境變量可能是潛在的安全缺口。本指令包含有一個逗號分隔的前綴列表。在安全模式
下,用戶只能改變那些名字具有在這裏提供的前綴的環境變量。默認情況下,用戶只能設置以
PHP_ 開頭的環境變量(例如 PHP_FOO = BAR)。
如果本指令為空,PHP 將使用戶可以修改任何環境變量!
safe_mode_protected_env_vars=LD_LIBRARY_PATH
本指令包含有一個逗號分隔的環境變量的列表,最終用戶不能用 putenv() 來改變這些環境變量
。甚至在 safe_mode_allowed_env_vars 中設置了允許修改時也不能改變這些變量。
note:
在phpinfo頁面的Environment中可以看到環境變量,在php頁面中可通過getenv()得到環境變量值
--------------------------------------------------------
open_basedir=
將用戶可操作的文件限制在某目錄下。
例:
/////////////////////////////////////////////////////////////////////////////////////////////////////
<?php
readfile("/var/www/html/a.txt");
?>
當未設置open_basedir時正常讀出數據;當設置open_basedir=/var/www/html/file_upload時
出現錯誤Warning: Unknown: open_basedir restriction in effect. File
(/var/www/html/test.php) is not within the allowed path(s):
(/var/www/html/file_upload) in Unknown on line 0 Warning: Unknown: failed to open
stream: Operation not permitted in Unknown on line 0 Fatal error: Unknown: Failed
opening required ‘/var/www/html/test.php‘
(include_path=‘.:/usr/share/pear:/usr/share/php‘) in Unknown on line 0
/////////////////////////////////////////////////////////////////////////////////////////////////////
disable_function=getenv
該指令接受一個用逗號分隔的函數名列表,以禁用特定的函數。
例:
/////////////////////////////////////////////////////////////////////////////////////////////////////
當設置disable_function=getenv後
<?php
echo getenv("PATH");
?>
Warning: getenv() has been disabled for security reasons in /var/www/html/test.php on
line 2
/////////////////////////////////////////////////////////////////////////////////////////////////////
disable_classes=
該指令接受一個用逗號分隔的類名列表,以禁用特定的類。與disable_function相同。
highlight.string
可以通過PHP函數highlight_string()使用PHP內置定義的此顏色,打印輸出或者返回輸出或者返
回語法高亮版本的PHP代碼。
ignore_user_abort=Off
啟用該參數會讓服務器忽略由於用戶或瀏覽器引起的中斷所造成的會話終止,也就是說在頁面完
全加載之前你就退出或關閉瀏覽器,服務器還會繼續處理下去,不會認為你這邊已經終止。這對
於正在更新重要的個人信息或者提交一個商業交易非常有用。
realpath_cache_size=16K
realpath_cache_ttl = 120
參考:http://blog.csdn.net/daiyan_csdn/article/details/51880879
realpath_cache_size指定緩存include()文件的緩存器大小。realpath_cache_ttl緩存過期時間
expose_php=
設置是否在網頁頭部顯示php信息。為了防止黑客獲取服務器中php版本的信息,可以關閉該信息
斜路在http頭中:expose_php=Off
max_execution_time=30
設置每個腳本最大執行秒數。有時候需要頗多時間才能完成的工作,例如要發送很多電子郵件給
大量收件者,或者要進行繁重的數據分析工作,服務器會在 30 秒後強行中止正在執行的程序,
這時可以用ini_set()函數修改配置參數,如:ini_set("max_execution_time", 1)
註:ini_set()函數可以設置很多配置參數,具體參考http://php.net/manual/zh/ini.list.php
max_input_time=60
設置每個腳本用來分析請求數據的最大限制時間。也可通過ini_set()設置。
max_input_nesting_level=64
設置輸入變量的最大嵌套深度。
max_input_nesting_level的值為0時只允許/index.php?a=a&b=b;
max_input_nesting_level的值為1時允許/index.php?a=a&b=b,/index.php?a[a]=aa&a[b]=ab;
例:
/////////////////////////////////////////////////////////////////////////////////////////////////////
test.php文件
<?php
echo ‘<pre>‘;
print_r($_GET);
echo ‘</pre>‘;
?>
當設置max_input_nesting_level=1時,訪問http://123.207.248.54/test.php?a[0][0]=aa&a
[1][0]=dd 結果為:
Array
(
)
當設置max_input_nesting_level=2時,訪問http://123.207.248.54/test.php?a[0][0]=aa&a
[1][0]=dd 結果為:
Array
(
[a] => Array
(
[0] => Array
(
[0] => aa
)
[1] => Array
(
[0] => dd
)
)
)
/////////////////////////////////////////////////////////////////////////////////////////////////////
memory_limit=128M
一個腳本所能夠申請到的最大內存字節數(可以使用K和M作為單位)。有助於防止劣質腳本消耗
完服務器上的所有內存。如果要取消內存限制,則必須將其設為 -1 。設置了該指令後,
memory_get_usage()函數將變為可用。
error_reporting
設置錯誤報告級別。
display_errors=Off
錯誤回顯,一般常用語開發模式,但是很多應用在正式環境中也忘記了關閉此選項。錯誤回顯可
以暴露出非常多的敏感信息,為攻擊者下一步攻擊提供便利。推薦關閉此選項。關閉狀態下,若
出現錯誤,則提示:服務器錯誤。但是不會現錯誤提示。
註:display_errors=Off失效
display_startup_errors
設置PHP啟動時的錯誤顯示,如:配置文件中有手誤導致語法錯誤/加載的模塊版本不匹配等等
log_errors="/var/www/html/php_error_log"
在正式環境下使用,把錯誤信息記錄在日誌裏。該文件必須對Web服務器用戶可寫。
log_errors_max_len
設置日誌消息的長度而不是設置日誌文件的大小。
ignore_repeated_errors
設置是否在同一行中重復顯示一樣的錯誤信息。
ignore_repeated_source
設置是否重復顯示來自同個文件同行代碼的錯誤
report_memleaks
設置是否報告內存泄漏。這個參數只在以調試方式編譯的PHP中起作用,並且必須在
error_reporting指令中包含 E_WARNING
report_zend_debug = On
無說明文檔。
track_errors=Off
設置是否在變量$php_errormsg中保存最近一個錯誤或警告消息。
html_errors=On
是否在出錯信息中使用HTML標記。
docref_root="/phpmanual"
docref_ext=".html"
如果打開了html_errors指令,PHP將會在出錯信息上顯示超連接,直接鏈接到一個說明這個錯誤
或者導致這個錯誤的函數的頁面。你可以從http://www.php.net/docs.php下載php手冊,並將
docref_root指令指向你本地的手冊所在的URL目錄。你還必須設置docref_ext指令來指定文件的
擴展名(必須含有‘‘.‘‘)。
error_prepend_string"<font color=#ff0000>"
設置錯誤信息前輸出的字符串。
error_append_string = "</font>"
設置錯誤信息後輸出的字符串。
arg_separator.output = "&"
PHP所產生的URL中用來分隔參數的分隔符。
arg_separator.input="&;&"
PHP解析URL中的變量時使用的分隔符列表。
variables_order="EGPCS"
PHP註冊 Environment, GET, POST, Cookie, Server 變量的順序。分別用 E, G, P, C, S 表示
,按從左到右註冊,新值覆蓋舊值。 設為"GP"將會導致用POST變量覆蓋同名的GET變量,
request_order="GP"
$_REQUEST這個超全局變量的值受php.ini中request_order的影響,在最新的php5.3.x系列 中,
request_order默認值為GP,也就是說默認配置下$_REQUEST只包含$_GET和$_POST而不包括
$_COOKIE。通過 COOKIE就可以提交GLOBALS變量。從而繞過了大多開源程序中的全局變量防禦。
因此要將次選項更改為 request_order = "CGP"
register_globals=Off
設置是否將 E, G, P, C, S 變量註冊為全局變量。
register_long_arrays=On
設置是否啟用舊式的長式數組(HTTP_*_VARS)。
register_argc_argv = On
設置是否聲明$argv和$argc全局變量(包含用GET方法的信息)。
auto_globals_jit = On
是否僅在使用到$_SERVER和$_ENV變量時才創建(而不是在腳本一啟動時就自動創建)。
如果並未在腳本中使用這兩個數組,打開該指令將會獲得性能上的提升。
要想該指令生效,必須關閉register_globals和register_long_arrays指令。
post_max_size = 8M
允許的POST數據最大字節長度。此設定也影響到文件上傳。如果POST數據超出限制,那麽$_POST
和$_FILES將會為空。要上傳大文件,該值必須大於upload_max_filesize指令的值。如果啟用了
內存限制,那麽該值應當小於memory_limit指令的值。
magic_quotes_gpc = On
是否對輸入的GET/POST/Cookie數據使用自動字符串轉義( ‘‘ " NULL )。這裏的設置將自動
影響 $_GEST $_POST $_COOKIE 數組的值。若將本指令與magic_quotes_sybase指令同時打開,則
僅將單引號(‘‘)轉義為(‘‘‘‘),其它特殊字符將不被轉義,即( " NULL )將保持原樣。
magic_quotes_runtime = Off
是否對運行時從外部資源產生的數據使用自動字符串轉義( ‘‘ " NULL )。
若打開本指令,則大多數函數從外部資源(數據庫,文本文件等)返回數據都將被轉義。
magic_quotes_sybase = Off
是否采用Sybase形式的自動字符串轉義(用 ‘‘‘‘ 表示 ‘‘)
auto_prepend_file =
auto_append_file =
指定在主文件之前/後自動解析的文件名。為空表示禁用該特性。
該文件就像調用了include()函數被包含進來一樣,因此會使用include_path指令的值。
default_mimetype = "text/html"
;default_charset = "iso-8859-1"
自動輸出"Content-Type: text/html; charset=iso-8859-1"。
always_populate_raw_post_data=Off
是否總是生成$HTTP_RAW_POST_DATA變量(原始POST數據)。
include_path=".:/php/includes"
指定一組目錄用於require(), include(), fopen_with_path()函數尋找文件。
doc_root=
PHP的"根目錄"。僅在非空時有效。
如果safe_mode=On,則此目錄之外的文件一概被拒絕。
user_dir =
告訴php在使用 /~username 打開腳本時到哪個目錄下去找,僅在非空時有效。也就是在用戶目錄
之下使用PHP文件的基本目錄名.
extension_dir="./"
存放擴展庫(模塊)的目錄,也就是PHP用來尋找動態擴展模塊的目錄。
enable_dl=On
是否允許使用dl()函數。dl()函數僅在將PHP作為apache模塊安裝時才有效。
禁用dl()函數主要是出於安全考慮,因為它可以繞過open_basedir指令的限制。
在安全模式下始終禁用dl()函數,而不管此處如何設置。
cgi.nph = Off
在CGI模式下是否強制對所有請求都發送"Status: 200"狀態碼。
fastcgi.impersonate = Off
IIS中的FastCGI支持模仿客戶端安全令牌的能力。這使得IIS能夠定義運行時所基於的請求的安全
上下文。Apache中的mod_fastcgi不支持此特性(03/17/2002)如果在IIS中運行則設為On,默認為
Off。
file_uploads = On
是否允許HTTP文件上傳。
upload_tmp_dir =
文件上傳時存放文件的臨時目錄(必須是PHP進程用戶可寫的目錄)。
如果未指定則PHP使用系統默認的臨時目錄。
upload_max_filesize = 2M
允許上傳的文件的最大尺寸。
allow_url_fopen = On
是否允許打開遠程文件.
allow_url_include = Off
是否允許include/require遠程文件。
from=""
定義匿名ftp的密碼
user_agent="PHP"
表示通過PHP腳本訪問網絡
default_socket_timeout=60
默認socket超時時間。
auto_detect_line_endings = Off
是否讓PHP自動偵測行結束符(EOL)。
date.timezone=
未設定TZ環境變量時用於所有日期和時間函數的默認時區。
date.default_latitude=
date.default_longitude=
date.sunrise_zenith =
date.sunset_zenith=
默認經緯度,日出日落天頂。
filter.default=
開啟了這項配置後,會自動使用filter_input方法對$_GET, $_POST, $_COOKIE, $_REQUEST以及
$_SERVER變量進行過濾轉義。
filter.default_flags
設置過濾器的標誌。默認情況下,該配置被設置為 ‘FILTER_FLAG_NO_ENCODE_QUOTES‘,為了向後
兼容。查看所有的 ‘flag列表.
sql.safe_mode = Off
設置是否使用SQL安全模式。
如果打開,指定默認值的數據庫連接函數將會使用這些默認值代替支持的參數。
mysql.allow_persistent = On
設置是否允許或禁止持久連接
mysql.max_persistent=-1
持久連接的最大數 -1代表無限制
mysql.max_links = -1
每個進程中允許的最大連接數(持久和非持久),-1代表無限制
mysql.default_port =
鏈接到MYSQL的端口。
如果沒有指定,將按如下順序尋找
(1)$MYSQL_TCP_PORT環境變量
(2)/etc/services文件中的mysql-tcp項(unix)
(3)編譯時指定的MYSQL_PORT常量
mysql.default_socket =
連接到本機mysql服務器時所使用的默認套接名字,若未指定則使用內置的mysql默認值
mysql.default_host =
連接到MySQL數據庫時使用的默認主機。安全模式下無效
mysql.default_user =
連接到MySQL數據庫時使用的默認用戶名。安全模式下無效
mysql.default_password =
連接到MySQL數據庫時使用的默認密碼。安全模式下無效
mysql.connect_timeout = 60
連接超時設置
mysqli.reconnect = Off
設置是否允許重連接
session.save_handler = "files"
存儲和檢索與會話關聯的數據的處理器名字。默認為文件("files")。
如果想要使用自定義的處理器(如基於數據庫的處理器),可用"user"。
session.save_path = "/tmp"
傳遞給存儲處理器的參數。對於files處理器,此值是創建會話數據文件的路徑。
session.use_cookies
控制客戶端保存SessionID時使用哪一種方式,當它為“1”時,就說明啟動了session cookie(
初始值為1)可以使用上面我們提到的函數來查詢得到目前的session id:echo $_COOKIE
["PHPSESSID"];但是,如果client的瀏覽器不支持cookie的話,即使session.use_cookies這個參
數的值等於“1”,用上述的查詢也只會得到null。
session.use_only_cookies=1
這個選項允許管理員去保護那些在URL中傳送session id的用戶免於被攻擊
session.name=PHPSESSID
session的名稱 (作為cookie名稱來使用)。保存在client的瀏覽器cookie中
session.auto_start = 0
在請求開始的時候初始化session.
session.cookie_lifetime = 0
cookie的生存秒數,或者如果為0就直到瀏覽器重啟.
session.cookie_path = /
cookie的有效路徑
session.cookie_domain =
cookie的有效的域名。
session.cookie_httponly
是否將httpOnly標誌增加到cookie上, 增加後則cookie無法被瀏覽器的腳本語言(例如
JavaScript)存取.
session.serialize_handler = php
用於序列化數據的處理器. php是標準的PHP序列化器.
session.gc_probability = 1
session.gc_divisor = 100
定義‘垃圾回收‘進程在每次session初始化時開始的比例. 比例由 gc_probability/gc_divisor來
得出, 例如. 1/100 意味著在每次請求時有1%的機會啟動‘垃圾回收‘進程.
session.gc_maxlifetime =1400
在經過以下秒數之後, 存儲的數據會被認為是‘垃圾‘並且被垃圾回收進程清理掉.
session.bug_compat_42 =
session.bug_compat_warn=
php4.2 和更早版本有一個未公開的 特性/bug , 此特性允許你在全局初始化一個session變量,即
便 register_globals 已經被關閉. 如果此特性被使用,PHP 4.3 和更早版本會警告你. 你可以關
閉此特性並且隔離此警告. 這時候,如果打開bug_compat_42,那此警告只是被顯示出來
session.referer_check =
檢查HTTP Referer來防止帶有id的外部URL. HTTP_REFERER 必須包含從session來的這個字段才會
被認為是合法的.
session.entropy_length = 0
從此文件讀取多少字節.
session.entropy_file =
在這裏指定創建session id.
session.cache_limiter = nocache
設置為 {nocache,private,public,} 來決定HTTP緩沖的類型 留空則防止發送 anti-caching 頭.
session.cache_expire = 180
設置文檔在180分鐘之後過期.
session.hash_function = 0
選擇hash方法,0表示MD5,1表示SHA-1
session.hash_bits_per_character = 5
當轉換二進制hash數據到可讀形式時,每個字符保存時有幾位.
4 bits: 0-9, a-f
5 bits: 0-9, a-v
6 bits: 0-9, a-z, A-Z, "-", ","
assert.active=On
設置斷言(expr)是否打開.
assert.warning = On
對於每個失敗斷言發起一個PHP警告.
assert.bail = Off
是否保密
assert.callback = 0
如果斷言失敗則調用用戶自定義函數.
assert.quiet_eval = 0
使用當前 error_reporting() Eval一個表達式. 如果你想要在eval()附近error_reporting(0) ,
那設置為true.
com.typelib_file =
包含GUID,IID或者TypeLibs的文件的文件名的文件的路徑
com.allow_dcom = true
允許 Distributed-COM 調用
com.autoregister_typelib = true
自動註冊位於com_load()函數的組件typlib的常量
com.autoregister_casesensitive = false
註冊常量大小寫敏感
com.autoregister_verbose = true
當有重復常量註冊時顯示警告
mbstring.language = Japanese
內部字符表示的語言.
mbstring.internal_encoding = EUC-JP
部分編碼無法作為內部編碼使用.
mbstring.http_input = auto http
輸入編碼.
mbstring.encoding_translation = Off
按照mbstring.internal_encoding的設置打開自動編碼轉換。當設置為On時,輸入字符被轉換為內
部編碼.
mbstring.detect_order = auto
自動編碼檢測序列
mbstring.substitute_character = none;
當無法將字符從一種轉換到另一種時使用的置換符號
gd.jpeg_ignore_warning =0
告知jpeg解碼器libjpeg警告並且嘗試創建一個gd圖像. 此警告會被作為一個通告顯示
soap.wsdl_cache_dir="/tmp"
設置SOAP擴展存放緩沖文件的目錄.
soap.wsdl_cache_ttl=86400
設置當緩沖文件被用來替換原有緩沖文件的秒數.
PHP安全配置:
參考:http://www.thinkphp.cn/code/1015.html
php.ini配置文件