2011
Oct
23

php.ini 是php程式的設定檔,其中包含不少安全性設定,我們就一一來看分別代表什麼意思吧

圖片上傳必改

  • file_uploads = on :
    • [on] 代表允許上傳檔案
  • upload_max_filesize = 2M :
    • [2M] 代表允許上傳的檔案最大 size
  • upload_tmp_dir = "" : 指定上傳檔案時的暫存資料夾,如果不指定的說,預設會存在 /tmp 裡
  • max_file_uploads = 20 ; 指定一次可以上傳的最大檔案數。
  • post_max_size = 8M ;
    • [8M] 代表使用POST上傳的最大資料量。
    • 如果你只改了 upload_max_filesize 到 8M, 而忘了改 post_max_size,在你上傳檔案時,檔案的內容會超過 post_max_size,接著就被伺服器給中斷掉了,所以要記得改!

錯誤記錄( error log)

php 內建就有記錄程式錯誤的功能,方便工程師 debug。

  • error_reporting = E_ALL : 指定哪些錯誤類型須要php記錄
    • E_ALL : 是指全部的 error 訊息都要記錄
    • E_ERROR: 嚴重錯誤,會使得程式當掉的才記錄下來
    • E_WARNING : warning 記錄下來
    • E_PARSE : 編譯錯誤記錄下來
    • E_NOTICE : 提醒工程師,可能會出錯的訊息
    • error_reporting = E_ERROR & E_WARNING :只記錄這兩種錯誤
    • error_reporting = E_ALL & ~E_NOTICE :除了 Notice以外的錯誤都記錄下來
  • display_errors = On
    • [On] : 在網頁顯示錯誤訊息,
如果打開這個功能,當程式發生錯誤時,user會立即在網頁上看到錯誤訊息,除了會讓user以為看到亂碼之外,還有安全性上的風險。
  • [Off] : 不在網頁上顯示錯誤訊息,
  • display_startup_errors
    • [On] : php 起始錯誤會記錄下來,如module載入失敗等等訊息。
    • [Off] : 建議關閉,預設也是關閉的
  • log_errors = On
    • [On] : 將錯誤訊息記錄在檔案裡。
    • [Off] : 關閉記錄錯誤訊息在檔案的功能。
  • log_errors_max_len = 1024 : log檔案的最大size
  • error_log = "/logs/error_log" :指定log的檔案名稱
  • ignore_repeated_errors : 同一個檔案,同一行,忽略重覆的錯誤訊息。
  • ignore_repeated_source : 當同一個錯誤,是執行在不同的檔案時産生,忽略此錯誤訊息。
  • report_memleaks = On : 記錄 memory leak (E_WARNING)
  • track_errors :將誤錯訊息存在變數 $php_errormsg

Paths and Directories

  • include_path :php自動載入的根目錄
Example
  1. //如果include_path="/home/php/lib/"
  2. require('zip.php');
  3. /*
  4. 會自動去搜尋 /home/php/lin/zip.php 並載入
  5. 如果有同檔名的檔案 zip.php存在,會以include_path的為主
  6.  
  7. */
  • extension_dir: php extension 載入的目錄
  • enable_dl : 是否允許動態載入 php extension
Example
  1. dl('mbstring.so');
  • open_basedir : php 允許可以讀取的目錄 , 使用 file_get_contents 這個 function 時,有時會有權限不足的訊息,可以修改這個設定打開權限。

date.timezone 時區設定

一般PHP設定檔中 php.ini ,預設的時間是用國際標準時間(UTC),而台灣時間是國際標準時間 +8 。

  • 改成台北時間的話可以使用語法 :date.timezone = "Asia/Taipei"

另一種設定 timezone 的方式,可以在 PHP Script 中直接指定 timezone 。

date_default_timezone_set("Asia/Taipei");

回應 (Leave a comment)