PHP常用配置

CopperDong發表於2018-04-03

Php配置檔案:php.ini(使用‘;’表示註釋)

Php的配置項可以在配置檔案中配置,也可以在指令碼中使用ini_set()函式臨時配置。

 

語言相關配置:

1. engine:設定PHP引擎是否可用,預設值為On,若設定為Off則無法使用PHP

配置示例:

engine = On

2. short_open_tag:是否允許PHP指令碼使用短開放標記,將“<?php ?>”改為“<? ?>”。但這個語法與XML相同,這在某些情況下可能會導致問題,所以一般建議關閉該項。

配置示例:

short_open_tag = Off

3. asp_tags:是否支援ASP風格的指令碼定界,即“<% %>”。

配置示例:

asp_tags = On

4. precision:指定在浮點數表示中顯示的有效數字。該項在Win32系統中設定為14,在Linux中設定為12.

配置示例:

precision = 14

5. output_buffering:設定是否使用輸出緩衝,或者設定輸出緩衝區的大小。使用輸出緩衝會使效能稍稍下降。

配置示例:

output_buffering = 4096

output_buffering = On

6. output_handler:設定將輸出返回給請求使用者之前要把所有輸出傳遞給一個函式。例如,假設你希望將輸出返回給瀏覽器之前先對所有輸出進行壓縮,可以將該項配置為PHP壓縮處理函式“ob_gzhandler”。

配置示例:

output_handler = “ob_gzhandler”

注意,不能在將output_handler設定為ob_gzhandler的同時啟用zlib.output_compression

7. zlib.output_compression:通過設定為“On”或“Off”決定是否在輸出返回給瀏覽器之前先自動壓縮,通過賦一個整數值,可以啟用輸出壓縮,同時設定壓縮緩衝區大小。

配置示例:

zlib.output_compression = Off

8. zlib.output_handler:如果zlib庫不可用,zlib.output_handler將指定一個特定的壓縮庫。

9. implicit_flush:啟用時,每次呼叫print()echo(),以及完成各個嵌入的HTML塊後,將自動清除或重新整理其內容的輸出緩衝區。當伺服器需要非常長的時間來編譯結果或完成某些計算時,這可能很有用。在這些情況下,可以利用這個特性想使用者輸出狀態更新,而不是等待伺服器完成整個過程後才輸出。

配置示例:

implicit_flush = Off

10. ignore_user_abort:是否設定即使在使用者中止請求後也堅持完成整個請求。在執行一個長請求的時候應當考慮開啟它,因為長請求可能會導致使用者中途中止或瀏覽器超時。該配置項可以用於實現類似Unix下的crontab(定時任務計劃)功能。

配置示例:

ignore_user_abort=On

11.zend.enable_gc:設定是否開啟PHP的垃圾回收機制。

配置示例:

zend.enable_gc=On

 

安全相關配置:

1. safe_mode:是否啟用安全模式。

配置示例:

safe_mode = On

  開啟時,PHP將檢查當前指令碼的擁有者是否和被操作的檔案的擁有者相同,相同則允許操作,不同則拒絕操作。開啟安全模式的前提是你的目錄檔案許可權已完全分配正確。開啟該項會減慢程式執行效率。

2. safe_mode_gid:開啟時表示修改安全模式的行為,從執行前驗證UID改為驗證組ID

配置示例:

safe_mode_gid = On

3. safe_mode_include_dir:指示多個路徑,啟動安全模式時在這些路徑中將忽略安全模式。

配置示例:

safe_mode_include_dir = “/chsfc/data;/chsfc/log”  (在基於UNIX的系統多個路徑之間使用冒號分隔,在Windows中使用分號分隔)

4. safe_mode_env_vars:當啟用安全模式時,可以只用此指令允許執行使用者的指令碼修改某些環境變數。可以允許修改多個變數,每個變數之間用逗號分隔。

5. safe_mode_exec_dir:此指令指定一些目錄,其中的系統程式可以通過諸如system()exec()passthru()等函式執行。為此必須啟用安全模式。在所有作業系統中(包括Windows),都必須使用斜線(/)作為目錄的分隔符。

