首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP.ini 核心配置詳解(進階篇):從資料處理到擴展模組載入

     編輯:PHP 綜合知識

概覽

本文承接基礎篇,深入解析 php.ini 中關於 資料處理順序、檔案上傳、動態擴展載入、資料庫連線池 以及 Session 管理 的關鍵指令。適用於 PHP 4.x/5.x 早期版本,現代 PHP 7/8 部分指令已棄用或重命名,請以官方文件為準。

資料處理與變量順序

; EGPCS 代表 Environment, GET, POST, Cookie, Server
; 從左至右解析,後者覆蓋前者
variables_order = "EGPCS"

; 是否將 EGPCS 註冊為全域變數($var)
; 生產環境強烈建議 Off,改用超全域陣列 $_GET 等
register_globals = Off

; 是否註冊 $argc/$argv(命令列參數)
register_argc_argv = Off

最佳實踐:register_globals=Off 配合 track_vars=On(預設開啟),統一使用 $_POST['name'] 風格,消除變量覆蓋風險。

檔案上傳控制

指令預設值說明
file_uploadsOn總開關,關閉可阻斷所有上傳
upload_max_filesize2M單檔上限,需配合 post_max_size > upload_max_filesize
upload_tmp_dir系統預設臨時儲存路徑,建議指定獨立分區且設 open_basedir
post_max_size8MPOST 總體大小,含所有表單欄位與檔案

動態擴展模組載入

; 擴展檔案目錄(絕對路徑)
extension_dir = "C:/php/ext"   ; Windows
extension_dir = "/usr/lib/php/extensions" ; Linux

; 啟用 dl() 函數動態載入(多執行緒 SAPI 如 IIS 必須關閉)
enable_dl = Off

; 具體模組啟用範例
extension=php_mysql.dll
extension=php_gd2.dll
extension=php_mbstring.dll
; extension=php_oci8.dll   ; Oracle 需額外客戶端庫

注意:Windows 下 php_mysql.dll 在 PHP 5.3+ 已內建,無需額外載入;Linux 通常編譯時指定 --with-mysql。

資料庫連線池與持久連線

以 MySQL 區塊為例,其他資料庫(PostgreSQL、ODBC、Sybase、MSSQL 等)結構類似:

[MySQL]
mysql.allow_persistent = On      ; 允許 mysql_pconnect()
mysql.max_persistent = -1        ; 持久連線上限(-1 無限制)
mysql.max_links = -1             ; 總連線上限(含非持久)
mysql.default_port = 3306
mysql.default_socket = /tmp/mysql.sock
; 生產環境嚴禁在 ini 寫死帳密!
; mysql.default_user = 
; mysql.default_password = 

原則:Web 應用優先使用持久連線減少握手開銷;CLI 腳本或長時間任務改用非持久連線避免佔用槽位。

Session 精細調校

[Session]
session.save_handler = files           ; 或 redis, memcached
session.save_path = "/var/lib/php/session" ; 需預先建立目錄並設 700 權限
session.use_cookies = 1                ; 傳遞 SID 僅靠 Cookie
session.use_only_cookies = 1           ; 防止 URL 重寫攻擊
session.name = PHPSESSID
session.auto_start = 0                 ; 手動 session_start() 控制
session.cookie_lifetime = 0            ; 瀏覽器關閉即失效
session.cookie_httponly = 1            ; JS 無法讀取 Cookie(需 PHP 5.2+)
session.cookie_secure = 1              ; 僅 HTTPS 傳輸(需全站 SSL)
session.gc_probability = 1
session.gc_divisor = 1000              ; 1/1000 機率觸發 GC
session.gc_maxlifetime = 1440          ; 24 分鐘無活動視為垃圾
session.cache_limiter = nocache
session.cache_expire = 180

高併發優化:將 save_handler 改為 redis 或 memcached,並啟用 session.locking 機制防止競態條件。

其他常用區塊速查

  • [mail function]:SMTP、sendmail_from(僅 Windows)、sendmail_path(Linux)
  • [Java]:java.class.path、java.home —— PHP/Java Bridge 專用
  • [bcmath]:bcmath.scale = 2 設定預設小數位
  • [browscap]:browscap = /etc/php/browscap.ini 啟用 get_browser()

安全加固清單

  1. expose_php = Off 隱藏 X-Powered-By 標頭
  2. display_errors = Off、log_errors = On、error_log = /var/log/php/error.log
  3. disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
  4. open_basedir = /var/www/:/tmp/:/var/lib/php/session/ 限制腳本可訪問目錄
  5. allow_url_fopen = Off、allow_url_include = Off 禁止遠端檔案包含
配置修改後必須重啟 PHP-FPM 或 Apache 才能生效。建議維護 php.ini.production 版本納入版控,部署時以模板渲染產生最終檔案。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved