PHP:基礎知識

PHP基礎知識

1、 PHP標記:

①XML風格:<?php 語句; ?>

②腳本風格:<script language=’php’>語句;</script>

③間短風格:<? 語句; ?>

④ASP風格:<% 語句; %>      //默認情況下是被禁止的,需修改 asp_tags 選項,在 PHP.ini 裏

PHP註釋:

①c++風格://註釋內容

②c語言風格:/*註釋內容*/

③shell風格:#註釋內容

PHP支持的數據類型:Boolean、integer、float/double、string、array、object、resource、null

向瀏覽器中輸出:echo()、print()、printf()、sprintf()

echo、print、printf 本身是函數,即函數()。但這裏的輸出函數可以省略括號,用空格+所需顯示的字符串或變量。echo 和 print 功能幾乎相同,而 echo 運行速度上比 print 稍稍快一點。因為 print 有返回值。

echo 不返回任何值(void),print 返回的是整型(integer),printf 返回的是整型(integer)為字符串的長度,而 sprintf 返回的字符串(string)

printf 可以在瀏覽器直接輸出,而 sprintf 需要 echo 將它輸出.

常用類型指示符:

%b        //整數,顯示為二進制

%c        //整數,顯示為 ASCII 字符

%d        //整數,顯示為有符號十進制數

%f        //浮點數,顯示為浮點數

%o        //整數,顯示為八進制數

%s        //字符串,顯示為字符串

%u        //整數,顯示為無符號十進制數

%x        //整數,顯示為小寫的十六進制數

%X        //整數,顯示為大寫的十六進制數

用法:printf ("我今天買了%d套光盤",5);

2、 基本語法

類型轉換:$total=(float)$sum;

變量類型轉換:intval()、floatval()、strval();

類型檢測:gettype()和 settype()

是否存在:isset()和 unset()

是否為空:empty()

特定類型測試:is_array()、is_double()、is_float()、is_real()、is_long()、is_int()、is_integer()、is_string()、is_object()、is_resource()、is_null()、is_numeric()

超級全局變量:

$GLOBALS        //所有全局變量數組

$_SERVER        //服務器環境變量數組

$_GET           //通過 GET 方法傳遞給該腳本的變量數組

$_POST          //通過 POST 方法傳遞給該腳本的變量數組

$_COOKIE        //cookie 變量數組

$_FILES         //與文件上載相關的變量數組

$_ENV           //環境變量數組

$_REQUEST       //所有用戶輸入的變量數組

$_SESSION       //會話變量數組

常量:

define("TOTAL",199);    //常量一旦被定義之後,就不能再次更改。常量只可以保存布爾值、整數、浮點數或字符串數據

表單變量:以PHP 變量的形式訪問每一個表單域,其中 PHP 變量名稱必須與表單域的名稱一致。

$userName                       //簡短風格:非常方便,但容易引起混淆,不推薦

$_POST["userName"]              //中等風格:4.1.0 版後支持,推薦的 $_Get["QQName"];

$HTTP_POST_VARS["userName"]     //冗長風格:最詳細,但它已經過時,長遠角度看,以後會被剔除

字符串連接:使用點就可以連接".";

3、 操作符與運算符

雙引號:提供了最大的靈活性,原因是變量和轉義字符都會得到相應的解析。

echo "雖然他的QQ號有很多女生, 但一個都不屬於他</br>";

中文解析會出現問題:可用.鏈接

echo "他的名字叫".$userName.",他19歲了,已經長大成人了!

轉義字符: :換行符 :回車     :水平制表圖       \:反斜杠   $:美元符   ":雙引號

單引號:會按照聲明的原樣解釋,解析字符串時,變量和轉義字符都不會進行解析。

運算符:+  -   *   /   %

賦值運算符:+=     -=      *=      /=      %=      .=

遞增/減:$a=++$b;  $a=$b++;        $a=--$b;        $a=$b--;

比較運算符:= =        = = =       !=      != =        <>      <       >       <=      >=

邏輯運算符:!      &&      ||      and     or

三元運算符:A?B:C

錯誤抑制操作符:$a=@(57/0);    //除數不能為0,會出錯,所以加上@避免出現錯誤警告。

數組操作符:+      = =     = = =           !=      <>      != =

if語句:   if (條件判斷){語句;}

if (條件判斷){語句;}else {語句;}

if (條件判斷) {語句;}elseif {語句;}elseif {語句;}else {語句;}

switch語句:

switch (變量) {

case "值1":語句;break;

case "值2":語句;break;

case "值N":語句;break;

default:語句;break;

}

while循環:while (條件) {語句;}

for循環:for (初始值;條件;計數器) {語句;}

do while循環:do {語句;} while(條件);

第一種:break;退出循環;第二種是exit ;退出程序;第三種是continue;退出當前循環;

if (條件){語句;break; //continue}

4、數學運算

PHP是一種松散類型的腳本語言,變量可以根據計算的需求改變數據類型。

is_numeric();         //是否為數值包含int型和float型

is_int()             //是否為int型

is_float()             //是否為float型

rand(0,10)           //生成1-10的隨機數

mt_rand(1,100)           //生成1-100的隨機數,mt_rand()速度更快

getrandmax()          //獲取最大隨機數

mt_getrandmax()          //獲取最大隨機數

number_format()           //函數可以把整數和浮點數值轉換為一種可讀的字符串表示。

abs()                 //絕對值

floor()                   //舍去法取整

ceil()                     //進一法取整

round()                //四舍五入

min()                  //求最小值或數組中最小值

max()                  //求最大值數組中最大值

5、數組

數組創建:

第一種:

$userNames=array('李彥宏','周鴻祎','馬雲','俞敏洪','李開復','吳祁');

這是索引數組初始化:

數字索引的初始值是從 0 開始計算的:

userNames[0]---userName s[5],代表這6個人的名字。

第二種:

通過 range()函數自動創建一個數組

$numbers=range(1,10) $letters=range('a','z')

可以加第三個參數$numbers=range(1,10,2),第三個參數表示步長

遍歷數組:

for ($i=0;$i<10;$i++) {

echo $numbers[$i];

}

也可以使用 foreach循環來遍歷數組:

foreach ($numbers as $value) {

echo $value;

}

初始化相關數組

$ages=array('A'=>19,'B'=>27,'C'=>23);

訪問數組元素

$ages["A"];

$ages["B"];

$ages["C"];

追加數組:首先,創建只有一個元素的數組,然後追加兩個元素。

$ages=array("A"=>19);

$ages["B"]=27;

$ages["C"]=23;

直接添加數組:無需創建,直接添加,添加第一個元素自動建立數組。

$ages["A"]=19;

$ages["B"]=27;

$ages["C"]=23;

遍歷自定義鍵值數組:

foreach ($ages as $key=>$value) {

echo $key."=>".$value."<br />";

}

while (!!$element=each($ages)) {

echo $element["key"]. "=>";.$element["value"]."<br />";

}

list($name,$age)=each($ages);

數組歸零

reset($prices);     //兩次使用該數組,使用函數 reset()將當前元素重新設置到數組開始處。

array_unique();     //它會刪除掉裏面相同值的元素。

array_flip();       //它會對調數組中的 key 和 value;

顯示二維數組:

法一:

echo "|".$products[0][0]."|".$products[0][1]."|".$products[0][2]."|<br />";

echo "|".$products[1][0]."|".$products[1][1]."|".$products[1][2]."|<br />";

echo "|".$products[2][0]."|".$products[2][1]."|".$products[2][2]."|<br />";

法二:使用雙重 for 循環來實現同樣的效果:

for ($row=0;$row<3;$row++) {

for ($column=0;$column<3;$column++) {

echo "|".$products[$row][$column];

}

echo "|<br />";

}

法三:

for ($row=0;$row<3;$row++) {

echo "|".$products[$row]["名"]."|".$products[$row]["量"]."|".$products[$row]["價格"]."|<br />";

}

法四:

for ($row=0;$row<3;$row++) {

while (!!list($key, $value)=each($products[$row])) {

echo "|".$value;

}

echo "|<br />";

}

排序:

sort()函數將數組按字母升序進行排序。

$products=array("orange","banner","apple");

sort($products);

使用 sort()函數將數字升序進行排序。

$prices=array(100,10,4,23,78);

sort($prices);

sort()函數的第二個參數是可選的。這個可選參數可以傳遞 SORT_REGULAR(默認值)、SORT_NUMERIC 或 SORT_STRING

正向排序:sort()、asort()和 ksort()

反向排序:rsort()、arsort()和 krsort()

shuffle()           //將數組個元素進行隨機排序。

array_reverse()     //給出一個原來數組的反向排序。

array_unshift()     //函數將新元素添加到數組頭,array_push()函數將每個新元素添加到數組的末尾。

array_shift()       //刪除數組頭個元素,與其相反的函數是 array_pop(),刪除並返回數組尾元素。

array_rand()        //返回數組中的一個或多個鍵。

數組指針:each()、current()、reset()、end()、next()、pos()、prev();

調用 next()或 each()將使指針前移一個元素。調用 each($array_name)會在指針前移一個位置之前返回當前元素。調用 next($array_name)是將指針前移,然後再返回新的當前元素。

統計數組下標的個數:count()和 sizeof()

array_count_values()統計數組內下標值的個數

$array=array("key1"=>"value1","key2"=>"value2","key3"=>"value3");

extract($array);        //非數字索引數組,可以使用函數 extract()將它們轉換成一系列的標量變量

echo $key1.$key2.$key3;

6、目錄操作

確定絕對路徑:realpath()函數將 path 中的所有符號鏈接和相對路徑引用轉換為相應的硬鏈接和絕對路徑。

<?      $path = '../index.php';

echo realpath($path);       ?>

$path = 'C:AppServwwwBasic6Demo1.php';

echo 'path:'.basename($path);       //返回路徑中の文件名

echo 'path:'.dirname($path);        //返回路徑中の目錄

print_r(pathinfo($path));           //pathinfo()函數創建一個關聯數組,其中包括:目錄名、基本名和擴展名

echo round(filesize($file)/1024,2).'KB';        //filesize()函數返回指定文件字節大小

計算磁盤:$drive = 'C:';

echo round(disk_free_space($drive)/1024/1024,2).'MB';       //disk_free_space()函數返回指定的目錄所在磁盤分區的可用空間

echo round(disk_total_space($drive)/1024/1024,2).'MB';      //disk_total_space()函數返回指定的目錄所在磁盤分區的總容量。

確定文件時間戳:$file = 'C:AppServwwwBasic6Demo1.php';

date_default_timezone_set('Asia/Shanghai');     //設置時區

echo date("Y-m-d,h:i:s",fileatime($file));     //fileatime()函數返回文件的最後訪問時間,采用Unix時間戳格式。

echo date("Y-m-d,h:i:s",filectime($file));     //filectime()函數返回文件的最後改變時間,采用Unix時間戳格式。

echo date("Y-m-d,h:i:s",filemtime($file));     //filemtime()函數返回文件的最後修改時間,采用Unix時間戳格式。

7、文件讀寫

$fp=fopen(文件路徑,文件模式 [,是否在 incloude_path 中搜索一個文件][,允許文件名以協議名稱開始(如 http://)] )

fopen()函數的文件模式:

r       //只讀 文件指針置於文件開頭

r+      //讀寫 文件指針置於文件開頭

w       //只寫 在寫入前,刪除文件內容,將指針返回到文件開頭。如果文件不存在,則嘗試創建。

w+      //讀寫 在讀取或寫入之前,刪除文件內容,將指針返回到文件開頭。如果文件不存在,則嘗試創建。

a       //只寫 文件指針置於文件末尾。如果文件不存在,則嘗試創建。此模式成為追加 (append)。

a+      //讀寫 文件指針置於文件末尾。如果文件不存在,則嘗試創建。此過程稱為追加到文件。

b       //二進制 二進制模式----用於與其他模式進行連接。如果文件系統能夠區分二進制文件和文本文件,妳可能會使用它。Windows 系統可以區分;而 UNIX 則不區分。推薦一直使用這個選項,以便獲得最大程度的可移植性。二進制模式是默認的模式。

t       //文本 用於與其他模式的結合。這個模式只是 Windows 系統下一個選項。它不是推薦選項,除非妳曾經在代碼中使用 b 選項。

如果 fopen()函數調用失敗,函數將返回 false。可以用一種對於用戶友好的方式來處理這個錯誤,可以通過抑制 PHP 的錯誤信息並且根據自己的方式給出錯誤信息。

$f=fopen("file.txt",'ab');                      //ab 追加並且二進制方式

$s = 'This is a wq!He is 19';                   //

fwrite($f, $s, [int length]);                       //將$s寫入到$f文件中第三個可選參數為最大字符數

fwrite($f, $s, strlen($s));                     //strlen()函數獲得字符串的長度,寫入定長字串後結束

fclose($f);                                 //關閉文件

file_put_contects($f, $s);                      //與依次調用 fopen(),fwrite() 以及 fclose() 功能一樣。$s可以是                                            數組(但不能為多維數組)

讀出文件

$f = fopen("file.txt","r");                    

echo fgetc($f)                              //讀出一個字符,並將指針移到下一個字符

echo fgets($f)                              //讀出一行字符,可以指定一行顯示的長度

echo fgets($f,3)                                //讀取一行並返回長度最多為 3 - 1 字節的字符串

echo fgetss($f)                             //從文件指針中讀取一行並過濾掉 HTML 標記

echo fread($f,2)                                //讀取定量(2個)的字符

echo fpassthru($f)                          //輸出文件指針處的所有剩余數據,fpassthru本身還包含了向瀏覽器輸出的功能,所以不需要echo

$array_file = file('file.txt');     //file是按照每行來分組存放在一個數組中

echo $array_file[4];            //打印出的是文件中的第五行。

readfile('file.txt');               //readfile是將整個文件讀出來,readfile本身能夠直接輸入瀏覽器,所以不需要echo

                            返回值是文件字節的總長度。

echo file_get_contents('file.txt');     //file_get_contents可以讀入數據到緩沖區,然後通過echo來打印將整個文件

while (!feof($f)) {     echo fgetc($f); }       //feof()測試文件指針是否到了文件結束的位置 

file_exists('file.txt')             //檢測文件是否存在

echo filesize('file.txt');              //輸出文件大小

unlink('123.txt');                  //刪除文件

rewind($f)                      //將文件指針復位到文件的開始。

ftell($f)                           //函數可以以字節為單位報告文件指針當前在文件中的位置。

fseek($f)                           //將文件指針 fp 從 whence位置移動 offset 字節。

文件瑣定:

$f = fopen("file.txt","ab");

flock($f,LOCK_EX); //鎖定

fwrite($f, $outsum);

flock($f, LOCK_UN); //釋放

fclose($f);

LOCK_SH(以前為 1)       //讀鎖定。這意味著文件可以共享,其他人可以讀該文件

LOCK_EX(以前為 2)       //寫操作鎖定。這是互斥的。該文件不能被共享

LOCK_UN(以前為 3)       //釋放已有的鎖定

LOCK_NB(以前為 4)       //防止在請求加鎖時發生阻塞

目錄句柄操作

$dir = opendir('C:AppServwwwBasic5');        //打開路徑指定的目錄流

while (!!$file = readdir($dir)) {                   //返回目錄中的各個元素

echo $file.'<br />';   

}

closedir($dir);                             //關閉目錄流

print_r(scandir('C:AppServwwwBasic5'));      //將目錄讀入數組

rmdir('C:AppServwwwBasic5123');         //刪除指定的目錄

rename("/tmp/tmp.txt", "/home/user/file.txt");      //重命名文件

8、函數

內置函數:如md5('123456');          //MD5函數對字符串進行加密處理

包含默認參數的函數調用:可以為輸入參數指定默認值,在沒有提供其他值的情況下,就會把這個默認值自動賦給該參數。

function functionArea($radius=10) {

return $radius * $radius * pi();

}

函數調用將不區分大小寫,所以調用 functionname() 、FunctionName() 或FUNCTIOINNAME()都是有效的,而且都將返回相同的結果。為了方便,這裏都用小寫。

註意到函數名稱和變量名稱是不同的,這一點很重要。變量名是區分大小寫的,所以$Name 和$name 是兩個不同的變量,但 Name()和 name()則是同一個函數。

使用 require()和 include()並不影響作用域。如果這兩個語句用於函數內部,函數作用域適用。如果它不在函數內部,全局作用域適用。

關鍵字“global”可以用來手動指定一個在函數中定義或使用的變量具有全局作用域。

通過調用 unset($variable_name)可以手動刪除變量。如果變量被刪除,它就不在參數所指定的作用域中了。

如:function (){

global $china;

}

include()語句將在其被調用的位置處判斷並包含一個文件。包含一個文件與在該語句所在位置復制該文件的數據具有相同的結果。<?include 'include.php';?>

include_once()函數的作用與 include()相同,不過它會首先驗證是否已經包含了該文件。如果包含了該文件,則不再執行 include_once()。<?include_once 'include.php';?>

require()在很大程度與 include()相同,都是將一個模板文件包含到 require()調用所在的位置。

<?require('require.php');?>

require_once()函數的作用與require()相同,不過 require_once()函數確保文件只包含一次。在遇到 require_once()後,後面再試圖包含相同的文件時都將被忽略。<?require_once('require.php');?>

PHP 實現了一些所謂的魔法常量,他們並不真的是常量,因為這些魔法常量會根據使用的場合改變值。

__FILE__ 當前文件名

__LINE__ 當前行號

__FUNCTION__ 當前函數名

__CLASS__ 當前類名

__METHOD__ 當前方法名

9、 字符串處理

chop()              //移除字符串後面多余的空白,包括新行。

ltrim()             //移除字符串起始處多余空白。

rtrim()             //移除字符串後面多余的空白,包括新行,此函數是 chop()的別名。

trim()              //移除字符串兩邊多余的空白。

strtoupper()        //將字符串轉換為大寫

strtolower()        //將字符串轉換成小寫

ucfirst()           //將第一個字母轉換為大寫

ucwords()           //將每個單詞第一個字母轉換為大寫

nl2br("This is a Teacher! This is a Student!");    //此函數只把 轉換成<br/>

htmlentities('<strong>我是!</strong>');            //轉換所有字符

htmlspecialchars('<strong>我是!</strong>')         //轉換特殊字符

strip_tags('<strong>我是!</strong>')               //去掉了<strong>

addslashes('This is a" Teacher! ');                //返回在預定義字符之前添加反斜杠的字符串。

str_pad('Salad',10.'is good.');                     //用10個is good,填充在Salad後面。

explode('@', 'yc60@com@gmail@com',3);               //用@把字串分割成數組,但最多3個元素

最後一個慘數:大於 0 ,最多l個元素的數組;小於0 , 除了最後的-l個元素以外的所有元素的數組;0,一個元素的數組

strtok("I,will.be#back",",.#");                     //一次從字符串中取出一個單詞

substr("abcdef", 1, 3);                             //從字符串中第一個取到第三個

str_split('This is a Teacher!',3);                  //返回一個數組,每個數組元素為3個字符(省略為1)

strrev('This is a Teacher!');                       //將一個字符串逆反過來

strcmp('a','b')                                     //比較兩個字符串。若相等,該函數返回 0,如果str1大於str2就返回一個正數,如果str1小於str2 就返回一個負數。此函數是區分大小寫(按字典順序比較大小)

strcasecmp('a','b')                                 //同上,但是此函數不區分大小寫

strnatcmp('a','b')                                  //按自然順序比較大小

strspn(string,charlist[,start][,length]);           //在字符串中包含 charlist 參數中指定字符的數目

strlen('This is a Teacher!');                       //返回字符串的長度

substr_count(string,substring[,start][,length])     //計算子串在字符串中出現的次數

strstr(string,search)                               //搜索字串在另一字串中的第一次出現,區分大小寫

strchr(string,search)                               //完全同上,返回子字符串

stristr(string,search)                              //搜索字串在另一字串中的第一次出現,不分大小寫

strpos(string,search)                               //搜索字符串在另一字符串中的第一次出現,返回位置值。 比strstr要快,PHP手冊推薦使用

str_replace(find,replace,string[,count])            //在string中找find,用replace替換find,替換count次

substr_replace(string,replacement,start[,length])   //在string的start處插入replacement

中文字符處理:

mb_strlen()             //對應的函數為 strlen() 求字符串的長度

mb_strstr()             //對應的函數為 strstr() 求某字符串到結尾的字符

mb_strpos()             //對應的函數為 strpos() 求出字符最先出現處

mb_substr()             //對應的函數為 substr() 取出指定的字符串

mb_substr_count()       //對應函數為 substr_str() 返回字符串出現的次數

10、正則表達式

+               //匹配任何至少包含一個前導字符串

*               //匹配任何包含零個或多個前導字符串

?               //匹配任何包含零個或一個前導字符串

.               //匹配任意字符串

{x}             //匹配任何包含 x 個前導字符串

{x,y}           //匹配任何包含 x 到 y 個前導字符串

{x,}            //匹配任何包含至少 x 個前導字符串

$               //匹配字符串的行尾

^               //匹配字符串的行首

|               //匹配字符串的左邊或者右邊

()              //包圍一個字符分組或定義個反引用,可以使用12 提取

[a-z]           //匹配任何包含小寫字母 a-z 的字符串

[A-Z]          //匹配任何包含大寫字母 A-Z 的字符串

[0-9]           //匹配任何包含數字 0-9 的字符串

[abc]           //匹配任何包含小寫字母 a、b、c 的字符串

[^abc]         //匹配任何不包含小寫字母 a、b、c 的字符串

[a-zA-Z0-9_]    //匹配任何包含 a-zA-Z0-9 和下劃線的字符串

w              //匹配任何包含 a-zA-Z0-9 和下劃線的字符串(同上)

W              //匹配任何沒有下劃線和字母數字的字符串

d              //匹配任何數字字符,和[0-9]相同

D              //匹配任何非數字字符,和[^0-9]相同

s              //匹配任何空白字符

S              //匹配任何非空白字符

              //匹配是否到達了單詞邊界

B              //匹配是否沒有達到單詞邊界

              //匹配正則中的特殊字符

i               //完成不區分大小寫的搜索

m               //在匹配首內容或者尾內容時候采用多行識別匹配

x               //忽略正則中的空白

A               //強制從頭開始匹配

U               //禁止貪婪匹配 只跟蹤到最近的一個匹配符並結束

Perl風格の函數:

preg_grep(('/p$/',$language)        //搜索數組中所有元素,返回由與某個模式匹配的所有元素組成的數組

preg_match('/p$/',’php’)          //在字符串中匹配結尾為p,如果匹配到返回true

preg_match_all('/p$/',’php’,$out) //在字符串中匹配模式的所有出現,然後將所有匹配到的全部放入數組。

preg_auote('PHP價格:$150')         //在每個特殊字符前加上,特殊字符:$ ^ * () + = {} [] | \ : <>

preg_replace('/php[1-6]/','py','php5,not php4') //搜索到所有匹配,然後替換成想要的字符串返回出來。

preg_replace_callback()

preg_split('/[.@]/','yc60.com@gmail.com');     //用來分割字符串

POSIX風格の函數:(用法基本與上重複)

ereg($pattern ,$string [,$array] )                          //用法同preg_match(),但效率比其低

ereg_replace()

eregi()

eregi_replace()

split()

spliti()

sql_regcase()

11、日期:

checkdate(月,日,年)                         //檢測日期是否合格,合格返true

date('今天的日期和時間為:Y/m/d H:i:sa');   //格式化日期

gettimeofday()                              //返回與當前時間有關的元素所組成的一個關聯數組

getdate(1184557366);                        //接受一個時間戳,並返回一個由其各部分組成的關聯數組。如果不給參數,那麽返回當前的時間和日期。

mktime(時,分,秒,月,日,年[,夏令時]);         //轉為Unix時間戳,無參數,返回當前時間の時間戳,夏令時,用設置為1,不用設置為0,不確定設置為-1

strtotime('2007-10-31 14:31:33');           //將日期轉換為Unix時間戳,可用now();

getlastmod();                               //得到當前文件最後修改時間的時間戳

localtime(timestamp,is_assoc);              //timestamp時間戳,is_assoc<true/false>返回關聯數組(T)還是索引數組(F);二參數皆可選,非必須,若無時間戳,默認為當前的本地時間time();此函數返回本地時間

time();                             //獲取當前時間

strftime(format,timestamp);         //用本地化環境來輸出日期和時間

microtime();                       //返回當前時間戳和微秒數。返回格式為 msec sec 的字符串,其中 sec 是當前的 UNIX 時間戳,msec 為微秒數。

獲取:list($msec, $sec) = explode(' ', microtime());

setlocale(constant,location)        //設置本地參數,

constant:必須

LC_ALL - 包括下面的所有選項

LC_COLLATE - 排序次序

LC_CTYPE - 字符類別及轉換(例如所有字符大寫或小寫)

LC_MESSAGES - 系統消息格式

LC_MONETARY - 貨幣格式

LC_NUMERIC - 數字格式

LC_TIME - 日期和時間格式

location:可選

設置地區en_US(美國)、cht(繁中)、chs(簡中)

設置時區和 GMT/UTC:

修改 php.ini 文件中的設置,找到[date]下的;date.timezone = 選項,將該項修改為:

date.timezone=Asia/Shanghai,然後重新啟動 apache 服務器。

或者:date_default_timezone_set('Asia/Shanghai');

12、表頭

用於重新導向指定的 URL

<?php   header('Location:http://www.baidu.com');    ?>

用於設置頁面字符編碼

<?php   header('Content-Type: text/html; charset=gbk'); ?>

註意:除非啟用了輸出緩沖,否則這些命令必須在返回任何輸出之前執行。

啟用輸出緩沖:ob_start()

<?php  ob_start();   ?>

13、會話

創建cookie:

<?php   setcookie('name','Lee',time()+(7*24*60*60));    ?>

參1:cookie 名稱;參2:cookie 值;參3:cookie 過期時間

讀取cookie:<?php echo $_COOKIE['name'];  ?>

刪除 cookie:<?php setcookie('name','');   setcookie('name','Lee',time()-1);   ?>

session處理:

<?php

session_start();

$_SESSION['name'] = 'Lee';          //設置session

echo $_SESSION['name'];             //讀取session

if (isset($_SESSION['name'])) {         //判斷session是否存在

echo $_SESSION['name'];

}

unset($_SESSION['name']);           //刪除session

session_destroy();                  //銷毀所有session

?>

cookie設置session信息:setcookie(session_name() ,session_id(),time()+$time,’/’);  //‘/’為根目錄

        session_cache_limiter(public/private);      //設置session(會話)所使用的緩存方法

session_cache_expire (30);                  //設置緩存時間,單位為分鐘

session_save_path("D:/www/session/rrr");    //設置session路徑

此三函數必須用在session_start();之前

session_id()                                //可以用來獲取/設置,當前會話 ID

session_name()                              //返回當前會話名稱。如指定name參數, session_name() 函數會更新會話名稱,並返回原來的會話名稱。

session詳細教程:http://php.net/manual/zh/ref.session.php

14、文件上傳

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

<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />

上傳文件: <input type="file" name="userfile" />

<input type="submit" value="上傳" />

</form>

ENCTYPE="multipart/form-data",這裏是固定寫法,否則文件上傳失敗

$_FILES 超級全局變量,它儲存各種與上傳有關的信息,這些信息對於通過 PHP 腳本上傳到服務器的文件至關重要。

1.存儲在$_FILES["userfile"]["tmp_name"] 變量中的值就是文件在 Web 服務器中臨時存儲的位置。

2.存儲在$_FILES["userfile"]["n ame"]變量中的值就是用戶系統中的文件名稱。

3.存儲在$_FILES["userfile"]["size"]變量中的值就是文件的字節大小。

4.存儲在$_FILES["userfile"]["type"]變量中的值就是文件的 MIME 類型,例如:text/plain或 image/gif。

5.存儲在$_FILES["userfile"]["error"]變量中的值將是任何與文件上載相關的錯誤代碼。

error 分別提供了一些數組常量:0:表示沒有發生錯誤,1:表示上載文件的大小超出了約定值。文件大小的最大值是 PHP 配置文件中指定的,該指令是 upload_max_filesize。2:表示上載文件大小超出了 HTML 表單的 MAX_FILE_SIZE 元素所指定的最大值。3:表示文件只被部分上載。4:表示沒有上載任何文件。

is_uploaded_file($_FILES["userfile"]["tmp_name"])       //判斷是否上傳文件

move_uploaded_file($_FILES["userfile"]["tmp_name"],$_FILES["userfile"]["name"]) //移動文件,成功返回true

15、圖像處理

創建圖像的流程:

1、設定標頭指定 MIME 輸出類型

<?php   header('Content-Type: image/png');  ?>

2、創建一個空白的圖像區域

<?php   $im = imagecreatetruecolor(200,200);    ?>

3、在空白圖像區域繪制填充背景

<?php   $blue = imagecolorallocate($im,0,102,255);  imagefill($im,0,0,$blue);   ?>

4、在背景上繪制圖形輪廓輸入文本

<?php

$white = imagecolorallocate($im,255,255,255);

imageline($im,0,0,200,200,$white);

imageline($im,200,0,0,200,$white);

imagestring($im, 5, 80, 20, "Mr.Lee", $white);

?>

5、輸出最終圖形

<?php   imagepng($im);  ?>

6、清除所有資源

<?php   imagedestroy($im);  ?>

7、其他頁面調用創建的圖形

<img src="Demo4.php" alt="PHP 創建的圖片" />

案例:

簡單驗證碼

<?php

header('Content-type: image/png');

for($Tmpa=0;$Tmpa<4;$Tmpa++){

$nmsg.=dechex(rand(0,15));

}

$im = imagecreatetruecolor(75,25);

$blue = imagecolorallocate($im,0,102,255);

$white = imagecolorallocate($im,255,255,255);

imagefill($im,0,0,$blue);

imagestring($im,5,20,4,$nmsg,$white);

imagepng($im);

imagedestroy($im);

?>

加載已有的圖像

<?php

header('Content-Type:image/png');

define('__DIR__',dirname(__FILE__).'\');

$im = imagecreatefrompng(__DIR__.'222.png');

$white = imagecolorallocate($im,255,255,255);

imagestring($im,3,5,5,'http://www.yc60.com',$white);

imagepng($im);

imagedestroy($im);

?>

加載已有的系統字體

<?php

$text = iconv("gbk","utf-8","李炎恢");

$font = 'C:WINDOWSFontsSIMHEI.TTF';

imagettftext($im,20,0,30,30,$white,$font,$text);

?>

圖像微縮

<?php

header('Content-type: image/png');

define('__DIR__',dirname(__FILE__).'\');

list($width, $height) = getimagesize(__DIR__.'222.png');

$new_width = $width * 0.7;

$new_height = $height * 0.7;

$im2 = imagecreatetruecolor($new_width, $new_height);

$im = imagecreatefrompng(__DIR__.'222.png');

imagecopyresampled($im2, $im, 0, 0, 0, 0,$new_width, $new_height, $width, $height);

imagepng($im2);

imagedestroy($im);

Imagedestroy($im2);

?>

16、Mysql數據庫

Mysql 常規命令

1)顯示當前數據庫的版本號和日期。

select version(),current_date();

2)通過 as 關鍵字設置字段名。

select version() as version; //可設置中文,通過單引號

3)通過 select 執行返回計算結果

select (20+5)*4;

4)通過多行實現數據庫的使用者和日期

>select

>user()

>,

>now()

>;

5)通過一行顯示數據庫使用者和日期

>select user();select now();

6)命令的取消

>c

7)mysql 窗口的退出

>exit;

數據庫類型:

整數型:tinyint,smallint,int,bigint

浮點型:float,double,decimal(m,d)

字符型:char,varchar

日期型:datetime,date,timestamp

備註型:tinytext,text,longtext

mysql 數據庫操作

1)顯示當前存在的數據庫

>show databases;

2)選擇妳所需要的數據庫

>use guest;

3)查看當前所選擇的數據庫

>select database();

4)查看一張表的所有內容

>select * from guest; //可以先通過 show tables;來查看有多少張表

5)根據數據庫設置中文編碼

>set names gbk; //set names utf8;

6)創建一個數據庫

>create database book;

7)在數據庫裏創建一張表

>create table users (

>username varchar(20), //not null 設置不允許為空

>sex char(1),

>birth datetime);

8)顯示表的結構

>descirbe users;

9)給表插入一條數據

>insert into users (username,sex,birth) values ('lee','x',now());

10)篩選指定的數據

> select * from users where username = 'lee';

11)修改指定的數據

>update users set sex = '男' where username='lee';

12)刪除指定的數據

> delete from users where username='lee';

13)按指定的數據排序

> select * from users order by birth desc; //正序

14)刪除指定的表

>drop table users;

15)刪除指定的數據庫

>drop database book;

文本函數

函數          用法                    描述