6. safe_mode_protected_env_vars:此指令保護某些環境變數不能被putenv()函式修改。默認情況下,變數LD_LIBRARY_PATH是受保護的,因為如果在執行時修改這個變數可能導致不可預知的結果。本項中宣告的所有變數都覆蓋 safe_mode_allowed_env_vars指令中宣告的變數。

7. open_basedir:指定允許PHP進行檔案系統操作的目錄,任何對這些目錄以外的檔案操作都會導致錯誤。

配置示例:

openbasedir="C:\inetpub\wwwroot;C:\inetpub\temp"(目錄之間由分號分隔)

(實際上“C:\inetpub\temp”指定的是目錄字首,“C:\inetpub\temp\”指定的才是特定的目錄)

8. disable_functions:該指令接受一個用逗號分隔的函式名列表,以禁用特定的函式。

配置示例:

disable_functions = chown,chroot

  出於安全原因考慮,禁止使用一些特定的函式,此時若在程式中呼叫其中的任何一個函式都會出現Warning: .....  has been disabled for security reasons in .....

9. disable_classes:出於安全原因,禁用特定的類。禁用多個類時,類名之間使用逗號分隔。

配置示例:

disable_classes=”vector,graph”

10. allow_url_includePHP通過此選項控制是否允許通過include/require來執行一個遠端文件。

配置示例:

allow_url_include = Off

  此項配置為On存在安全漏洞:首先,遠端檔案可能包含可執行的PHP木馬,其次,若將遠端檔案url作為引數傳遞,使用者可以通過傳遞一個不存在的檔案url來訪問使得服務器報錯,然後從報錯資訊中得到伺服器的文件路徑,通過一定手段獲取伺服器上的敏感檔案。

11. allow_url_fopen:是否允許開啟遠端檔案。

配置示例:

allow_url_fopen = Off

  該項配置為On存在安全漏洞。

12. register_globals:PHP在程式啟動時,會根據register_globals的設定,判斷是否將$_GET$_POST$_COOKIE$_ENV$_SERVER$REQUEST等陣列變數裡的內容自動註冊為全域性變數。

配置示例:

register_globals = Off

  建議關閉該配置項,開啟會增加安全漏洞的數量,並隱藏了資料的來源。如果必須要開發一個在register_globals開啟的環境中佈署的應用,必須要讓所有變數在使用前進行初始化,當register_globals開啟時,任何使用未初始化變數的行為都意味著安全漏洞。

13. enable_dl:設定是否允許使用dl()函式在指令碼執行時載入PHP擴充套件。dl()函式僅在將PHP作為apache模組安裝時才有效,在除apache以外的多執行緒伺服器上不能正確工作。禁用dl()函式主要是出於安全考慮,因為它可以繞過open_basedir指令的限制。在安全模式下始終禁用dl()函式,而不管此處如何設定。

配置示例:

enable_dl = Off

14. cgi.force_redirect:開啟cgi強制重定向為以CGI方式執行的php提供了必要的安全保護,php預設開啟了該引數。

配置示例:

cgi.force_redirect=1

注意:在IIS/OmniHTTPD/Xitami上則必須關閉它!

 

效能相關配置:

1. realpath_cache_size:指定PHP使用的realpath(規範化的絕對路徑名)緩衝區大小。在PHP開啟大量檔案的系統上應當增大該值以提高效能。

配置示例:

realpath_cache_size=16k

注意:這個realpath_cache_size是每個Apache程式獨佔的,所以很耗記憶體,不能設定的太大。

2. realpath_cache_ttlrealpath緩衝區中資訊的有效期(單位:秒)。對檔案很少變動的系統,可以增大該值以提高效能。

配置示例:

realpath_cache_ttl=120

3. auto_globals_jit:是否僅在使用到$_SERVER$_ENV變數時才建立(而不是在指令碼一啟動自動建立)。如果並未在指令碼中使用這兩個陣列,開啟該指令將會獲得效能上的提升。要想該指令生效,必須關閉register_globalsregister_long_arraysregister_argc_argv指令。

