php.ini設定檔在何處?
要修改PHP設置我們會需要找到設定檔叫php.ini,正常下都會在C:\Program Files\IIS Express\PHP\版本\php.ini
在php的網頁上使用 echo phpinfo(); 的語法也能將您的php設置參數列出來查看。
常用的PHP設置參考
在php.ini裡,若最前面有「;」符號,則表示為註解,要將其拿掉,該行設定才會有作用,若仍無作用,請將iis的服務重啟試看看。
上傳大型檔案或大量檔案
upload_max_filesize = 4M 單一檔案上傳上限
post_max_size = 8M POST最大上限
memory_limit = 16M 記憶體上限
max_execution_time = 30 執行時間上限(秒)
max_input_time = 60 輸入資料時間上限(秒)
default_socket_timeout= 600 等待逾時(秒)
upload_tmp_dir = "" 上傳的暫存資料夾,不指定則預設存在 /tmp 裡
info 設定值依照自己的需求來做調整
原則必需為 memory_limit > post_max_size > upload_max_filesize
上傳檔案也較花費較長的時間,為了避免檔案上傳到一半,程式就被系統停止造成傳輸失敗,所以建議要再調整 max_execution_time 及 max_input_time。
禁用遠程URL的文件處理
allow_url_fopen = Off
allow_url_include = Off
這樣的設定來以防Remote File Inclusion (RFI)攻擊
限制文件系統讀/寫
open_basedir = "c:\inetpub\"
限制只能存取指定的目錄,可以同時設定多個目錄 (在Windows請使用「;」來分隔,在其它系統中則使用「:」)。
禁用Register_Globals
register_globals = Off
info 當設為On的時候,所有的POST、GET、SESSION、COOKIE 值都可以當作全域變數直接使用,為了防止程式使用的變數被注入程式碼,需要排除來自 HTML 表單的請求變數。 所以必需要設成Off,以防止程式變數和客戶端傳送的變數混雜在一起的情況。
輸出暫存
output_buffering = Off
一般伺服器的設定為off,建議也將自已的配置設成off,若在seesion_start之前有任何的輸出動作 (如echo),會輸出header error之類的錯誤。可以避免掉一些不必要的問題。
時差
date.timezone = "Asia/Taipei"
要解決8小時的時差,建議直接將此時區的配置設成亞洲/台北。或也可以在php程式碼裡設定,如下。
date_default_timezone_set("Asia/Taipei");
配置錯誤記錄
display_errors = Off 在網頁顯示錯誤訊息,在正式主機建設為 Off
display_startup_errors = Off 記錄起始錯誤,如module載入時
log_errors = On 將錯誤記在log檔裡
error_log = "C:\個人路徑"
error_reporting = E_ALL 指定哪些錯誤類型須要記錄,如下表。
項目 |
說明 |
E_ALL |
全部的訊息都要記錄 |
E_ERROR |
嚴重錯誤,造成程式無法執行 |
E_WARNING |
錯誤,旦程式可以繼續往下執行,例如某些舊的函式語法,版本較新的已經停用不支援。 |
E_PARSE |
編譯錯誤 |
E_NOTICE |
提醒,例如變數不存在旦卻對其取值,比如說 echo $a,旦之前並未設定過 $a 的值為何。 |
E_ERROR & E_WARNING |
用&符號可以複選需要記錄的錯誤,例如 E_ERROR 和 E_WARNING |
E_ALL & ~E_NOTICE |
記錄Notice以外的記錄 (即全部都記錄下來,旦不包含Notice) |
補充說明/ NOTE
一般很常遇到的情況是你寫好的php程式在你的主機環境上執行沒有遇到錯誤,放到別人的主機就會出現一些問題無法正常執行,這通常都是上述一些設定造成的差異,因此建議您在配置的時候,要以較嚴謹的方式來配置,才能有良好的寫作習慣與用法,也能減少資安的風險。