concat()    concat(x,y,...)     創建形如 xy 的新字符串

length()    length(column)      返回列中儲存的值的長度

left()      left(column,x)      從列的值中返回最左邊的 x 個字符

right()     right(column,x)     從列的值中返回最右邊的 x 個字符

trim()      trim(column)        從存儲的值刪除開頭和結尾的空格

upper()     upper(column)       把存儲的字符串全部大寫

lower()     lower(column)       把存儲的字符串全部小寫

md5()       md5(column)         把儲存的字符串用 md5 加密

sha()       sha(column)         把存儲的字符串用 sha 加密

substring() substring(column, start,length) 從column中返回開始start的length個字符(索引從0開始)

數字函數

函數        用法                描述

abs()       abs(x)          返回 x 的絕對值

ceiling()   ceiling(x)      返回 x 的值的最大整數

floor()     floor(x)        返回 x 的整數

round()     round(x)        返回 x 的四舍五入整數

mod()       mod(x)          返回 x 的余數

rnad()      rnad()          返回 0-1.0之間隨機數

format()    format(x,y)     返回一個格式化後的小數

sign()      sign(x)         返回一個值,正數(+1),0,負數 (-1)

sqrt()      sqrt(x)         返回 x 的平方根

日期和時間函數

函數                用法                描述

hour()          hour(column)        只返回儲存日期的小時值

minute()        minute(column)      只返回儲存日期的分鐘值

second()        second(column)      只返回儲存日期的秒值

dayname()       dayname(column)     返回日期值中天的名稱

dayofmonth()    dayofmonth(column)  返回日期值中當月第幾天

monthname()     monthname(column)   返回日期值中月份的名稱

month()         month(column)       返回日期值中月份的數字值

year()          year(column)        返回日期值中年份的數字值

curdate()       curdate()           返回當前日期

curtime()       curtime()           返回當前時間

now()           now()               返回當前時間和日期

格式化日期和時間(DATE_FORMAT()和TIME_FORMAT())

名詞        用法                    示例

%e      一月中的某天                1~31

%d      一月中的某天,兩位          01~31

%D      帶後綴的天                  1st~31st

%W      周日名稱                    Sunday~Saturday

%a      簡寫的周日名稱              Sun-Sat

%c      月份編號                    1~12

%m      月份編號,兩位              01~12

%M      月份名稱                    January~December

%b      簡寫的月份名稱              Jan~Dec

%Y      年份                        2002

%y      年份,兩位                  02

%l      小時                        1~12

%h      小時,兩位                   01~12

%k      小時,24 小時制             0~23

%H      小時,24 小制度,兩位       00~23

%i      分鐘                        00~59

%S      秒                          00~59

%r      時間                        8:17:02 PM

%T      時間,24 小時制             20:17:02 PM

%p      上午或下午                  AM 或 PM

sql語句詳解

1.創建一個班級數據庫 school,裏面包含一張班級表 grade,包含編號(id)、姓名(name)、郵件(email)、評分(point)、註冊日期(regdate)。

mysql>create database school; //創建一個數據庫

mysql>create table grade (

-> id tinyint(2) unsigned not null auto_increment,

-> name varchar(20) not null,

-> email varchar(40),

-> point tinyint(3) unsigned not null,

-> regdate datetime not null,

-> primary key (id) //表示 id 為主鍵,讓 id 值唯一,不得重復。

-> ); //unsigned 表示無符號,tinyint(2) 無符號整數 0-99,not null 表示不能為空,auto_increment 表示從 1 開始沒增加一個字段,累計一位

2.給這個班級表 grade 新增 5-10 條學員記錄

mysql> insert into grade (name,email,point,regdate) values('lee','yc60.com@gmail.com',95,now());

3.查看班級所有字段的記錄,查看班級 id,name,email 的記錄

mysql> select * from grade;

mysql> select id,name,email from grade;

where 表達式的常用運算符:=、<、>、<=、>=、!=、

is not null (具有一個值)、is null (沒有值)、between(在範圍內)、not between(不在範圍內)、in(指定的範圍)、or(兩個條件語句之一為真)、and(兩個條件語句都為真)、not(條件語句不為真)

4.姓名等於'lee'的學員,成績大於 90 分的學員,郵件不為空的成員,70-90 之間的成員

mysql> select * from grade where name='lee';

mysql> select * from grade where point>90;

mysql> select * from grade where email is not null;

mysql> select * from grade where point between 70and 90;

mysql> select * from grade where point in (95,82,78);

查找郵件使用 163 的學員,不包含 yc60.com 字符串的學員

mysql> select * from grade where email like '%163.com';

mysql> select * from grade where email not like '%yc60.com%';

按照學員註冊日期的倒序排序,按照分數的正序排序

mysql> select * from grade order by regdate desc;

mysql> select * from grade order by point asc;

只顯示前三條學員的數據,從第 3 條數據開始顯示 2 條

mysql> select * from grade limit 3;

mysql> select * from grade limit 2,2;

修改姓名為'lee'的電子郵件

mysql> update grade set email='yc60.com@163.com' where name='lee';

刪除編號為 4 的學員數據

mysql> delete from grade where id=4;

檢查這個表的信息

mysql> show table status g;

優化一張表

mysql> optimize table grade;

mysql分組函數

函數            用法            描述

avg()       avg(column)     返回列的平均值

count()     count(column)   統計行數

max()       max(column)     求列中的最大值

min()       min(column)     求列中的最小值

sum()       sum(column)     求列中的和

17、pma

標頭設置,讓火狐和 ie 保持編碼統一:

<?php   header('content-type:text/html; charset=utf-8');    ?>

連接 mysql

<?php   $conn = @mysql_connect(db_host,db_user,db_password) or die('數據庫連接失敗!錯誤信息:'.mysql_error());   ?>

數據庫的連接參數,可以用常量存儲,這樣就不能修改,更加安全。

<?php

define('db_user','root');

define('db_password','yangfan');

define('db_host','localhost');

define('db_name' ,'school');   

?>

選擇妳所需要的數據庫

<?php   @mysql_select_db(db_name) or die('數據庫找不到!錯誤信息:'.mysql_error()); ?>

設置字符集,如果是 gbk,直接設置 set names gbk 即可

<?php   @mysql_query('set names utf8') or die('字符集設置錯誤');    ?>

獲取記錄集

<?php

$query = "select * from grade";

$result = @mysql_query($query) or die('sql 語句有誤!錯誤信息:'.mysql_error());

?>

輸出一條記錄

<?php   print_r(mysql_fetch_array($result,mysql_assoc));    ?>

釋放結果集資源

<?php   mysql_free_result($result); ?>

關閉數據庫

<?php   mysql_close($conn); ?>

新增數據

<?php

$query = "insert into grade (name,point,regdate) value ('李炎恢',,now())";

@mysql_query($query) or die('添加數據出錯:'.mysql_error());

?>

修改數據

<?php

$query = "update grade set name='小可愛' where id=6";

@mysql_query($query) or die('修改出錯:'.mysql_error());

?>

刪除數據

<?php

$query = "delete from grade where id=6";

@mysql_query($query) or die('刪除錯誤:'.mysql_error());

?>

顯示數據

<?php

$query = "select id,name,email,point from grade";

$result = @mysql_query($query) or die('查詢語句出錯:'.mysql_error());

while (!!$row = mysql_fetch_array($result)) {

echo $row['id'].'----'.$row['name'].'----'.$row['email'].'----'.$row['point'];

echo '<br />';

}

?>

其他常用函數

mysql_fetch_row():從結果集中取得一行作為枚舉數組

mysql_fetch_assoc(): 從結果集中取得一行作為關聯數組

mysql_fetch_array(): 從結果集中取得一行作為關聯數組,或數字數組,或二者兼有

mysql_fetch_lengths(): 取得結果集中每個輸出的長度

mysql_field_name(): 取得結果中指定字段的字段名

mysql_num_rows(): 取得結果集中行的數目

mysql_num_fields():取得結果集中字段的數目

mysql_get_client_info(): 取得 MySQL 客戶端信息

mysql_get_host_info(): 取得 MySQL 主機信息

mysql_get_proto_info(): 取得 MySQL 協議信息

mysql_get_server_info(): 取得 MySQL 服務器信息

原文地址:https://www.cnblogs.com/mandongpiaoxue/p/7727035.html