天天看點

php.ini配置檔案的文法及其使用

作者:寒笛過霜天

關于php.ini

這個檔案必須命名為'php.ini'并放置在httpd.conf中的PHPIniDir指令指定的目錄中。

空白字元和以分号開始的行被簡單地忽略。

章節标題(例如: [php])也被簡單地忽略, 即使将來它們可能有某種意義。

設定指令的格式如下:

directive = value

指令名(directive)是大小寫敏感的!是以"foo=bar"不同于"FOO=bar"。

值(value)可以是:

1. 用引号界定的字元串(如:"foo"),也可以不用引号

2. 一個數字(整數或浮點數,如:0, 1, 34, -1, 33.55)

3. 一個php常量(如:E_ALL, M_PI)

4. 一個ini常量(On, Off, none)

5. 一個表達式(如:E_ALL & ~E_NOTICE)

ini檔案中的表達式僅使用:位運算符、邏輯非、圓括号:

| 位或

& 位與

~ 位非

! 邏輯非

布爾标志用 on 表示打開,用 off 表示關閉。

一個空字元串可以用在等号後不寫任何東西表示,或者用 none 關鍵字:

foo = ; 将foo設為空字元串,等同于foo = none;

foo = "none" ; 将foo設為字元串'none'

如果你在指令值中使用動态擴充(PHP擴充或Zend擴充)中的常量, 那麼你隻能在加載這些動态擴充的指令行之後使用這些常量。

include_path

設定PHP的搜尋路徑, 這一參數可以接收系列的目錄。當PHP遇到沒有路徑的檔案提示時, 它将會自動檢測這些目錄,

需要注意的是, 當某些選項允許多個值(多個路徑), 應使用系統清單分隔符, 在Windows下使用分号";", 在Linux下使用冒号":"

; Windows: "\path1;\path2"

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

; UNIX: "/path1:/path2"

;include_path = ".:/php/includes"

注意:

首先你要知道include_path的特點, 它和windows系統下面的環境變量path類似, 可以設定多個,路徑與路徑之間使用分号;

(windows下,使用分号";" , linux下則使用冒号":")。

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

這句的意思是在include_path中設定了兩個路徑, 一個是"." 即目前路徑; 另一個則是"c:\php\includes"(目前網頁路徑)。

PHP配置open_basedir

将 PHP 所能打開的檔案限制在指定的目錄樹, 包括檔案本身。本指令不受安全模式打開或者關閉的影響。

當一個腳本試圖用例如 fopen() 或者 gzopen() 打開一個檔案時, 該檔案的位置将被檢查。當檔案在指定的目錄樹之外時 PHP 将拒絕打開它。

open_basedir 可将使用者通路檔案的活動範圍限制在指定的區域, 通常是其家目錄的路徑, 也可用符号 "." 來代表目前目錄。

open_basedir 也可以同時設定多個目錄, 在 Windows 中用分号(;)分隔目錄, 在任何其它系統中用冒号(:)分隔目錄。

當其作用于 Apache 子產品時, 父目錄中的 open_basedir 路徑自動被繼承。

方法一:在 php.ini 裡配置

open_basedir = .:/tmp/

方法二:在 Apache 配置的 VirtualHost 裡設定

php_admin_value open_basedir .:/tmp/

php_admin_value open_basedir /usr/local/apache/htdocs/

設定多個目錄可以參考如下:

php_admin_value open_basedir /var/www/html/:/var/tmp/

方法三:在 Apache 配置的 Direcotry 裡設定

php_admin_value open_basedir .:/tmp/

php_admin_value open_basedir /usr/local/apache/htdocs/

設定多個目錄可以參考如下:

php_admin_value open_basedir /usr/local/apache/htdocs/:/tmp/

A、方法二的優先級高于方法一, 也就是說方法二會覆寫方法一, 方法三的優先級高于方法二, 也就是說方法三會覆寫方法二;

B、配置目錄裡加了"/tmp/"是因為 php 預設的臨時檔案(如上傳的檔案、session 等)會放在該目錄, 是以一般需要添加該目錄, 否則部分功能将無法使用;

C、配置目錄裡加了"."是指運作 php 檔案的目前目錄, 這樣做可以避免每個站點一個一個設定;

D、如果站點還使用了站點目錄外的檔案, 需要單獨在對應 VirtualHost 設定該目錄;

在 php.ini 中設定, 所有站點都會繼承 php.ini 的 open_basedir 設定值, 這樣可以避免逐個站點設定, 有多個站點的時候, 就不用一個個設定那麼麻煩了。

例如: 可以在 php.ini 中設定 open_basedir = .:/tmp/, 這個設定表示允許通路目前目錄(即 PHP 腳本檔案所在之目錄)和 /tmp/ 目錄。

如果在 VirtualHost 中設定了 open_basedir 之後, 這個站點就不會再自動繼承 php.ini 中的 open_basedir 設定值了, 這就難以達到靈活的配置措施, 是以建議您不要在 VirtualHost 中設定此項限制。

請注意:若在 php.ini 所設定的上傳檔案臨時目錄為 /tmp/, 那麼設定 open_basedir 時就必須包含 /tmp/, 否則會導緻上傳失敗。

include_path和open_basedir的差別

include_path用于限制inclde加載檔案語句, open_basedir用于設定open等檔案讀寫函數

string ini_set ( string $varname , string $newvalue )

設定指定配置選項的值。這個選項會在腳本運作時保持新的值,并在腳本結束時恢複。

ini_set("error_reporting", "E_ALL&~(E_WARNING|E_NOTICE)"); //隻對目前的網頁有效

ini_set("display_errors", "off");

ini_set("error_log", "syslog");

ini_set("MAX_FILEUPLOAD", 200000000);

如何擷取配置檔案的值?

ini_get() 擷取配置的目前值, 該值可以在代碼中使用 ini_set 進行修改

get_cfg_var() 擷取配置檔案中的值

如何讓PHP腳本檔案執行更長的時間:

ini_set("max_execution_time", 0); //開始

/*

* php腳本檔案

*/

ini_set("max_execution_time", 60); //結尾

max_input_vars = 1000

Linux下如何查找php.ini安裝路徑

php -i | grep php.ini

如何查詢PHP extension_dir 目錄

/usr/local/php/bin/php -i |grep 'extension_dir'

繼續閱讀