2007年3月2日 星期五

如何使用 PHP,一些常用的函式和用途。

這篇教學是:
簡單的告訴你如何使用 PHP
一些常用的函式和用途。
給瞭解 PHP 語法的初學者。

這篇教學不是:
教你如何使用 PHP 的語法。
教你如何實際的寫出範例。
告訴你 PHP 的細節。

資料型態的函式
doubleval() -
接受數值,傳回 double 的型態。
gettype() -
顯示資料的型態。
intval() -
接受數值,傳回 int 的型態。
var_dump() -
顯示變數的型態和它的資料。
settype() -
改變變數的型態。
範例:settype($undecided, string);
strval() -
接受數值,傳回 string 的型態。

PHP
的標準資料型態

integer

5

整數

double

3.234

浮點的數字

string

"hello"

文字字串

boolean

true/false

特殊的字串,true false

object



array


陣列


特殊的資料型態
Resource -
使用外來的資源 (資料庫)
NULL -
未定義的變數

轉換變數
settype() 不同因為轉換 (casting) 會複製變數,但不會改變原來的變數。

程式碼:

= 3.14;
$holder = (double) $undecided;

通常轉換不需要額外的動作,PHP 會自動轉換。

程式碼:

= "30cm"; // 如果只要顯示 30
$test = (integer) $test;
echo
"寬度是 $test 公分";


常數
define() -
定義一個常數。

程式碼:

("CONSTANT", "word");

如果提供第三個 boolean 的參數可以決定大小寫是否相同。

三元運算子
(expression) ? returned_if_true : returned_if_false;
範例:($var1 + $var2 = 3) ? '' : '不對';

全域變數 (global variable)

程式碼:

= "hello";
function
functionName()
{
global
$test;
...
}

改變函式裡面的變數相同的也會改變原來的變數。

靜態變數 (static variable)

程式碼:

function functionName()
{
static
$test = 0;
...
}

靜態變數相同於區域變數,但是跳出函式後還是會記得數值。

參照變數
在變數的前面加上 &.

程式碼:

function Output(&$data)
{
$this->data =& $data;
}

如果要傳回參照變數,在函式的前面加上 &:
function &Output($data)

陣列
陣列可以用 array() 或空白的 [] 來定義。

程式碼:

= array("Bert", "Sharon", "Betty", "Harry");

新增元素到陣列的最後面:
$users[] = "Sally";

關聯陣列 (associative array)

程式碼:

= array(
"name" => "bob",
"occupation" => "superhero",
"age" => 30,
"special power" => "x-ray vision"
);
print
$character['age'];

上面的 name, occupation...是用來取代本來的陣列數字。

尋找陣列值

程式碼:

foreach ($array as $temp)
{
...
}

$array 是要循環的陣列,$temp 是儲存數值的變數。
PHP
Perl 不同的地方是,用 PHP 改變 $temp 變數不會改變陣列裡的值。

尋找關聯陣列 (associative array)

程式碼:

foreach ($array as $key => $value)
{
...
}

$key 是儲存關聯陣列的 key 值,$value 是用來儲存陣列的值。

printf()
類型指令列表:
d -
顯示整數
b -
顯示二元數字
c -
顯示 ASCII 的格式
f -
顯示浮點
o -
顯示八元數字 (base 8)
s -
顯示字串
x -
顯示小寫的 16 元數字 (base 16)
X -
顯示大寫的 16 元數字 (base 16)

填補字串
填補輸出的資料。

程式碼:

("%04d", 36);
// 輸出:0036

如果要用字母來填補,字母前面要加上單引號 '

程式碼:

("%'x4d", 36);
// 輸出:xx36


小數點
數字加上小數點的數量。

程式碼:

("%.2f", 5.3333333);
// 輸出:5.33