配置示例:

auto_globals_jit = On

 

錯誤資訊相關配置:

1. log_errorsPHP錯誤報告日誌功能開關。

配置示例:

log_errors = On     // 開啟PHP錯誤報告日誌功能

2. error_logPHP錯誤報告日誌檔案路徑。

配置示例:

error_log = "D:\wamp\bin\Php7.0.9\php_errors.log"

3. error_reporting:設定PHP的報錯級別。

報錯級別引數列表:

E_ALL:所有的錯誤和警告(不包括 E_STRICT)

E_ERROR:致命性的執行時錯誤

E_WARNING:執行時警告(非致命性錯誤)

E_PARSE:編譯時解析錯誤

E_NOTICE:執行時提醒(這些經常是你程式碼中的bug引起的,也可能是有意的行為造成的。)

E_STRICT:編碼標準化警告,允許PHP建議如何修改程式碼以確保最佳的互操作性向前相容性。

E_CORE_ERROR PHP啟動時初始化過程中的致命錯誤

E_CORE_WARNINGPHP啟動時初始化過程中的警告(非致命性錯)

E_COMPILE_ERROR:編譯時致命性錯

E_COMPILE_WARNING:編譯時警告(非致命性錯)

E_USER_ERROR:使用者自定義的錯誤訊息

E_USER_WARNING:使用者自定義的警告訊息

E_USER_NOTICE:使用者自定義的提醒訊息

注意:錯誤報告是位欄位,可以將數字加起來得到想要的錯誤報告等級。

配置示例:

Error_reporting = E_ALL & ~E_NOTICE   // 除提示外,顯示所有錯誤

4. display_errors:設定PHP是否將任何錯誤資訊包含在返回給Web伺服器的資料流中。

配置示例:

display_errors = On

PHP將任何由error_reporting所定義的錯誤資訊作為錯誤資料流返回給Web伺服器)

5. display_startup_errors :是否列印php啟動時產生的錯誤。

配置示例:

display_startup_errors = Off

6. html_errors:是否在出錯資訊中使用HTML標記。如果開啟了html_errors指令,PHP將會在出錯資訊上顯示超連結,直接連結到一個說明或者導致這個錯誤的函式的頁面。你可以在網上下載php手冊,並將docref_root指令指向你本地的手冊所在的URL目錄中,你還必須設定docref_ext指令來指定檔案的副檔名。

注意:不要在釋出的站點上使用這個特性。

配置示例:

html_errors = On

docref_root = "http://localhost/phpmanual/"

docref_ext = ".html"

7. track_errors:儲存最近一個錯誤/警告訊息於變數$php_errormsg中。$php_errormsg這個變數只在錯誤發生的作用域內可用,並且要求track_errors是開啟的。

配置示例:

track_errors = On

8. log_errors_max_len:設定錯誤日誌檔案中每條錯誤訊息的最大長度。

配置示例:

log_errors_max_len=1024

9. ignore_repeated_errors:是否忽略重複的錯誤資訊。如果關閉這個引數,錯誤資訊必須出現在同一個檔案的同一行才會被忽略。

配置示例:

ignore_repeated_errors=Off

10. ignore_repeated_source:忽略重複訊息時,也忽略訊息的來源,重複資訊將不會記錄它是由不同的檔案還是不同的原始碼產生的。

配置示例:

ignore_repeated_source=Off

11. report_memleaks:設定是否報告記憶體洩露資訊。這個引數只在除錯編譯中起作用,並且必須在error_reporting中包含E_WARNING

配置示例:

report_memleaks=On

12. error_prepend_string:錯誤資訊之前輸出的內容。

配置示例:

error_prepend_string = "<span style='color: #ff0000'>"

13. error_append_string:錯誤資訊之後輸出的內容。

配置示例:

error_append_string = "</span>"

 

資源限制相關配置:

1. max_execution_time:設定任何指令碼所能夠執行的最長時間,預設值是30秒。

配置示例:

max_execution_time = 30

2. memory_limitPHP程式能夠佔用的記憶體,單位是M,預設值是128M

配置示例:

memory_limit = 128M

3. max_input_nesting_level:設定輸入變數的巢狀深度(例如$_GET$_POST$_COOKIE等)。

配置示例:

max_input_nesting_level=64

4. max_input_vars:設定輸入變數的最大數量(限制分別應用於$_GET$_POST$_COOKIE)。

配置示例:

max_input_vars=1000

5. max_input_time:設定每個指令碼接收POSTGETPUT等方式輸入資料的最大時間限制。

配置示例:

max_input_time = 60

6. default_socket_timeout:設定socket超時時間。Socket流從建立到傳輸再到關閉整個過程必須要在這個引數設定的時間內完成,如果不能完成,PHP將會自動結束這個socket並返回一個警告。例如:使用file_get_contents()函式獲取檔案內容的時間會受到限制。

配置示例:

default_socket_timeout=60

7. pcre.backtrack_limitPCRE的最大回溯步數限制。該引數影響非貪婪模式的正則匹配。

配置示例:

pcre.backtrack_limit=100000

注意:如果將這個值設定為一個很大的數字,可能會消耗掉所有的程式可用棧,最終導致php崩潰。

8. pcre.recursion_limitPCRE的最大遞迴深度限制。

配置示例:

pcre.recursion_limit=100000

  實際專案應用中,最好也對記憶體進行限定設定memory_limit,這樣比較穩妥。

9. post_max_sizePOST方法提交資料的最大大小限制。

配置示例:

post_max_size = 8M

(若PHP程式需要上傳大型資料例如照片和視訊檔案,則應提高upload_max_filesizepost_max_size的值)

 

資料處理相關配置:

1. allow_calltime_pass_reference:是否強制所有引數在函式呼叫時都按引用傳遞,不推薦。建議在函式定義中指定每個引數在函式呼叫時的傳遞方式,傳值或傳引用。

配置示例:

allow_calltime_pass_reference = Off

2. register_argc_argv:是否宣告$argv$argc變數。命令列執行PHP指令碼格式:php  php指令碼路徑  引數1  引數2  引數3  ...  引數n$argv是一個陣列,儲存命令列引數,其中第一個元素是指令碼檔案路徑名稱。$argc儲存$argv陣列元素的個數。若不想使用這兩個變數,應當關閉它以提高效能。

配置示例:

register_argc_argv = Off

3. request_order:設定超全域性變數$_REQUEST的值。預設值為“GP”,只包含$_GET$_POST而不包括$_COOKIEGPC的先後順序就是設定的array的覆蓋順序(後者覆蓋前者)。

配置示例:

request_order = "GP"

4. variables_order:設定PHP變數解析順序,包括$_GET$_POST$_COOKIE$_ENV $_SERVER 陣列,解析順序從左到右,後解析新值覆蓋舊值。預設設定為EGPCSEnvironmentGETPOSTCookieServer)。  

配置示例:

variables_order = "GPCS"

5. arg_separator.output:設定PHP所產生的URL中來分隔引數的分隔符,預設是“&”。

配置示例:

arg_separator.output = "&"

PHP產生URL的函式:http_build_query

6. arg_separator.inputPHP解析URL中的變數時使用的分隔符列表,預設是“&”。

配置示例:

arg_separator.input = ";&"(字串中的任何字元都將被看成分隔符)

7. auto_prepend_fileauto_append_file:分別指定在主檔案之前和之後自動解析的檔案名。這些檔案就像呼叫了include()函式被包含進來一樣,因此會使用include_path指令的值。

注意:如果指令碼通過exit()終止,那麼自動字尾將不會發生。

8. default_mimetypedefault_charset:分別設定PHP文件的MIME型別和字符集的編碼

方式。這兩個資訊會在資料包頭部欄位“Content-Type”中輸出。

配置示例:

default_mimetype = "text/html"

default_charset = "UTF-8"

 

檔案上傳相關配置:

1. file_uploads:是否允許HTTP檔案上傳。

配置示例:

file_uploads=On

2. max_file_uploads:一個請求允許上傳的最大檔案數量限制。

配置示例:

max_file_uploads=20

3. upload_tmp_dir:檔案上傳時存放檔案的臨時目錄(必須是PHP程式使用者可寫的目錄)。

配置示例:

upload_tmp_dir = "D:/wamp/phpfileuploadtmp"

4. upload_max_filesize:上傳檔案的最大大小限制。

配置示例:

upload_max_filesize = 2M

 

Session相關配置:

1. session.save_path:設定session檔案存放的位置(資料夾應該是已經存在的)。

配置示例:

session.save_path = "D:/wamp/phpsessiontmp"

為了保證伺服器的安全,最好設定為外網無法訪問的目錄。

2. session.save_handler:設定session資料的存取方式。預設以檔案方式存取。

配置示例:

session.save_handler = files   // 檔案方式

session.save_handler = user   // 資料庫方式

3. session.use_cookies:是否使用cookies在客戶端儲存會話sessionid,預設為採用cookies

配置示例:

session.use_cookies = 1

4. session.use_only_cookies:是否僅僅使用cookie在客戶端儲存會話sessionid,這個選項可以使管理員禁止使用者通過URL來傳遞sessionid,預設為0,如果禁用的話,客戶端如果禁用cookie將使session無法工作。

配置示例:

session.use_only_cookies = 1

5. session.name:設定session名稱。

配置示例:

session.name = PHPSESSID

6. session.auto_start:是否自動啟動session,預設不啟動。若不自動啟動,每個PHP指令碼頭部都需要通過session_start()函式來啟動session

配置示例:

session.auto_start = 0

7. session.cookie_lifetime:傳遞sessionidcookie有效期,0表示僅在瀏覽器開啟期間有效。

配置示例:

session.cookie_lifetime = 0

8. session.gc_probabilitysession.gc_divisor:定義每次初始化會話時,啟動垃圾回收程式的概率。計算公式:session.gc_probability / session.gc_divisor。對會話頁面訪問越頻繁,概率就應當越小。

配置示例:

session.gc_probability = 1

session.gc_divisor = 1000

9. session.gc_maxlifetime:設定儲存的session檔案生存期,超過此引數設定秒數後,儲存的資料將被視為’垃圾’並由垃圾回收程式清理。如果你在session.save_path選項中設定使用子目錄來儲存session資料檔案,垃圾回收程式不會自動啟動,你必須使用自己編寫的shell指令碼、cron項或者其他辦法來執行垃圾蒐集。

配置示例:

session.gc_maxlifetime = 1440

10. session.use_trans_sid:設定當客戶端禁用Cookie時,是否將sessionid以引數的形式自動附加到URL末尾。

配置示例:

session.use_trans_sid = 1

(注意:要配合session.use_only_cookies=0配置使用,否則無效)

11. session.bug_compat_42session.bug_compat_warnPHP4.2之前的版本有一個未註明"特性"(也可看作bug):即使在"register_globals   =   Off"的情況下也允許初始化全域性session變數,在4.2.3以後為了相容以前的模式, PHP引入了bug_compat_42, 當啟用這個選項以後(預設啟用), PHP將容許自動將SESSION中的變數做為全域性變數使用只不過如果bug_compat_warn選項開啟的情況下會報告這個特性的被使用.

配置示例:

session.bug_compat_42 = On

session.bug_compat_warn = On

12. session.hash_bits_per_character:指定在session_id字串中的每個字元內儲存多少位二進位制數,這些二進位制數是hash函式的運算結果。影響session id的長度,該值減小時session id長度增大。

配置示例:

session.hash_bits_per_character = 5

13. url_rewriter.tags:指定重寫哪些HTML標籤來包含session_id(僅在"session.use_trans_sid"開啟的情況下有效)formfieldset比較特殊,如果你包含他們,URL重寫器將新增一個隱藏的"<input>",它包含了本應當額外追加到URL上的資訊。如果你想相容XHTML標準,請使用"fieldset"代替"form"

注意:所有合法的項都需要一個等號——即使後面沒有值。

配置示例:

url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

 

其他配置:

1. extension_dir:存放擴充套件庫(模組)的目錄,也就是PHP用來尋找動態連線擴充套件庫的目錄。PHP擴充套件庫檔案都存放在PHP安裝目錄下的ext目錄下。

配置示例:

extension_dir = "D:\wamp\bin\Php7.0.9\ext"

2. extension:對於每個需要啟用的擴充套件,都需要一行相應的“extension=”語句來說明PHP啟動時需要載入哪些擴充套件。

配置示例:

配置一個檔名:

extension=php_mysqli.dll

或者配置一個路徑:

extension="D:\wamp\bin\Php7.0.9\ext\php_mysqli.dll"

(如果只是配置檔名,PHP會在extension_dir配置的目錄下查詢)

3. date.timezone:設定時區。該設定影響PHP中所有的日期、時間函式。

配置示例:

date.timezone = Asia/Shanghai

4. doc_rootPHP頁面在伺服器上的根目錄。

配置示例:

doc_root = "D:\wamp\www"

5. magic_quotes_gpcPHP根據其配置決定是否將對所有GPC引數($_GET,$_POST,$_COOKIE)進行addslashes處理[既轉義單引號、雙引號、反斜線和nullbyte]

配置示例:

magic_quotes_gpc = On

magic_quotes_gpc設定為On時存在效能損耗。

6. expose_php:是否隱藏PHP版本資訊。

配置示例:

expose_php = Off

  若將該配置項開啟,伺服器發出的http包頭部都會包含PHP的版本資訊,如:X-Powered-By:PHP/7.0.9,若關閉則不會出現。

7. user_ini.filenameuser_ini.cache_ttluser_ini.filename設定使用者可以自定義的php.ini檔案的名稱;讀取檔案後會快取起來,user_ini.cache_ttl設定重新讀取的時間間隔。

配置示例:

user_ini.filename = ".user.ini"

user_ini.cache_ttl = 300

8. include_path:指定一組目錄用於require()include()fopen_with_path()函式尋找檔案。目錄之間Unix下用冒號分隔,Windows用分號分隔。

配置示例:

Unixinclude_path=".:/php/includes"

Windows:include_path=".;c:\php\includes"

9. sys_temp_dirPHP用於存放臨時檔案的目錄。

配置示例:

sys_temp_dir = "C:\Windows\TEMP"

10. cgi.nph:如果該引數開啟,那麼它會強制cgi對每個http請求始終傳送狀態碼200.

配置示例:

cgi.nph=1

11. SMTPmail()函式中用來傳送郵件的SMTP伺服器的主機名或IP地址,僅用於win32.

配置示例:

SMTP=localhost

12. smtp_portSMTP伺服器的埠號,僅用於win32.

配置示例:

smtp_port=25

13. sendmail_from:傳送郵件時使用的“From:”頭中的郵件地址,僅用於win32

配置示例:

sendmail_from = me@example.com

14. cgi.force_redirect:這是個在許多Web伺服器中都需要被啟用的目錄安全功能,不設定時伺服器預設開啟。但是在IIS伺服器中一定要把這個功能關閉,否則會導致PHP引擎在Windows中出錯。

配置示例:

cgi.force_redirect = 1      // 1開啟,0關閉

15. cgi.fix_pathinfo:此指令可以允許PHP遵從CGI規則訪問真實路徑資訊。IISFastCGI現需要啟用此指令。

配置示例:

cgi.fix_pathinfo = 1

16. Fastcgi.impersonate: IIS 下的 FastCGI 支援模擬呼叫使用者方安全令牌的能力。這使得IIS可以定義請求方的安全上下文。

配置示例:

Fastcgi.impersonate = 1

17. Fastcgi.loggingFastCGI 日誌在 IIS 下應被關閉。如果啟用,則任何類的任何訊息都被FastCGI 視為錯誤條件從而導致 IIS 產生 HTTP 500 錯誤。

配置示例:

Fastcgi.loggingFastCGI = 0

相關文章