php3:跨平台的伺服器端嵌入式腳本語言(1)

火星人 @ 2014-03-12 , reply:0


  伺服器端腳本技術是一種非常有用的東西,將它和客戶端腳本技術聯合起來應用可以
製作出功能極其強大的頁面。好象很久以前有一陣子哪個版(似乎是WWW版)上討論ASP
到了熱火朝天的地步,還有人提議開個ASP版,那就是一種伺服器端腳本技術。
通常用的伺服器端腳本技術是CGI,NSAPI/ISAPI/FastCGI等等都是對它的改善和擴展。
至於用什麼語言來實現CGI技術,沒有任何規定,大家一般使用Perl,因為它的字元
功能比較強大。到了需要速度的場合,就用C來實現。
用Perl/C等寫的CGI腳本是一種「非嵌入式」的伺服器端腳本,因為它是一個單獨的程序,
而不是嵌在HTML文檔中再通過另一個程序解釋替換。例如,下面的Perl程序:
print "Content-type:text/html\n\n";
print <

Hello!


HeadofHTML
print "
aaa
";
print "";
它中間雖然也有一段似乎是HTML文檔,但那是HTML文檔嵌入了Perl程序,而不是反過來。
IDC/HTX,ASP等是嵌入式的伺服器端腳本,下面的例子是一個mSQL Lite腳本:



echo "Hello!";
>





這個腳本經過伺服器端的解釋程序后,被替換成其輸出。
PHP是一種跨平台的伺服器端腳本技術。它最初是一個人為了寫他的主頁而用Perl寫
的"包裝"程序,後來因為用的人多了,就發展了起來,現在已經是3.0版,用C實現,
在Unix和Windows 95/NT下都可以跑起來。


標 題: php3:跨平台的伺服器端嵌入式腳本語言(2)


PHP3.0有幾個平台下的編譯好的版本,也有源碼版本。
PHP3.0內部帶了對幾種常用資料庫的支持,包括:Sybase,Oracle,mSQL,mySQL,PostgresQL,
ODBC,dBase等。如果編譯它的源碼時選擇對這些資料庫中某幾個的支持,那麼必須事先
有它們的客戶庫。
在Unix下編譯的方法是:先解壓,然後運行"./configure [選項]"(選項見README文件),
再運行"make"和"make install".
選項中比較重要的有:"--enable-msql=msql庫路徑"等資料庫選項和"--enable-apache=
apache源程序路徑"等。
如果選擇了--enable-apache,那麼編譯出的將是一個庫文件,make install將把這個庫
安裝到apache源程序中,然後再編譯apache,可以得到支持php的apache伺服器。否則,
生成的將是一個解釋程序。
具體請看README文件。
在Windows下,有一個安裝程序,界面不太好,而且有幾個文件會報告找不到,跳過就是
了。裝上后要把php3目錄設成網路可執行的。Readme中說要手工修改Registry,但似乎用
不著。
文檔不是太好,因為3.0的文檔還沒寫全,而2.0的文檔又有些過時了。
安裝上之後,系統應該支持對.php3和.phps文件的HTTP讀取了。(在Unix下需要修改服務
器的srm.conf文件,具體看README).
如果安裝時連進了apache伺服器,那麼速度應該是最快的。如果作為CGI程序執行,速度
也還將就。如果系統支持FastCGI,那麼解釋程序也可以作為FastCGI程序運行。Windows下
支持ISAPI的解釋程序還沒有出來。


標 題: php3:跨平台的伺服器端嵌入式腳本語言(3)


現在我們來看看第一個php3腳本,照例是Hello,world.



First PHP3 Script



echo "Hello, world!";
?>




把它放在任何一個能通過HTTP訪問到的目錄,取名hello.php3,再用瀏覽器連接
該文件,就可以看見其效果了(不用我寫了吧.)
如果把它改名成hello.phps,再用Netscape或Explorer連接,可以看見加了顏色
的源碼,因為解釋器在遇到.phps文件時會對它進行語法加亮的處理,在裡面加上很多顏色
控制符再送出.
並不需要手工指定解釋器所在位置,因為如果在Apache伺服器下,srm.conf裡面可以
指定,在Microsoft IIS 或 PWS下,Registry裡面會指定.

從上面的例子應該很容易看出php3文件的寫法.用括起來的部分就是php3
程序段,解釋器對其餘部分不作處理,將這些程序段執行后以其輸出代替(echo語句輸出一
個無格式字元串,printf語句類似於C的同名函數.)
同樣可以看出,php3程序雖然是文本,但客戶端只能看見解釋后的結果(除非你提
供同名的phps文件),因此對客戶端是保密的,這也是絕大部分伺服器端腳本的特點.


標 題: php3:跨平台的伺服器端嵌入式腳本語言(4)


PHP和一般的解釋性語言一樣,不需要事先定義變數.如果你試著使用一個
沒有賦過值的變數,那麼返回的值是空字元串.對一個變數賦值則也就同時分配了
這個變數的內存.
PHP的變數名前面必須有一個$號,這也是很多腳本語言的慣例了.
例如:
$a=1;
$b=1.0;
$c="Hello!";
都是合法的PHP語句.
PHP中的數組是這樣定義的:
$a[1]="a";
$a[2]="b";
它會自動擴展,不必預先設定上限.
其實數組下標也可以是一個字元串,例如:
$a["a"]=1;
$a["b"]="Hello!";
這時它實際上是一個哈希表,就象Tcl中的所謂數組一樣.
PHP中有一種類似於指針的用法,例如:
$a = "b";
$$a = "c";
則后一句產生了一個$b變數並給它賦值"c".
PHP變數之間的運算符和C的類似,例如也有:
+,-,*,/,%,^,&,|,&&,||,!,+=,-=,++,--等
PHP3.0定義了一個字元串相加運算符".",和Perl的一樣.
PHP的變數類型可以自動轉換,如果需要強制轉換,做法和C的一樣.它有Integer,
Double,String三種簡單類型.
要遍歷一個哈希表,可以這樣:
$i["a"] = 0;
$i["c"] = 1;
reset($i);
for ($j=1;$j<=count($i);$j++) {
$k = key($i);
echo "$k, $i[$k]";
echo "
";
next($i);
}
PHP中的控制流語句與C幾乎完全一樣,也有if...else,while,for,switch,break,
exit.


標 題: php3:跨平台的伺服器端嵌入式腳本語言(5)


PHP3.0中的函數如下例:
function test($a, $b) {
return $a*2+$b;
}
和C差不多.
函數可以遞歸調用.
PHP3.0的變數作用域規定也類似於C,即預設認為主程序中的變數是全局
變數,而函數中的變數都是局部變數,即使有同名的全局變數也不使用.
如果在函數中要使用全局變數,則必須在函數頭上用global語句聲明,
例如:
function ...{
global $a, $b;
...
}
如果函數頭上用static語句聲明了一些變數,那麼這些變數是靜態的,其
含義與C語言中的相同.

PHP中提供include語句,類似於C的#include.
include語句包含的可以是任意文件,它的內容將出現在最後輸出的頁面
上.如果該文件中有括起的部分,則該部分將被PHP解釋器解釋執行,否則
該文件的內容原封不動地送出.
它包含的文件名可以是絕對或相對路徑,也可以是一個http或ftp的URL,
在後一種情況下,解釋器自動取來該URL內容.用這種方法甚至可以觸發一個別的
機器上的CGI程序.
readfile語句類似於include,但它不執行文件中的PHP程序,只把文件原
封不動地送出.這時被包含的文件中的將被瀏覽器理解為註釋.


標 題: php3:跨平台的伺服器端嵌入式腳本語言(6)

PHP3.0中的字元串操作功能是比較多的,重要的有以下這些:
(1)echo,print,printf,sprintf
前兩個函數是輸出字元串.字元串中如果有變數名則被替換成其值.
后兩個函數類似於C的同名函數.
(2)strchr,strlen,strtok,strrchr,strrev,strstr,strtolower,
strtoupper,substr,ucfirst
這些是常用的字元串操作函數,有些和C中的同名函數意義完全一致.
strrev是把一個字元串翻轉.
strtolower和strtoupper的意思應該不用解釋了.
ucfirst是把字元串的第一個字元變成大寫.
substr是返回字元串的一個子串,用法是:substr(字元串,頭,長度).頭位置是
從0算起的.如果是負數,則是從尾部向前數的意思.
(3)Chr,Ord
類似於C的同名函數.
(4)explode,implode,join
這些是和數組有關的函數.
explode(字元串,分割符)返回一個將字元串在分割符處分開所產生的數組.
implode(數組,分割符)返回一個將數組各元素之間插上分割符而成的字元串.
join與implode意義相同.
(5)Chop
去掉字元串尾部的空白.
(6)htmlspecialchars
將字元串中的HTML特殊字元換成它們的名字,例如"<"變成"<".
(7)nl2br
在字元串中的每一個回車前面加上"
".
(8)AddSlashes,StripSlashes
分別給字元串中需要加上"\"才能用於資料庫查詢的字元加上和去掉"\".
(9)parse_str
將"name1=value1&name2=value2&..."類型的字元串分析成一些變數.
例如:
parse_str("a=1&b=2");
生成$a與$b兩個變數,值分別為1,2.
如果有兩對名字/值的名字部分相同,則后一個的值覆蓋前一個的.
如果這兩對的名字尾部都有"[]",例如"a[]=1&a[]=2",則生成數組$a,兩個元素
分別為1,2.


標 題: php3:跨平台的伺服器端嵌入式腳本語言(7)

PHP與其它跨平台語言(也許Java不在其列. :))類似,也有正規表達式功能.
PHP3.0的正規表達式功能當然遠遠比不上Perl,但還是足夠用的,主要函數
有這麼些:
(1)ereg,eregi
這是正規表達式匹配函數,前者是大小寫有關匹配,後者則是無關的.
用法:
ereg(正規表達式,字元串,[匹配部分數組名]);
PHP3.0中的正規表達式大體類似於grep中用的.
(2)ereg_replace,eregi_replace
這些是替換函數.
用法:
ereg_replace(正規表達式,替換串,原字元串);
字元串處理函數中有一個strtr,是"翻譯"函數,類似於Perl中的tr/.../.../,
用法:
strtr(字元串,"從","到");
例如:
strtr("aaabb","ab","cd")返回"cccdd".
(3)split
與explode函數有些類似,但這次可以在匹配某正規表達式的地方分割字元串.
用法:
split(正規表達式,字元串,[取出前多少項]);






[火星人 via ] php3:跨平台的伺服器端嵌入式腳本語言(1)已經有512次圍觀

http://www.coctec.com/docs/program/show-post-72484.html