表單
Superglobal
陣列
$_COOKIE -
包含 cookie 的變數。
$_ENV -
包涵主機的環境變數。
$_FILES -
包含上傳的檔案資訊。
$_GET -
包含 http get 的變數。
$_POST -
包含 http post 的變數。
$_REQUEST -
包含 $_GET, $_POST, $_COOKIE 的變數。
$_SERVER -
包含主機的資料變數。
$GLOBALS -
包含全部的全區變數。

  1. __LINE__ 顯示程式文件中的該行程式行號。
  2. __FILE__ 程式檔的完整路徑和檔案名,如果用在於include的外部檔案中,則返回被include的檔案名。
  3. __FUNCTION__ 執行的函數名稱, PHP 5 起本常數返回該函數被定義時的名字(區分大小寫)。
  4. __CLASS__ 執行的類別名稱, PHP 5 起本常數返回該類被定義時的名字(區分大小寫)
  5. __METHOD__ 執行的類別方法名稱,返回該方法被定義時的名字(區分大小寫)。


$_SERVER
$_SERVER['PHP_SELF'] #當前正在執行腳本的文件名,與 document root相關。
$_SERVER['argv'] #傳遞給該腳本的參數。
$_SERVER['argc'] #包含傳遞給程序的命令行參數的個數(如果運行在命令行模式)。
$_SERVER['GATEWAY_INTERFACE'] #服務器使用的 CGI 規範的版本。例如,「CGI/1.1」。
$_SERVER['SERVER_NAME'] #當前運行腳本所在服務器主機的名稱。
$_SERVER['SERVER_SOFTWARE'] #服務器標識的字串,在響應請求時的頭部中給出。
$_SERVER['SERVER_PROTOCOL'] #請求頁面時通信協議的名稱和版本。例如,「HTTP/1.0」。
$_SERVER['REQUEST_METHOD'] #訪問頁面時的請求方法。例如:「GET」、「HEAD」,「POST」,「PUT」。
$_SERVER['QUERY_STRING'] #查詢(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] #當前運行腳本所在的文檔根目錄。在服務器配置文件中定義。
$_SERVER['HTTP_ACCEPT'] #當前請求的 Accept: 頭部的內容。
$_SERVER['HTTP_ACCEPT_CHARSET'] #當前請求的 Accept-Charset: 頭部的內容。例如:「iso-8859-1,*,utf-8」。
$_SERVER['HTTP_ACCEPT_ENCODING'] #當前請求的 Accept-Encoding: 頭部的內容。例如:「gzip」。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#當前請求的 Accept-Language: 頭部的內容。例如:「en」。
$_SERVER['HTTP_CONNECTION'] #當前請求的 Connection: 頭部的內容。例如:「Keep-Alive」。
$_SERVER['HTTP_HOST'] #當前請求的 Host: 頭部的內容。
$_SERVER['HTTP_REFERER'] #鏈接到當前頁面的前一頁面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] #當前請求的 User_Agent: 頭部的內容。

$_SERVER['REMOTE_ADDR'] #正在瀏覽當前頁面用戶的 IP 地址。
$_SERVER['REMOTE_HOST'] #正在瀏覽當前頁面用戶的主機名。
$_SERVER['REMOTE_PORT'] #用戶連接到服務器時所使用的端口。
$_SERVER['SCRIPT_FILENAME'] #當前執行腳本的絕對路徑名。
$_SERVER['SERVER_ADMIN'] #管理員信息
$_SERVER['SERVER_PORT'] #服務器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服務器版本和虛擬主機名的字符串。
$_SERVER['PATH_TRANSLATED'] #當前腳本所在文件系統(不是文檔根目錄)的基本路徑。
$_SERVER['SCRIPT_NAME'] #包含當前腳本的路徑。這在頁面需要指向自己時非常有用。
$_SERVER['REQUEST_URI'] #訪問此頁面所需的 URI。例如,「/index.html」。
$_SERVER['PHP_AUTH_USER'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的用戶名。
$_SERVER['PHP_AUTH_PW'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的密碼。
$_SERVER['AUTH_TYPE'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是認證的類型。

$_SERVER['PHP_SELF'] #當前正在執行腳本的文件名,與 document root相關。

php.ini
內的 register_globals
如果 php.ini 裡面的 register_globals On,那 $_GET['variable'] 裡面的 variable 就會變成全區 (gloabl) 變數。
PHP 4.2
以上的預設值是 Off

將使用者的輸入值變成全區變數

程式碼:


import_request_variable("g", "import_");

這會建立一個叫 $import_username 的全區變數,包含了使用者的 username 數值。
類型引數 (type argument) 可以是 g 表示 getp 表示 postc 表示 cookie

簡短的開始標籤

程式碼:

print $test; ?>
//
可以變成

//
注意並不是每個主機都可以用


檔案上傳
HTML
表單包含了檔案上傳必須要加上 ENCTYPE

程式碼:

<form enctype="multipart/form-data" action="" method="post">

也可以隱藏的欄位來限制檔案大小,不過最好用 php.ini 裡的設定來限制。
檔案上傳成功後會得到特殊的檔名,暫時放置於 php.ini 設定的 upload_tmp_dir 目錄。

$_FILES數組內容如下:

$_FILES['myFile']['name'] 客戶端文件的原名稱。
$_FILES['myFile']['type'] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上傳文件的大小,單位為字節。
$_FILES['myFile']['tmp_name'] 文件被上傳後在服務端儲存的臨時文件名,一般是系統默認。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函數設置是不起作用的。
$_FILES['myFile']['error'] 和該文件上傳相關的錯誤代碼。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的說明:(它們在PHP3.0以後成了常量)
UPLOAD_ERR_OK
值:0; 沒有錯誤發生,文件上傳成功。
UPLOAD_ERR_INI_SIZE
值:1; 上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上傳。
UPLOAD_ERR_NO_FILE
值:4; 沒有文件被上傳。
值:5; 上傳文件大小為0.


文 件被上傳結束後,默認地被存儲在了臨時目錄中,這時您必須將它從臨時目錄中刪除或移動到其它地方,如果沒有,則會被刪除。也就是不管是否上傳成功,腳本執 行完後臨時目錄裡的文件肯定會被刪除。所以在刪除之前要用PHP的 copy() 函數將它複製到其它位置,此時,才算完成了上傳文件過程。



@
字元
如果不想顯示連結資料庫的錯誤,可以在 mysql_connect mysql_select_db 前面加上 @ 字元。

程式碼:

@mysql_select_db($smf);


物件
const
定義一個常數。

程式碼:

const PI = 3.14;
echo
MyClass::PI;


static
定義靜態數值。可在程式運行時改變。

程式碼:

static $SALES_TAX = 9;


正規表示法

量詞
* -
零個或以上 - a*
+ -
一個或以上 - a+
? -
零個或一個 - a?
{n} - n
- a{3}
{n,} -
至少 n - a{3,}
{,n} -
最多 n - a{,3}
{n1, n2} -
最少 n1 個,不多於 n2 - a{1,2}
範例:
p.*t - p
然後任何數量的字元,在 t 之前
p.*?t - p
然後最少數量的字元,在 t 之前

字元分類 []
[ab]
會相配 a b
[ab]+
會相配任何有 a b 的字串
[a-z]
會相配任何小寫字母
[A-Z]
會相配任何大寫字母
[0-9]
會相配任何數字
[a-z5]
會相配任何小寫字母或數字 5

非字元 ^
[^A-Z]
會相配任何非大寫的字母

跳脫字元
\d
任何數字
\D
任何非數字
\s
任何空白字元
\S
任何非空白字元
\w
任何字母數字 (包括底線 _ )
\W
任何非字母數字或底線

\A
字串開頭
\b
字串範圍
\B
非字串範圍
\Z
字串尾 (相配最後的新行字元或字尾)
\z
字串尾 (只相配字尾)

分隔形式 ()

程式碼:

("/(dont)\s+(panic)/", $test, $array);

會輸出 dont panic, dont, panic.

分割字元 |,相配第一個或第二個形式

程式碼:

= "www.example.com";
preg_match("/www\.example(\.com|\.co\.uk)/", $test, $array);

輸出 .com

^
可以用來測試字串開頭
^a
會相配 apple 不會相配 banana.

$
可以用來測試字尾
a$
會相配 flea 不會相配 dear.

【下列文章您可能也有興趣】

沒有留言: