ini_set() 允許在腳本執行期間動態修改 php.ini 設定值,效力僅限於當前腳本生命週期,腳本結束自動恢復。這對無法修改主配置文件的虛擬主機環境極為實用。本文整理常用設定項、語法與注意事項。
string ini_set(string $varname, string $newvalue)
false。PHP_INI_USER 或 PHP_INI_ALL 者可用。@ 抑制失敗時的警告。| 設定項 | 說明 | 範例 |
|---|---|---|
memory_limit | 腳本最大可用記憶體,防止失控腳本耗盡資源 | @ini_set('memory_limit', '256M'); |
display_errors | 是否顯示錯誤訊息,開發環境建議開啟 | @ini_set('display_errors', '1'); |
error_reporting | 錯誤報告等級 | @ini_set('error_reporting', E_ALL); |
session.auto_start | 是否自動啟動 Session,0 需手動 session_start() | @ini_set('session.auto_start', '0'); |
session.gc_maxlifetime | Session 資料在伺服器保存秒數(預設 1440) | @ini_set('session.gc_maxlifetime', '7200'); |
session.cookie_lifetime | Session Cookie 存活秒數,0 為瀏覽器關閉即失效 | @ini_set('session.cookie_lifetime', '3600'); |
max_execution_time | 腳本最大執行秒數,0 為無限制 | @ini_set('max_execution_time', '300'); |
post_max_size | POST 資料最大尺寸(影響檔案上傳) | @ini_set('post_max_size', '50M'); |
upload_max_filesize | 單檔上傳最大尺寸 | @ini_set('upload_max_filesize', '50M'); |
default_socket_timeout | Socket 操作超時秒數(影響 file_get_contents 等) | @ini_set('default_socket_timeout', '60'); |
// 使用 Cookie 傳遞 Session ID(預設開啟)
@ini_set('session.use_cookies', '1');
// 禁止在 URL 中透傳 Session ID(安全風險:易洩漏、被收藏、郵件傳播)
@ini_set('session.use_trans_sid', '0');
// 僅允許 HTTPS 傳輸 Session Cookie(需 HTTPS 環境)
@ini_set('session.cookie_secure', '1');
// 防止 JavaScript 存取 Session Cookie(XSS 防護)
@ini_set('session.cookie_httponly', '1');
// 設定 SameSite 屬性(PHP 7.3+,防 CSRF)
@ini_set('session.cookie_samesite', 'Lax'); // 或 'Strict', 'None'
session_start() 前設定 Session 參數)。disable_functions 包含 ini_set 或指令模式為 PHP_INI_SYSTEM,則無法生效。display_errors 應關閉,改用 log_errors + error_log 記錄至檔案。php.ini、.user.ini(CGI/FPM 模式)或 Apache .htaccess(php_value 指令)。