精品軟體與實用教程
;;;;;;;;;;;;;;;;;;
;; 關於 php.ini ;;
;;;;;;;;;;;;;;;;;;
; 對於伺服器模組,僅在伺服器啟動時讀取一次php.ini 。對於CGI 和CLI ,每次呼叫都會讀取php.ini 。
; PHP 會在初始化時會依照下列順序搜尋此檔案(搜到即停):
; 1. SAPI 模組指定的位置:
; (a) Apache 2.x 中的PHPIniDir 指令
; (b) CGI/CLI 模式下-c 命令列選項
; (c) NSAPI 中的php_ini 參數
; (d) THTTPD 中的PHP_INI_PATH 環境變數
; 2. PHPRC 環境變數指定的位置
; 3. Windows登錄指定的位置(依序搜尋、搜到即停):
; (a) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\xyz] 內的IniFilePath 的值(特定於php-xyz版本)
; (b) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\xy] 內的IniFilePath 的值(特定於php-xy*系列版本)
; (c) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x] 內的IniFilePath 的值(特定於php-x.*.*系列版本)
; (d) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP] 內的IniFilePath 的值(不特定於php的版本)
; 4. 目前工作目錄(不適用於CLI 模式)
; [提示] Apache 會在啟動時把目前工作目錄轉到根目錄,這將導致PHP 可能會嘗試在根目錄讀取php.ini 。
; 5. web 伺服器目錄(適用於SAPI 模組)或PHP 所在目錄(Windows 下其它狀況)
; 6. 編譯時選項--with-config-file-path 指定的位置或Windows目錄( %SystemRoot% 通常是"C:\Windows")
; 如果存在php-SAPI.ini (例如php-apache2handler.ini, php-fpm-fcgi.ini, php-cli-server.ini, php-cli.ini 等),
; 那麼php.ini 將會被php-SAPI.ini 取代。
; 最新版本:
; php.ini-production
; php.ini-development
;;;;;;;;;;;;
;; 文法;;
;;;;;;;;;;;;
; 該文件的語法非常簡單。空白行和以分號開始的行被簡單地忽略。
; 普通組態段標題(例如: [PHP])也被簡單地忽略(即使將來它們可能有某種意義)。
; 形如[PATH=/www/mysite] 的配置段表示僅作用於/www/mysite 目錄下的PHP 檔案。
; 形如[HOST=www.example.com] 的配置段表示僅作用於 http://www.example.com 站點的PHP 檔案。
; [提示]對於擁有多個網域的站點,應該使用SERVER_NAME 參數的值(也就是網域名稱清單中的第一個網域)。
; 這兩種配置段中的設定既不能在運行時修改、也不受.user.ini 檔案的影響。
; 這兩種設定段只運作於CGI/FastCGI 模式[FastCGI 協定規格中文版],且不能包含extension 與zend_extension 指令。
; 設定指令的格式如下:
; 指令= 值
; "指令"是大小寫敏感的!所以"foo=bar"不同於"FOO=bar"。
; 無法辨識的"指令"將會被直接忽略、未設定的指令將會使用其預設值。
; "值"可以是:
; 1. 一個字串(可以用引號界定,如:"foo")
; 2. 一個數字(整數或浮點數,如:0, 1, 34, -1, 33.55)
; 3. 一個PHP常數(如:E_ALL, M_PI)(不能在php.ini 之外使用[例如httpd.conf])
; 4. 一個INI常數(On, Off, Yes, No, None)
; 5. 一個表達式(如:E_ALL & ~E_NOTICE)
; [註1]可以在"值"中引用環境變量,如:"${AUTHOR}.log" 、 ".:${USER}/pear/php"
; [註2]可以在"值"中引用先前設定的指令值,如:"${open_basedir}:/new/dir"
; 僅可在表達式中使用位元運算子、邏輯非、圓括號:
; | 位元或(OR)
; ^ 位元異或(XOR)
; & 位元與(AND)
; ~ 位非(NOT)
; ! 邏輯非(NOT)
; 布林標誌以1, On, True, Yes 表示打開,以0, Off, False, No 表示關閉。
; 空字串可以用在等號後不寫任何東西表示,或用None 關鍵字:
; foo = ; 將foo設為空字串(建議的方式)
; foo = None ; 將foo設為空字串
; foo = "None" ; 將foo設為字串'None'
; 若要在指令值中使用動態擴充(PHP擴充或Zend擴充)中的常數,
; 那麼只能在載入這些動態擴充的指令列(extension 或zend_extension)之後使用這些常數。
;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 生產環境與開發環境;;
;;;;;;;;;;;;;;;;;;;;;;;;;;
; PHP 面向生產環境與開發環境分別提供了php.ini-production 與php.ini-development 兩套參考配置。
; 兩套參考配置的差異如下:
;display_errors
; Default Value: On
; Development Value: On
; Production Value: Off
;display_startup_errors
; Default Value: On
; Development Value: On
; Production Value: Off
;error_reporting
; Default Value: E_ALL
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
;log_errors
; Default Value: Off
; Development Value: On
; Production Value: On
;max_input_time
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
;output_buffering
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
;register_argc_argv
; Default Value: On
; Development Value: Off
; Production Value: Off
;request_order
; Default Value: None
; Development Value: "GP"
; Production Value: "GP"
;session.gc_divisor
; Default Value: 100
; Development Value: 1000
; Production Value: 1000
;session.sid_bits_per_character
; Default Value: 4
; Development Value: 5
; Production Value: 5
;short_open_tag
; Default Value: On
; Development Value: Off
; Production Value: Off
;variables_order
; Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS"
;zend.exception_ignore_args
; Default Value: Off
; Development Value: Off
; Production Value: On
;zend.exception_string_param_max_len
; Default Value: 15
; Development Value: 15
; Production Value: 0
;;=========================================================================================
;;=====================================配置指令詳解========================================
;;=========================================================================================
; 以下每個指令的值都與PHP-8.0 內建的預設值相同(也兼顧PHP-7.2 PHP-7.3 PHP-7.4 版本)。
; 也就是說,如果'php.ini'不存在,或你刪掉了某些行,預設值與之相同。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SAPI ( Server API ) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[apache2handler]
; 此組態段中的指令僅在以Apache2處理器模組(php_module) 方式使用PHP時才有意義。
; [提示]可以在httpd.conf 中使用php_value/php_flag 與php_admin_value/php_admin_flag 指令覆寫php.ini 中的設定。
engine = On
; 是否啟用PHP解析引擎。一般用於基於目錄或虛擬主機來開關PHP解析引擎。
last_modified = Off
; 是否在"Last-Modified:"應答頭放置PHP腳本的最後修改時間。
xbithack = Off
; 是否不管檔案的副檔名是什麼,只要有可執行位,就都作為PHP腳本解析。
[fpm-fcgi]
; 此組態段中的指令僅在以FPM/FastCGI 方式使用PHP時才有意義。
cgi.check_shebang_line = On
; 是否檢查腳本頂部以#! 開始的行(shebang)。
; 如果腳本想要既能夠單獨運行又能夠在PHP CGI 模式下運行,那麼這個起始行(shebang)就是必須的。
; 設為On 表示在CGI模式下將會自動忽略這一行。
cgi.discard_path = Off
; 是否允許把PHP CGI 目錄放置在web 目錄樹之外以增強安全性,這樣客戶端將無法避開.htaccess 安全防護。
cgi.fix_pathinfo = On
; 是否為CGI提供真正的PATH_INFO/PATH_TRANSLATED 值(遵守cgi規範)。
; 先前的行為是無論PATH_INFO 是什麼,一律將PATH_TRANSLATED 設為SCRIPT_FILENAME 。
; 開啟此指令將使PHP修正其路徑以遵守CGI規範,否則仍將使用舊式的不合規範的行為。
; 鼓勵你開啟此指令,並修正腳本以使用SCRIPT_FILENAME 取代PATH_TRANSLATED 。
; [提示]即使將PHP-FPM 與Nginx 配合使用,也應該保持此指令為On (網上有許多老舊文章)。
; 有關PATH_INFO 的更多資訊請參閱cgi規範。
cgi.force_redirect = On
; 是否開啟cgi強制重定向。強烈建議打開它以提高安全性。
; 注意:在IIS上必須關閉它!
cgi.nph = Off
; 在CGI模式下是否強制對所有請求都發送"Status: 200"狀態碼。
cgi.redirect_status_env =
; 如果cgi.force_redirect = On 並且與非Apache配合運行PHP,
; 可能需要設定cgi重定向環境變數名,PHP將根據此環境變數決定是否繼續執行。
; 設定這個變數會導致安全漏洞,請務必在設定前搞清楚自己在做什麼。
cgi.rfc2616_headers = Off
; 指定PHP在傳送HTTP回應碼時使用何種狀態頭。
; 設為Off 表示使用符合RFC3875標準的頭(例如"Status: 404 Not Found"),Apache和其它web伺服器都支援。
; 設為On 表示使用符合RFC2616標準的頭(例如"HTTP/1.0 404 Not found")。
; 務必保持預設值Off ,除非你確實知道自己在做什麼。
fastcgi.error_header =
; 如果display_errors = Off 且被存取的php腳本包含語法錯誤,
; 那麼預設情況下,使用者將會收到一個狀態行為"HTTP/1.1 500 Internal Server Error"的空白頁面。
; 如果你認為預設的狀態行不合理,那麼可以使用此指令自訂一個狀態行(例如"HTTP/1.1 550 Server Exploded")。
fastcgi.impersonate = Off
; IIS中的FastCGI支援模仿客戶端安全性令牌的能力,這使得IIS能夠定義執行時間請求所基於的安全上下文。
; 但Apache不支援此特性。如果在IIS中運行則應設為On ,否則應設為Off 。
fastcgi.logging = On
; 是否開啟FastCGI日誌。
fpm.config =
; 明確指定FPM 設定檔(php-fpm.conf)的路徑
[cli-server]
; 此設定段中的指令僅在使用PHP內建的CLI Web Server 時才有效。
cli_server.color = Off
; 是否讓CLI Web Server 在終端輸出中使用彩色。
[cli]
; 此組態段中的指令僅在使用PHP命令列模式時才有意義(實際上是在設定readline 模組)。
cli.pager =
; 顯示命令列輸出的外部分頁程式。
cli.prompt = "\b \>"
; 以互動方式使用時的命令列提示符號。
;;;;;;;;;;;;;;;;;;;
;; 核心;;
;;;;;;;;;;;;;;;;;;;
[Core-Language]
short_open_tag = On
; 是否允許使用" "短標記。
; 除非你的php程式僅在受控環境下運行,且只供自己使用,否則請不要使用短標記。
; 如果要和XML結合使用PHP,可以選擇關閉此選項以方便直接嵌入" "。
; 本指令不影響縮寫形式"=",它始终和"
precision = 14
; 浮點型資料的顯示精確度(有效位數)。
serialize_precision = -1
; 將浮點型和雙精度型資料序列化儲存時的精確度(有效位數)。
; 預設值-1 表示自動選擇最佳精度,能夠剛好確保浮點型資料被解序列化程式解碼時不會遺失資料。
; 此值也會影響json_encode() 編碼雙精確型資料的精確度。
disable_functions =
; 此指令接受一個以逗號分隔的函數名稱列表,以停用特定的函數。
; 此指令僅能停用內建函數,無法停用使用者自訂函數。
disable_classes =
; 此指令接受一個以逗號分隔的類別名稱列表,以停用特定的類別。
expose_php = On
; 是否暴露PHP被安裝在伺服器上的事實(在http頭中加上其簽章)。
; 它不會有安全性上的直接威脅,但它使得客戶端知道伺服器上安裝了PHP。
hard_timeout = 2
; 當腳本執行時間達到max_execution_time 限制之後會被"柔軟且安全"的結束,
; 此指令就是設定這種"柔軟且安全"的方式結束腳本的最大允許用時(秒)。
; 一旦超時(預設為2秒),就會被進一步以粗暴的方式結束(不釋放任何未釋放的資源)。
zend.assertions = 1
; 如何編譯斷言:
; -1 完全不編譯(生產模式)
; 0 編譯但是在執行時跳過
; 1 編譯並執行(開發模式)
zend.exception_ignore_args = Off
; 是否從異常產生的堆疊追蹤中排除參數。
; 建議在生產伺服器上設為On 以防止在堆疊追蹤中輸出敏感資訊。
zend.exception_string_param_max_len = 15
; 堆疊追蹤參數中允許的最大字串長度(取值範圍=0~1000000)。
; 僅在zend.exception_ignore_args = Off 時有意義。
; 建議在生產伺服器上設為0 以減少敏感資訊的輸出。
zend.multibyte = Off
; 是否允許PHP腳本使用例如CP936, Big5, CP949, Shift_JIS 這樣的不安全字元編碼。
; 與ISO-8859-1 相容的安全字元編碼(UTF-8, EUC, ...)不需要開啟此指令。
; 若要使用此特性,必須載入mbstring 擴充模組。
zend.script_encoding =
; 當PHP腳本第一行沒有"declare(encoding=...)"宣告時,預設使用的字元編碼。
; 設定此指令之後,腳本就像自動使用了mb_convert_encoding() 函數一樣,
; 將所有字串從zend.script_enconding 編碼自動轉換為mbstring.internal_encoding 編碼。
; 僅在zend.multibyte = On 時有意義。
; 如果腳本使用了與ISO-8859-1 不相容的字元編碼,建議明確設定此指令。
zend.detect_unicode = On
; 是否透過檢查腳本的BOM(位元組順序標記)來偵測腳本是否包含多位元組字元。
; 僅在zend.multibyte = On 時有意義。
zend.signal_check = Off
; 是否在關閉時檢查被替換的訊號處理程序(僅存在於Unix平台)
[Core-ResourceLimits]
memory_limit = 128M
; 腳本所能夠申請到的最大記憶體(位元組)(可以使用K和M作為單位)(必須大於post_max_size 的值)。
; 這有助於防止劣質腳本消耗完伺服器上的所有記憶體。設為-1 表示取消記憶體限制。
; 設定了指令後,memory_get_usage() 函數將變成可用。
[Core-Performance]
realpath_cache_size = 4M
; 指定PHP使用的realpath(規範化的絕對路徑名) 緩衝區大小。
; 緩衝區大小=路徑字串的總長度+快取項目關聯資料。主要快取長路徑時,快取必須更大。
; 此值並不能直接控制快取中的路徑數。在PHP開啟大量檔案的系統上應增大該值以提高效能。
; 注意:開啟open_basedir 之後realpath 快取將會被停用。
realpath_cache_ttl = 120
; realpath 快取有效期限(秒)。對檔案很少變動的系統,可以增加該值以提高效能。
[Core-DataHandling]
arg_separator.output = "&"
; PHP輸出的URL中用來分隔參數的分隔符號。
; 另外還可以設為"&"或","或";"等等。
arg_separator.input = "&"
; PHP解析URL中的變數時使用的分隔符號清單。字串中的每一個字元都會被當作分割符。
; 另外還可以設為";,&"等等。
variables_order = "EGPCS"
; 註冊哪些超全域數組。分別以E, G, P, C, S 表示$_ENV, $_GET, $_POST, $_COOKIE, $_SERVER 。
; 因為註冊這些陣列會帶來效能損失,且$_ENV 也不常用,所以不建議註冊$_ENV 。
; [提示]在FastCGI模式下$_SERVER 中始終包含有環境變數(也就是S 永遠相當於ES )。
; 建議設為"GPCS",並使用getenv() 存取環境變數。
request_order =
; 如何將G, P, C 超全域數組中的元素註冊到$_REQUEST 超全域數組。
; 此設定不但決定了註冊G, P, C 中的哪幾個,還決定了註冊時的覆蓋順序(後值會覆蓋前值)。
; [注意]設為空表示繼承variables_order 的值,而不是讓$_REQUEST 為空。建議設為"GP"。
auto_globals_jit = On
; 是否僅在實際使用到$_ENV, $_REQUEST, $_SERVER 變數時才建立(而不是在腳本一啟動時就自動建立)。
; 若未在腳本中使用這些數組,開啟該指令將會獲得效能上的提升。
register_argc_argv = On
; 是否註冊$argv 與$argc 全域變數(可能包含GET方法的資訊)。
; $argv 陣列包含所有傳遞給腳本的參數。 $argc 變數保存了參數的個數。
; 建議並關掉該指令以提高效能。
; [提示]對於CLI 模式,此指令被硬編碼為On
enable_post_data_reading = On
; 是否允許讀取POST 資料。設為Off 之後$_POST 與$_FILES 將永遠為空。
; 唯一的辦法是透過php://input 流包裝器來取得POST資料。
; Off 僅適用於代理請求或以記憶體高效的方式處理POST資料。
post_max_size = 8M
; 允許接受的最大POST資料長度(位元組)("0"表示無限)。僅在enable_post_data_reading = On 時有意義。
; 此設定也會影響到檔案上傳(必須大於upload_max_filesize 的值),如果POST資料超出限制,那麼$_POST 和$_FILES 將會為空。
; 如果啟用了記憶體限制,那麼該值應小於memory_limit 的值。
auto_prepend_file =
auto_append_file =
; 自動在PHP腳本之前/之後插入的檔案名稱。設為空表示以停用該特性。
; 指定的檔案就像被include() 函數包含進來一樣,因此會使用include_path 指令的值。
; 注意:如果腳本透過exit() 終止,那麼自動後綴將不會發生。
default_mimetype = "text/html"
default_charset = "UTF-8"
; 設定HTTP頭"Content-Type:" 的預設值。都設為空表示不輸出"Content-Type:"頭。
; 預設值表示輸出"Content-Type: text/html; charset=UTF-8"。
; 反對將default_charset 設為空。
input_encoding =
; PHP輸入使用的字元編碼。設為空表示使用default_charset 的值。
output_encoding =
; PHP輸出所使用的字元編碼。設為空表示使用default_charset 的值。
internal_encoding =
; PHP內部使用的字元編碼。設為空表示使用default_charset 的值。
[Core-Paths]
include_path = ".;/path/to/php/pear"
; 指定一組目錄用於require(), include(), fopen(), file(), readfile(), file_get_contents() ... 等函數定位檔。
; 格式和系統的PATH環境變數類似(UNIX下用冒號分隔,Windows下用分號分隔):
; UNIX: "/path1:/path2"
; Windows: "\path1;\path2"
; 直接使用'./path/to/file'方式表示相對於目前目錄的檔案是一種效率更高的方式(不建議在此指令中使用'.')。
; 更進一步,將此指令設為空有助於提高在檔案系統上定位檔案的效能。
; 可以使用set_include_path() 在執行時修改此指令的值。
open_basedir =
; 將PHP允許操作的所有檔案都限制在此群組目錄清單下以提升安全性(設為空表示允許開啟所有檔案)。
; 當腳本試圖開啟指定目錄樹以外的檔案時,將遭到拒絕。
; 所有的符號連接都會被解析,所以不可能透過符號連接來避開此限制。
; 特殊值'.'表示存放該腳本的目錄將被當作基準目錄,但這樣做很不安全(腳本可以用chdir()更改工作目錄)。
; 對於共用伺服器,在httpd.conf 中針對不同的虛擬主機或目錄靈活設定該指令將變得非常有用。
; 作為Apache模組時,父目錄中的open_basedir 路徑將自動被繼承。
; 在Windows中以分號分隔目錄,UNIX系統中以冒號分隔目錄,建議使用PATH_SEPARATOR 常數來寫可移植程式碼。
; 注意:開啟此特性之後realpath 快取將會被停用。
doc_root =
; PHP的"CGI根目錄"。僅在非空時有效。
; 在web伺服器的主文檔目錄(例如"htdocs")中放置可執行程式/腳本被認為是不安全的,
; 例如因為配置錯誤而將腳本作為普通的html顯示。
; 因此很多系統管理員都會在主文檔目錄之外專門設定一個只能透過CGI來存取的目錄,
; 該目錄中的內容只會被解析而不會以原樣顯示。
; 如果設定了這個指令,那麼PHP就只會解釋doc_root 目錄下的文件,
; 並確保目錄外的腳本都不會被PHP解釋器執行( user_dir 除外)。
; 如果編譯PHP時沒有指定FORCE_REDIRECT ,那麼就必須設定此指令。
; 如果在非IIS伺服器上以CGI方式運行,請務必閱讀手冊中的安全部分。
; 確保安全的替代方案是使用cgi.force_redirect 指令。
user_dir =
; 告訴php在使用/~username 開啟腳本時到哪個目錄下去找,只在非空時有效。
; 也就是在使用者目錄之下使用PHP檔案的基本目錄名,例如:"public_php"
user_ini.cache_ttl = 300
; 重新讀取.user.ini 檔案的間隔秒數( .user.ini 檔案的存活期)。
user_ini.filename = ".user.ini"
; 基於每個目錄的使用者自訂php.ini 檔案的名稱(僅支援CGI/FastCGI 模式)。設為空表示關閉此功能。
; 開啟此功能之後,除了主php.ini 之外,還會從被執行的PHP 腳本所在目錄開始,一直向上掃描到web 根目錄。
; 如果被執行的PHP 腳本在web 根目錄之外,那麼只掃描該PHP 腳本所在的目錄。
; 僅允許在.user.ini 檔案中使用PHP_INI_PERDIR 和PHP_INI_USER 類型的指令。
; 開啟此功能會讓PECL 的htscanner 擴充作廢。
extension_dir = "/path/to/phpext"
; 存放擴充庫(模組)的目錄,也就是PHP用來尋找動態擴充模組的目錄。
; Windows下預設為"C:\php\ext"
; Unix下的預設值取決於編譯時的配置。
sys_temp_dir = "/path/to/tmp"
; 存放暫存檔案的暫存目錄。預設為系統的暫存目錄(參見sys_get_temp_dir() 函數)
;extension=PHP模組名稱(不含前後綴,例如mbstring )
;zend_extension=Zend模組名稱(不含前後綴,例如opcache )
; 對於不在extension_dir 目錄中的模組可以直接寫上模組檔案的完整絕對路徑。
; [注意] exif 模組必須在mbstring 之後載入
[Core-FileUploads]
file_uploads = On
; 是否允許HTTP檔案上傳。參見upload_max_filesize, upload_tmp_dir, post_max_size 指令。
upload_tmp_dir =
; 存放上傳檔案的暫存目錄(必須是PHP行程可寫的目錄)。設為空表示使用系統預設的暫存目錄。
; 若指定的目錄不可寫,將會自動使用系統預設的暫存目錄。
; 如果設定了open_basedir ,那麼其中必須包含系統預設的暫存目錄,否則上傳功能將無法使用。
upload_max_filesize = 2M
; 允許上傳的檔案最大尺寸(必須小於post_max_size 的值)。
max_file_uploads = 20
; 一次HTTP請求允許同時上傳的最大檔案數量。
[Core-Windows]
windows.show_crt_warning = Off
; 是否顯示C運行時的警告訊息(僅存在於Windows平台)
;;;;;;;;;;;;;;;;;;;;;
;; 核心擴充;;
;;;;;;;;;;;;;;;;;;;;;
[DateTime]
; 前四個設定選項目前僅用於date_sunrise() 和date_sunset() 函數。
date.default_latitude = 31.7667
; 預設緯度
date.default_longitude = 35.2333
; 預設經度
date.sunrise_zenith = 90.833333
; 預設日出天頂
date.sunset_zenith = 90.833333
; 預設日落天頂
date.timezone =
; 未設定TZ環境變數時用於所有日期和時間函數的預設時區。
; 中國大陸應使用"PRC"或"Asia/Shanghai"
; 應用時區的優先順序為:
; 1. 用date_default_timezone_set() 函數設定的時區(如果設定了的話)
; 2. TZ 環境變數(如果非空的話)
; 3. 該指令的值(如果設定了的話)
; 4. PHP自己推測(如果作業系統支援)
; 5. 如果以上都不成功,則使用"UTC"
[ErrorHandling]
error_reporting = E_ALL
; 錯誤報告應該包含的內容(位元欄位的疊加):
; 1 E_ERROR 致命的運行時錯誤
; 2 E_WARNING 運行時警告(非致命性錯誤)
; 4 E_PARSE 編譯時解析錯誤
; 8 E_NOTICE 運行時提醒(經常是bug,也可能是有意的)
; 16 E_CORE_ERROR PHP啟動時初始化過程中的致命錯誤
; 32 E_CORE_WARNING PHP啟動時初始化過程中的警告(非致命性錯)
; 64 E_COMPILE_ERROR 編譯時致命性錯
; 128 E_COMPILE_WARNING 編譯時警告(非致命性錯)
; 256 E_USER_ERROR 使用者自訂的致命錯誤
; 512 E_USER_WARNING 使用者自訂的警告(非致命性錯誤)
; 1024 E_USER_NOTICE 使用者自訂的提醒(經常是bug,也可能是有意的)
; 2048 E_STRICT 編碼標準化警告(建議如何修改以向前相容)
; 4096 E_RECOVERABLE_ERROR 接近致命的運行時錯誤,若未被捕獲則視同E_ERROR
; 8192 E_DEPRECATED 對在未來版本中可能無法正常運作的程式碼給予警告
; 16384 E_USER_DEPRECATED 使用者自訂的警告(對未來版本可能無法正常運作的程式碼給予警告)
; 32767 E_ALL 上述所有錯誤與警告
; [注意]不能在php.ini 之外使用這些常數(必須使用數值)。
; 開發環境可設為2147483647(所有二進位位元全為1) 開啟現在或將來可能出現的各種錯誤與警告。
; 在生產伺服器上建議設為E_ALL & ~E_DEPRECATED & ~E_STRICT 以避免過多的效能損失。
; 若想進一步提升效能,可考慮設為E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (只包含錯誤)
display_errors = On
; 是否將錯誤訊息顯示為輸出的一部分。
; 在最終發布的web站點上,強烈建議你關掉這個特性,並使用錯誤日誌代替。
; 在最終發布的web站點打開這個特性可能會暴露一些敏感資訊。
; 特殊值STDOUT 與STDERR 僅可用於CGI/CLI 模式(CLI模式預設值=STDOUT)。
display_startup_errors = On
; 是否顯示PHP啟動時的錯誤(PHP7預設值=Off)。
; 即使display_errors = On ,關閉此參數也不顯示PHP啟動時的錯誤。
; 在生產伺服器上建議關掉這個特性以避免洩漏敏感的設定資訊。
log_errors = Off
; 是否將錯誤訊息記錄到error_log 指定的目標。
; 強烈建議你在生產環境使用日誌記錄錯誤而不是直接輸出,
; 這樣可以讓你既知道那裡出了問題,又不會暴露敏感資訊。
; FPM/FastCGI 模式的預設值=On
log_errors_max_len = 1024
; 允許記錄錯誤訊息的最大位元組長度。設為0 可以允許無限長度。
ignore_repeated_errors = Off
; 是否忽略重複的錯誤訊息。
; 錯誤訊息必須出現在同一腳本的同一行才被視為重複(除非ignore_repeated_source = On)。
ignore_repeated_source = Off
; 當ignore_repeated_errors = On 時,是否忽略錯誤訊息的來源(忽略來自不同程式碼的相同錯誤訊息)。
report_memleaks = On
; 是否報告內存洩漏。這個參數只在以偵錯方式編譯的PHP中起作用,
; 且必須在error_reporting 指令中包含E_WARNING
report_zend_debug = Off
; 尚無說明文件(PHP7 的Apache/FPM/FastCGI 模式預設值=On)
html_errors = On
; 是否在出錯訊息中使用HTML標記。
; 在需要記錄錯誤日誌的時候不要使用這個特性!
; [提示]對於CLI 模式,此指令被硬編碼為Off
xmlrpc_errors = Off
; 是否將錯誤報告的格式設定為XML-RPC錯誤訊息的格式(關閉正常的錯誤報告)。
xmlrpc_error_number = 0
; XML-RPC faultCode 元素的值(僅在xmlrpc_errors = On 時有意義)。
docref_root = ;"https://www.php.net/manual/zh/"
docref_ext = ;".php"
; 如果html_errors = On 並且設定了docref_root ,那麼PHP將會在出錯訊息上顯示超連接。
; 直接連結到一個說明這個錯誤或導致這個錯誤的函數的頁面。
; 你可以下載php手冊之後,將docref_root 指令指向你本地的手冊所在的URL目錄。
; 你也必須設定docref_ext 指令來指定檔案的副檔名(必須含有'.')。
; [注意]不要在生產伺服器上使用這個特性。
error_prepend_string = ;""
error_append_string = ;""
; 附加在錯誤訊息前後的字串(一般用於添加顏色)
error_log =
; 設定記錄錯誤日誌的目標。如果是一個檔案(建議做法),那麼就必須擁有寫入權限。
; 設為syslog 表示記錄到系統日誌中(NT下的事件日誌, Unix下的syslog(3))
; 設為空表示:Apache錯誤日誌(apache2handler)、標準錯誤(CLI)、不記錄(FPM)。
; FPM/FastCGI 模式的預設值="/var/log/php-fpm/www-error.log"(RHEL/CentOS)
syslog.facility = LOG_USER
; 系統日誌中的facility 欄位值(產生日誌的子系統)。
; 僅在error_log = syslog 時有意義。
syslog.filter = no-ctrl
; 過濾(轉義為"\x???")日誌訊息中的哪些不安全字元:
; ascii (僅允許ASCII 字元與NL 字元)
; no-ctrl (允許所有非控製字元)
; all (允許所有字元)
; raw (允許所有字符,但不在換行符處分割日誌訊息)
; 僅在error_log = syslog 時有意義。
syslog.ident = php
; 系統日誌中的ident 欄位值(日誌訊息前綴[識別字串])。
; 僅在error_log = syslog 時有意義。
[FileStream]
allow_url_fopen = On
; 是否允許將URL(例如http:// 或 ftp://)當作文件使用。
allow_url_include = Off
; 是否允許include/require URL(例如http:// 或 ftp://)。
user_agent =
; PHP存取URL時使用的"User-Agent"字串
default_socket_timeout = 60
; socket 流的預設超時秒數
from =
; 定義匿名ftp的密碼(一個email地址)
auto_detect_line_endings = Off
; 是否讓PHP自動偵測行結束符(EOL)。
; 如果的你腳本必須處理Macintosh文件,或是你運行在Macintosh上,同時又要處理unix或win32文件,
; 開啟這個指令可以讓PHP自動偵測EOL,以便fgets() 和file() 函數可以正常運作。
; 但同時也會導致在Unix系統下使用回車符(CR)作為項目分隔符號的人遭遇不相容行為。
; 另外,在偵測第一行的EOL習慣時會有很小的效能損失。
[Filter]
;extension=filter
; 對來源不可靠的資料進行確認和過濾。
filter.default = unsafe_raw
; 使用指定的過濾器過濾$_GET, $_POST, $_COOKIE, $_REQUEST, $_SERVER 資料( unsafe_raw 表示不做任何過濾)。
; 原始資料可以透過filter_input() 函數存取。
filter.default_flags =
; 預設的過濾標誌。
[OptionsInfo]
assert.active = On
; 是否啟用assert() 斷言評估。
assert.bail = Off
; 是否在發生失敗斷言時中止腳本的執行
assert.warning = On
; 是否為每個失敗斷言都發出警告
assert.callback =
; 發生失敗斷言時執行的回呼函數
assert.exception = On
; 是否在斷言失敗時拋出AssertionError 異常
; PHP7的預設值=Off
enable_dl = On
; 是否允許使用dl()函數。 dl()函數僅在將PHP作為apache模組安裝時才有效。
; 停用dl()函數主要是出於安全考慮,因為它可以繞過open_basedir 指令的限制。
; 這個特性將來一定會被移除。強烈建議設為Off 。
max_execution_time = 30
; 每個腳本允許的最大執行時間(秒),0 表示沒有限制。
; 這個參數有助於阻止劣質腳本無休止的佔用伺服器資源。
; 該指令僅影響腳本本身的運行時間,任何其它花費在腳本運行之外的時間,
; 例如system()/sleep()函數、資料庫查詢、檔案上傳等,都不包含在內。
; [提示]對於CLI 模式,此指令被硬編碼為"0"(沒有限制)
; [提示]不要將此指令設定為大於Apache 的Timeout 指令(可能提前中斷PHP 的執行)。
max_input_time = -1
; 每個腳本接收輸入資料(POST, GET, upload)的最大允許時間(秒)。
; -1 表示不限制。在生產伺服器上應該限制為一個明確的值以阻止腳本無限運行。
; 如果使用者的網路速度較慢且需要上傳大文件,那麼應該設定一個較大的數值。
; [提示]對於CLI 模式,此指令被硬編碼為"-1"(沒有限制)
max_input_nesting_level = 64
; 輸入變數($_GET, $_POST, $_COOKIE ...)的最大巢狀深度
max_input_vars = 1000
; 輸入變數($_GET, $_POST, $_COOKIE ...)的最大總成員數。
; 此指令減輕了以哈希碰撞來進行拒絕服務攻擊的可能性
; 超過限定數量的輸入變數將會被截斷,並導致E_WARNING 產生。
zend.enable_gc = On
; 是否開啟循環參考記數蒐集器(垃圾回收)。關閉此指令可能會導致記憶體洩漏。
[Mail]
mail.add_x_header = Off
; 是否新增X-PHP-Originating-Script: 郵件頭,以包含"腳本UID + 檔案名稱"訊息
mail.force_extra_parameters =
; 強制指定mail() 函數的第5個參數。
mail.log =
; 如何記錄對mail() 函數的呼叫。設為空表示不記錄。
; 可以設為一個文件路徑表示記錄到文件,也可以設為syslog 表示記錄到系統日誌。
SMTP = "localhost"
; mail() 函數中用來傳送郵件的SMTP伺服器的主機名稱或IP位址(僅用於Windows)。
smtp_port = 25
; SMTP伺服器的連接埠號碼(僅用於Windows)。
sendmail_from =
; 發送郵件時使用的"From:"頭中的郵件地址(僅用於win32)。
; 該選項也同時設定了"Return-Path:"頭。
sendmail_path = /path/to/sendmail
; sendmail 程式的路徑(包括命令列參數)。
; configure 腳本會嘗試找到程式並設定為預設值(通常是"/usr/sbin/sendmail -t -i"),但是如果失敗的話,可以在這裡手動設定。
; 不使用sendmail 的系統應將此指令設定為sendmail 替代程式(如果有的話)。
; 此指令在Windows 平台上的預設值為空。
; 如果在Windows 平台上設定了此指令,那麼smtp smtp_port sendmail_from 指令都會被忽略並執行此處指定的指令。
[Misc]
ignore_user_abort = Off
; 是否即使在使用者中止請求後也堅持完成整個請求。
; 建議設為On ,因為長請求可能會導致使用者中途中止或瀏覽器逾時。
highlight.comment = "#FF8000"
highlight.default = "#0000BB"
highlight.html = "#000000"
highlight.keyword = "#007700"
highlight.string = "#DD0000"
; 語法高亮模式的色彩(通常用於顯示.phps 檔案)。
; 只要能被 接受,就能正常工作。
browscap = ;"c:/windows/system32/inetsrv/browscap.ini"
; 瀏覽器功能檔案的位置和檔案名稱(只有PWS和IIS才需要這個設定)。
[OutputControl]
output_buffering = 0
; 輸出緩衝區大小(位元組)。建議值為4096[也可以透過ob_start() 函數控制]。
; 輸出緩衝允許你甚至在輸出正文內容之後再發送HTTP頭(包括cookies)。
; 設定輸出緩衝有時可以減少網路封包的傳送(提升網路效能)。
; 這個參數的實際收益很大程度上取決於你使用的是什麼Web伺服器以及什麼樣的腳本。
; [提示]對於CLI 模式,此指令被硬編碼為"0"(禁用輸出緩衝)
output_handler =
; 將所有腳本的輸出重定向到一個輸出處理函數。
; 例如,當設為"mb_output_handler"重定向到mb_output_handler() 函數時,字元編碼將被透明地轉換為指定的編碼。
; 一旦在這裡指定了輸出處理程序,輸出緩衝將被自動打開(緩衝區大小=無限)。
; 注意0: 此處僅能使用PHP內建函數,自訂函數應在腳本中使用ob_start() 函數指定。
; 注意1: 可移植腳本不能依賴指令,而應使用ob_start() 函數明確指定輸出處理函數。
; 不要輕易使用這個指令,否則可能會導致某些你不熟悉的腳本出錯。
; 注意2: 不能同時使用"mb_output_handler"和"ob_iconv_handler"兩個輸出處理函數。
; 不能同時使用"ob_gzhandler"輸出處理函數和"zlib.output_compression"指令。
; 注意3: 如果"zlib.output_compression = On",那麼指令必須為空(代之以"zlib.output_handler")。
implicit_flush = Off
; 是否要求PHP輸出層在每個輸出區塊之後自動刷寫資料。
; 這等效於在每個print()、echo()、HTML區塊之後自動呼叫flush() 函數。
; 開啟這個選項對程式執行的效能有嚴重影響,只建議在偵錯時使用。
; [提示]對於CLI 模式,此指令被硬編碼為"On"(強制自動刷寫)
[PCRE]
pcre.backtrack_limit = 1000000
; 最大回溯(backtracking)深度。
pcre.recursion_limit = 100000
; 最大遞歸(recursion)深度。如果你將該值設的非常高,將可能耗盡進程的堆疊空間,導致PHP崩潰。
pcre.jit = 1
; 是否開啟PCRE函式庫的JIT(just-in-time) 編譯。
[Phar]
;extension=phar
; 將PHP應用程式/類別庫打包以簡化部署(以唯讀方式供他人使用)
phar.readonly = On
; 是否開啟Phar 只讀模式。務必在生產環境開啟此指令,否則會留下巨大的安全漏洞。
phar.require_hash = On
; 是否驗證所有Phar 歸檔的簽章(防止歸檔內容被竄改)。建議開啟以增強安全性。
phar.cache_list =
; 要在伺服器啟動階段預先解析的Phar 歸檔清單(用於提升效能)。
[Session]
session.save_handler = files
; 儲存和擷取會話資料的儲存處理器名字。預設為檔案("files")。
; 設為"user"表示可以使用session_set_save_handler() 註冊自訂的儲存處理器。
; 擴充模組可以註冊新的儲存處理器。所有已註冊的儲存處理器都可以透過phpinfo() 查看。
session.save_path =
; 傳遞給save_handler 的參數。對於files 處理器表示儲存會話資料檔案的目錄(預設為系統暫存目錄)。
; 可以使用"N;[MODE;]/path"模式定義該目錄,可選的[MODE;]為8進位數表示的資料檔案存取權限(預設為"600"),
; 整數N表示使用N層深度的子目錄(而不是將所有資料檔案都保存在同一個目錄下),以提高大量會話的效能。
; 注意: (1)"N;[MODE;]/path"兩邊的雙引號不能省略(因為";"是註解符號)。 (2)[MODE;]並不會改寫進程的umask。
; (3)PHP不會自動建立這些目錄結構(可使用ext/session 目錄下的mod_files.sh 腳本)。
; (4)如果該目錄(例如"/tmp")可以被不安全的使用者讀取或檢索,那麼將會帶來安全漏洞(洩漏會話ID甚至會話資料)。
; (5)當N>0時自動垃圾回收將會失效(詳見session.gc_* 指令)。
; (6)僅在確實擁有海量會話時才可能需要設定N>2(每一層有64個子目錄,N=3表示要建立64*64*64個子目錄)。
; (7)建議針對每個不同的虛擬主機分別設定各自不同的會話儲存目錄。
; FPM/FastCGI 模式的預設值="/var/lib/php/session"(RHEL/CentOS)
session.name = PHPSESSID
; 用在cookie裡的會話ID識別名,只能包含字母和數字。
session.auto_start = Off
; 是否在客戶造訪任何頁面時都自動初始化會話引擎。
; 因為類別定義必須在會話啟動之前被載入,所以開啟這個選項之後就不能在會話中存放物件了。
session.serialize_handler = php
; 用來序列化/解序列化資料的處理器,可以使用"php","php_binary","php_serialize"。
; 推薦使用新式的"php_serialize"代替預設的老式"php"以避免某些限制和缺陷。
; [注意]一旦啟用了WDDX支持,將只能使用"wddx"。
session.gc_probability = 1
session.gc_divisor = 100
; 定義在每次初始化會話時,啟動垃圾回收程序的機率。
; 這個收集機率計算公式如下:session.gc_probability/session.gc_divisor
; 對會話頁面存取越頻繁,機率就應當越小。建議設為1/(1000~5000)。
session.gc_maxlifetime = 1440
; 超過此指令所指的秒數後,保存的資料將被視為'垃圾'並由垃圾回收程序清理。
; 判斷標準是最後存取資料的時間(對於FAT檔案系統是最後刷新資料的時間)。
; 如果多個腳本共用同一個session.save_path 目錄但session.gc_maxlifetime 不同,
; 那麼將以所有session.gc_maxlifetime 指令中的最小值為準。
; 如果使用多層子目錄來儲存資料文件,垃圾回收程式不會自動啟動。
; 你必須使用一個你自己寫的腳本、cron項目或其他辦法來執行垃圾蒐集。
; 例如,下面的腳本相當於設定了"session.gc_maxlifetime=1440" (24分鐘):
; cd /path/to/sessions; find -cmin +24 | xargs rm
session.referer_check =
; 如果請求頭中的"Referer:"欄位不包含此處指定的字串則會話ID將被視為無效。
; 注意:如果請求頭中根本不存在"Referer:"欄位的話,會話ID將仍將被視為有效。
; 預設為空,即不做檢查(全部視為有效)。
session.use_strict_mode = 0
; 是否使用嚴格會話ID模式(拒絕未初始化的會話ID)。開啟嚴格模式可以保護伺服器免於會話固定攻擊。
; "嚴格模式"的意思是:如果瀏覽器發送了一個未初始化的會話ID,那麼伺服器將會回應一個新的已初始化的會話ID。
; 預設值"0"表示停用嚴格模式。建議設為"1"開啟此特性。
session.use_cookies = 1
; 是否使用cookie在客戶端儲存會話ID("1"表示啟用、"0"表示停用)。
session.use_only_cookies = 1
; 是否僅使用cookie在客戶端儲存會話ID("1"表示啟用、"0"表示停用)。
; 啟用此特性可以避免使用URL傳遞會話ID所帶來的安全性問題。
; 建議開啟此選項以增強安全性。
session.cookie_lifetime = 0
; 傳遞會話ID的Cookie有效期限(秒),"0"表示僅在瀏覽器開啟期間有效。
; [提示]如果你不能保證伺服器時間和客戶端時間嚴格一致請不要改變此預設值!
session.cookie_path = /
; 傳遞會話ID的Cookie作用路徑。
session.cookie_domain =
; 傳遞會話ID的Cookie的作用域(域名)。
; 預設值空表示根據cookie規格產生的主機名稱。
session.cookie_secure = 0
; 是否僅透過安全連線(https)傳送cookie("1"表示啟用、"0"表示停用)。
session.cookie_httponly = 0
; 是否在cookie中新增httpOnly標誌(僅允許HTTP協定存取)("1"表示啟用、"0"表示停用)。
; 啟用此特性將導致用戶端腳本(JavaScript等)無法存取該cookie。
; 開啟該指令可以有效預防透過XSS攻擊劫持會話ID。
session.cookie_samesite =
; 在cookie中新增SameSite屬性的值("Strict", "Lax", "None" 之一[務必保留引號]),
; 允許伺服器向客戶端聲明不應將此cookie用於跨站請求,這有助於預防跨站請求偽造(Cross-Site Request Forgery)。
; 並不是所有瀏覽器都支援此特性。設為空表示不隨cookie一起傳送SameSite屬性。
; "Strict"表示同時禁止POST 與GET 跨站發送cookie
; "Lax"表示禁止POST 跨站發送cookie 、但允許GET 跨站發送cookie
; 詳見 https://tools.ietf.org/html/draft-west-first-party-cookies-07
session.cache_limiter = nocache
; 指定會話頁面的快取控制策略(nocache|private|private_no_expire|public)。
; nocache 表示禁止客戶端與代理伺服器快取; public 表示允許客戶端與代理伺服器快取;
; private 表示允許客戶端快取但禁止代理伺服器快取;
; private_no_expire 與private 相同,但不發送"Expire:" 回應頭(解決Mozilla 等瀏覽器可能無法正確處理Expire 回應頭的BUG)。
; 設為空表示不會傳送任何與快取策略相關的回應頭。詳見session_cache_limiter() 函數。
session.cache_expire = 180
; 指定會話頁面在客戶端快取中的有效期限(分鐘)。當session.cache_limiter = nocache 時,此設定無意義。
session.use_trans_sid = 0
; 是否使用明碼在URL中顯示SID(會話ID)("1"表示啟用、"0"表示停用)。
; 基於URL的會話管理總是比基於Cookie的會話管理有更多的風險,應停用。
session.trans_sid_tags = "a=href,area=href,frame=src,form="
; 指定重寫哪些HTML標籤來包含SID(僅在session.use_trans_sid = On 時有意義)。
;