關于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'