- PHP Web開發快速入門及實例精選
- 陸昌輝等編著
- 10字
- 2018-12-29 21:27:52
第一部分 PHP的語法基礎
第1章 PHP入門
PHP是一種簡單、實用的動態網頁編程語言,也是一種廣泛用于Open Source(開放源代碼)的,并適合Web開發且可以嵌入HTML的多用途腳本語言。本章內容覆蓋了PHP語言的背景,PHP的歷史,最新版本PHP5.0的特點,PHP的安裝,以及運行環境的配置等內容,在最后還介紹了一個簡單的PHP程序范例。
1.1 PHP技術介紹
PHP是Hypertext Preprocessor的縮寫,代表“超級文本預處理語言”,是一種服務器端的HTML腳本/編程語言,也是一種簡單的、面向對象的、解釋型的、安全的、性能非常高的、獨立于架構的、可移植的、動態的腳本語言。語言的風格有點類似于C語言,又傳承了Java的簡單精神,并創造一個比Java更容易使用的程序開發環境。它還混合了C、Java、Perl等語言,再加上PHP自創新的語法和提供了豐富的函數及功能,因此,PHP以方便快速的風格迅速在Web系統開發中占有了重要地位。
PHP作為開放源代碼腳本語言,正成為世界上最流行的Web應用程序編程語言之一。PHP對于初學者來說非常簡單,只需要很少的編程知識就能使用PHP建立一個真正交互的動態Web站點,同時也給專業程序員提供了各種高級的特性。
PHP主要應用于以下3個方面:
1.服務器端腳本:PHP最開始是被設計成用來創建動態Web網頁的,PHP程序執行速度快,目前大量的網站都在使用PHP程序。PHP不僅可以生成HTML文件,而且還可以生成XML文檔、圖形、Flash動畫和PDF文件等。
2.命令行腳本:PHP可以和Perl一樣以命令行方式運行腳本,可以用命令行腳本來執行一些系統管理任務。
3.客戶端GUI應用:對于非常精通PHP的開發人員,如果希望在客戶端應用程序中使用PHP的一些高級特性,還可以利用PHP-GTK來編寫跨平臺的應用程序。
PHP最初是1994年由生于丹麥格陵蘭島的Rasmus Lerdorf創建的,剛剛開始只是一個簡單的用Perl語言編寫的程序,用來統計他自己網站的訪問者。后來又用C語言重新編寫,包括可以訪問數據庫。在1995年以Personal Home Page Tools (PHP Tools)開始對外發表第一個版本,Lerdorf寫了一些介紹此程序的文檔,并且發布了PHP1.0。在這一早期的版本中,提供了訪客留言本、訪客計數器等簡單的功能。
在1995年年中,PHP2.0發布了。第二版定名為PHP/FI (Form Interpreter)。PHP/FI加入了對Mysql, SQL Server的支持,從此建立了PHP在動態網頁開發上的地位。到了1996年年底,全世界就有15000個網站使用PHP/FI,而到1997年,據統計,使用PHP/FI的網站數字已經超過五萬個。
在1997年,Rasmus Lerdorf開始了第三版的開發計劃,Zeev Suraski及Andi Gutmans等人加入到了開發小組中,第三版定名為PHP3。
2000年5月,PHP 4.0正式發布。它使用了Zend (Zeev + Andi)引擎,提供更高的性能,同時還包含了其他一些關鍵功能,比如:支持更多的Web服務器、HTTP Sessions的支持、輸出緩存(Output Buffering)、更安全的處理用戶輸入的方法以及一些新的語言結構。
PHP的特性包括:
● 開放的源代碼:所有的PHP源代碼都是可以得到的,而且PHP是免費的。
● 基于服務器端:PHP是運行在服務器端的,充分利用了服務器的性能;PHP執行引擎還會將用戶經常訪問的PHP程序駐留在內存中,其他用戶在一次訪問這個程序時就不需要重新編譯了,只要直接執行內存中的代碼就可以了,這也是PHP高效率的體現之一。
● 跨平臺:PHP可以在所有的主流操作系統上運行,包括Linux、Unix的各種變種(包括HP-UX、Solaris和OpenBSD)、Microsoft Windows、Mac OS X、RISC OS等。PHP已經支持了大多數的Web服務器,包括Apache、Microsoft Internet Information Server (IIS)、Personal Web Server (PWS)、Netscape以及iPlant server、Oreilly Website Pro Server、Caudium、Xitami、OmniHTTPd等。對于大多數的服務器,PHP均提供了一個相應模塊;PHP支持CGI標準,使得PHP能夠作為CGI處理器來工作;PHP還支持ODBC,即Open Database Connection Standard(開放數據庫連接標準),因此可以連接任何其他支持該世界標準的數據庫。但PHP提供的數據庫接口支持彼此不統一,比如對Oracle, MySQL, Sybase的接口,彼此都不一樣。
● 效率高:PHP消耗相當少的系統資源。
● 圖像處理:PHP能動態創建圖像。
● 支持利用諸如LDAP、IMAP、SNMP、NNTP、POP3、HTTP、COM (Windows環境)等協議服務。可以開放原始網絡端口,使得任何其他的協議能夠協同工作。PHP支持和所有Web開發語言之間的WDDX復雜數據交換。關于相互連接,PHP已經支持了對Java對象的即時連接,并且可以將他們自由地用作PHP對象。
● 有效的文本處理特性:支持從POSIX擴展或者Perl正則表達式到XML文檔解析。為了解析和訪問XML文檔,支持了SAX和DOM標準,可以使用XSLT擴展庫來轉換XML文檔。
提示:正則表達式描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。正則表達式是由普通字符(例如字符a到z)以及特殊字符(稱為元字符)組成的文字模式,它作為一個模板,將某個字符模式與所搜索的字符串進行匹配。
PHP4.0與以前的版本相比,整個腳本程序的核心改動較大,它讓程序執行速度更快。其腳本描述更強大并且更復雜,最顯著的特征是速率比的增加。PHP4.0這些優異的性能是PHP腳本引擎重新設計產生的結果:引擎由Zeev Suraski和Andi Gutmans從底層全面重寫。PHP4.0使用Zend腳本引擎,使用了一種更有效的“編譯——執行”方式,而不是PHP 3.0采用的“執行——當解析時”模型。
雖然PHP4.0新增了許多特性,但是PHP4.0的面向對象性能很弱。
1.2 PHP5.0的新特點
2004年7月13日,官方正式版PHP 5.0發布,對于PHP語言本身還是PHP的用戶來講,PHP5發布都算得上是一個里程碑式的版本,使PHP成為一個設計完備、真正具有面向對象能力的腳本語言。
PHP5.0發布之前的各個PHP版本以簡單的語法、豐富的庫函數以及極快的腳本解釋執行速度,贏得了許多開發者的青睞,幾乎成為Linux、Unix平臺上首選的WEB開發語言。然而,站在語言本身角度,PHP的語法,特別是面向對象(Object Oriented, OO)方面的語法設計并不完善。大量的庫函數加入其中,而語言模型的發展則相對緩慢。雖然在PHP4.0中加入了面向對象的設計,但其語言模型并不完善,PHP4.0版本中,諸如析構函數、抽象類(接口)、異常處理等基本元素的類缺乏,極大限制了利用PHP來完成大規模應用程序的能力。
而PHP5.0的誕生,則從根本上改變了PHP的上述弊端。Zend II引擎的采用,完備對象模型、改進的語法設計,終于使得PHP成為一個設計完備、真正具有面向對象能力的腳本語言。
PHP5.0版本增加或增強了以下功能:
● 支持新的對象模型和許多新特點的Zend引擎。
● 新的SimpleXML擴展,PHP對象輕松訪問操作。
● XML功能:PHP5.0版本支持可直觀地訪問XML數據、名為SimpleXML的XML處理界面,同時還強化了XML Web服務支持,而且支持SOAP擴展模塊。
● 數據庫方面:PHP新版本不僅提供了訪問MySQL的新界面——MySQLi的功能,還可以使用面向對象界面和預處理語句(Prepared Statement)等MySQL的新功能。
另外,PHP5.0上還捆綁有小容量的RDBMS——SQLite。
● 改進了流的設計,包括通過流來操作底層的socket。
● 新增了許多函數:PHP5.0中新添了一些函數,下面是新增函數列表:
表1-1 PHP5.0新增函數表

續表

續表

1.3 安裝和配置PHP
1.3.1 在Windows下安裝PHP5.0
PHP需要Web服務器來支持運行,下面以兩種最常見的服務器IIS和Apache2服務器為例來分別介紹PHP的安裝。如果不加特殊說明,以下的介紹同時適用于Windows xp、Windows 2000、Windows 2003各版本。
1. IIS服務器
在Windows 2000中,IIS默認是安裝的,可以通過“開始”→“設置”→“控制面板”→“管理工具”→ "Internet信息服務”來打開它。Windows xp沒有默認安裝,可以通過Windows的“開始”→“設置”→“控制面板”→“添加刪除程序”→“添加/刪除Windows組件”來安裝它。
最新的PHP安裝程序包可以在PHP的官方網站:http://www.php.net/downloads.php下載。把下載來的PHP安裝程序包解壓縮到C盤根目錄(用戶也可以選擇其他不同的目錄),解壓縮后將目錄名改為 "PHP"。
(1)打開剛才解壓縮的PHP目錄,有一個名為 "php.ini-dist" 的文件,就是PHP的配置文件了,將此文件改名成 "php.ini",然后復制到系統目錄中(如果用戶的系統裝在C盤,XP下就是 "C:\windows" , Windows2000下是 "C:\winnt")。php.ini文件可以存放在系統目錄中,也可以和php.exe存放在同一目錄中。
(2)打開IIS信息服務控制臺,右擊“默認網站”圖標。選擇“屬性”選項,打開“默認網站屬性”選項,然后再選擇“主目錄”選項,如下圖1-1所示。

圖1-1 IIS服務器主目錄
(3)單擊“配置”按鈕,用戶會在彈出來的看到已經定義的文檔類型。單擊“添加”按鈕,在接著彈出來的對話框的可執行文件文本框中敲入用戶的php.exe所在的絕對路徑加上“%s %s",在這里是 "c:\php\php.exe %s %s",擴展名文本框中寫上php程序處理的后綴名,在這里寫入“.php",其余選項按默認設置即可,如圖1-2所示。

圖1-2 添加PHP擴展名映射
Windows 2003增強了IIS的安全性,配置方法與Window 2000和Windows xp的配置方法不同,配置方法如下:
步驟(1)和(2)與前面介紹的方法相同。
(3)應用程序配置,如圖1-3所示。

圖1-3 應用程序配置
(4)單擊 "Web服務擴展”→“新建Web服務擴展”。

圖1-4 新建Web服務擴展
(5)將新建Web服務擴展的“擴展名”改為 "php",然后添加 "php.exe路徑”。
(6)選擇php的服務擴展,然后單擊“允許”。

圖1-5 添加php.exe路徑

圖1-6 php的服務擴展
至此,IIS服務器的PHP安裝就完成了。
2. Apache2服務器
Apache安裝比較簡單,下面介紹在Windows操作系統上安裝Apache2.0.55的過程,具體步驟如下:
(1)首先到Apache的官方網站(http://www.apache.org/)上下載安裝包,運行該安裝包,將出現如圖1-7所示的界面。

圖1-7 Apache安裝界面
(2)出現Apache HTTP Server 2.0.55的安裝向導界面,單擊 "Next" 繼續。

圖1-8 安裝使用許可
(3)確認同意軟件安裝使用許可條例,選擇 "I accept the terms in the license agreement",單擊 "Next" 繼續。
(4)閱讀完將Apache安裝到Windows上的使用須知后,單擊 "Next" 繼續。
(5)設置系統信息,在Network Domain下填入用戶的域名(比如:163.com),在Server Name下填入服務器名稱(比如:www.163.com,也就是主機名加上域名),在Administrator' s Email Address下填入系統管理員的聯系電子郵件地址(比如:163@163.com),上述三條信息僅供參考,其中聯系電子郵件地址會在發生系統故障時提供給訪問者,三條信息均可任意填寫,無效的也行。下面有兩個選擇,圖片上選擇的是為系統所有用戶安裝,使用默認的80端口,并作為系統服務自動啟動;另外一個是僅為當前用戶安裝,使用端口8080,手動啟動。一般選擇如圖1-10所示,單擊 "Next" 繼續。

圖1-9 使用須知

圖1-10 設置系統信息
(6)選擇安裝類型,Typical為默認安裝,Custom為用戶自定義安裝,這里選擇Custom,有更多可選項,單擊 "Next" 繼續。

圖1-11 安裝類型
(7)出現選擇安裝選項界面,如圖1-12所示,單擊 "Apache HTTP Server 2.0.55”,選擇 "This feature, and all subfeatures, will be installed on local hard drive.”,即“此部分,及下屬子部分內容,全部安裝在本地硬盤上”,單擊 "Change...”,手動指定安裝目錄,安裝路徑如圖1-13所示。

圖1-12 安裝選項界面

圖1-13 安裝路徑
(8)在這里選擇安裝在 "D:\”,可以自行選取,一般建議不要安裝在操作系統所在盤,免得操作系統崩潰了之后,還原操作把Apache配置文件也清除了,單擊 "OK" 繼續,安裝界面如圖1-14所示。

圖1-14 安裝界面
(9)返回剛才圖1.14的安裝界面,單擊 "Next" 繼續,安裝選項確認界面如圖1-15所示。

圖1-15 安裝選項確認界面
(10)確認安裝選項無誤,如果認為要再檢查一遍,可以單擊 "Back",一步步返回檢查,單擊 "Install" 開始按前面設定的選項進行安裝,正在安裝界面如圖1-16所示。

圖1-16 正在安裝界面
(11)正在安裝界面,請耐心等待,直到出現如圖1-17所示的畫面為止。

圖1-17 安裝向導完成界面
(12)安裝向導成功完成后,在屏幕右下角的狀態欄應該出現了如圖1-18所示的綠色圖標,表示Apache服務已經開始運行,單擊 "Finish" 結束Apache的軟件安裝。

圖1-18 Apache圖標
在圖標上單擊鼠標左鍵,出現如圖1-19所示的Apache圖標右鍵菜單界面,有 "Start(啟動)”、 "Stop(停止)”、 "Restart(重啟動)”三個選項,可以很方便地對安裝的Apache服務器進行上述操作。

圖1-19 Apache圖標右鍵菜單
現在來測試一下按默認配置運行的網站界面,在IE地址欄打http://127.0.0.1(或者http://localhost),單擊“轉到”,就可以看到如圖1-20所示的頁面,表示Apache服務器已安裝成功。

圖1-20 Apache服務器已安裝成功界面
現在開始配置Apache服務器,使它更好地為用戶服務。事實上,如果不配置,用戶安裝目錄下的Apache2\htdocs文件夾就是網站的默認根目錄,在里面放入文件就可以了。單擊“開始”→“程序”→ "Apache HTTP Server 2.0.55”,選擇 "Configure Apache Server",單擊 "Edit the Apache httpd conf Configuration file" 菜單,就可以打開編輯Apache配置文件。
每次配置文件的改變,保存后,必須在Apache服務器重啟動后生效。
下面,使用editplus軟件對httpd.conf進行編輯配置,如圖1-21所示。配置Apache服務器的具體步驟如下:

圖1-21使用editplus編輯配置httpd.conf
(1)查找關鍵字 "DocumentRoot"(也就是網站根目錄),找到后將引號("")內的地址改成所建網站的根目錄,一般文件地址的“\”在Apache里要改成“/”,如圖1-22所示。

圖1-22 指定DocumentRoot
(2)通過查找“<Directory" 來定位,將引號("")內的地址改成跟DocumentRoot的一樣,如圖1-23所示。

圖1-23 指定Directory目錄
(3)查找關鍵字 "DirectoryIndex"(目錄索引,也就是在僅指定目錄的情況下,默認顯示的文件名),可以添加很多文件名,系統會根據從左至右的順序來優先顯示,以單個半角空格隔開。比如有些網站的首頁是index.htm,就在光標那里加上 "index.htm"。這些文件名是任意的,不一定非得是 "index.html",比如 "index.php" 等,都可以,如圖1-24所示。

圖1-24 指定DirectoryIndex
(4)這里有一個選擇配置選項,以前可能要配置,在5.0版本就不用配置了,就是強制所有輸出文件的語言編碼,html文件里有語言標記(<META http-equiv="Content-Type"content="text/html; charset=gb2312">,這個語言標記就是設定文檔語言為gb2312)的也會強制轉換。如果打開的網頁出現亂碼,請先檢查網頁內有沒有上述html語言標記,如果沒有,添加上去就能正常顯示了。把“# DefaultLanguage nl" 前面的“#”去掉,把 "nl" 改成要強制輸出的語言,中文是 "zh-cn",如圖1-25所示。

圖1-25 默認語言編碼
(5)簡單的Apache配置就到此結束了,現在利用先前的小圖標重啟動,所有的配置就生效了。
在Apache2服務器中,PHP的安裝有兩種不同模式,一種是CGI模式(CGI executable)安裝方式,另一種是模塊化安裝方式。在CGI模式安裝方式下,如果客戶機請求一個PHP文件,Web服務器就調用php.exe去解釋這個文件,然后再把解釋的結果以網頁的形式返回給客戶機。而在模塊化安裝方式中,PHP是與Web服務器一起啟動并運行的,所以從某種角度上來說,以Apache模塊方式安裝的PHP5.0有著比CGI模式更好的安全性以及更好的執行效率和速度。
下面介紹PHP的安裝與配置,具體步驟如下:
(1)將下載的PHP安裝文件php-5.0.5-Win32.zip右鍵解壓縮,如圖1-26所示。

圖1-26 解壓
(2)指定解壓縮的位置,假設安裝在 "D:\php" 目錄下,如圖1-27所示。

圖1-27 解壓目錄
(3)查看解壓縮后的文件夾內容,找到 "php.ini-dist" 文件,將其重命名為 "php.ini",打開編輯,查找 "register_globals",找到有一個 "register_globals = Off" 值,如圖1-28所示,這個值是用來打開全局變量的,比如表單送過來的值,如果這個值設為 "Off",就只能用“$_POST[’變量名’]、$_GET[’變量名’]”等來取得送過來的值,如果設為 "On",就可以直接使用“$變量名”來獲取送過來的值。如果不需要兼容以前的PHP程序,請設register_globals的值為 "Off",可以增強PHP程序的安全性。

圖1-28 設置register_globals
(4)設置要加載的模塊,功能就是使PHP能夠直接調用其他模塊,比如訪問mysql,如圖1-29所示,選擇要加載的模塊,去掉前面的“; ”,就表示要加載此模塊了。比如要加載mysql模塊,就把“; extension=php_mysql.dll" 前的“; ”去掉。所有的模塊文件都放在php解壓縮目錄的 "ext" 之下。要想加載的模塊進行工作還需要設置extension_dir的值,該值設置模塊所在的目錄,例如:extension_dir = "D:/ php/ext/"。

圖1-29 加載模塊
(5)按照以上操作,PHP的配置基本完成。還需要配置Apache服務器的配置文件httpd.conf,打開httpd.conf文件,在最后添加以下命令,如圖1-30所示:

圖1-30 系統變量配置
ScriptAlias /php/ "D:/ php/" Action application/x-httpd-php "/php/php-cgi.exe" AddType application/x-httpd-php .php AddType application/x-httpd-php .php3 AddType application/x-httpd-php .php4
(6)上面的ScriptAlias命令設置PHP所在目錄,Action命令設置PHP解析處理程序,AddType命令設置支持的文件后綴名。重啟Apache服務器,使用設置生效。
(7)現在開始將PHP以module方式與Apache相結合,使PHP融入Apache,先打開Apache的配置文件httpd.conf,在文件最后,添加如圖1-31所示選中的三行,第一行 "PHPIniDir "c:/windows" ”是指明PHP配置文件php.ini所在的位置,第二行 "LoadFile"D:/WEB/php5/php5ts.dll"”加載php5ts.dll文件,第三行 "LoadModule php5_module"D:/WEB/php5/php5apache2.dll"”指明以模式方式運行PHP,其中的 "D:/WEB/php5/”要改成PHP的安裝目錄。復制PHP安裝目錄下的libmysql.dll、libmhash.dll、libmcrypt.dll、libeay32.dll、fdftk.dll、fribidi.dll、gds32.dll、msql.dll、ssleay32.dll和yaz.dll至系統目錄 "C:\WINDOWS\system32”中,如果操作系統不是Windows XP或Windows 2003請修改正確的system32目錄路徑。如果不復制上述文件,可能導致有些功能模塊不能加載,比如:mysql.dll模塊。

圖1-31 以module方式加載PHP
(8)在Apache的配置文件httpd.conf的最后,加入 "AddType application/x-httpdphp .php" 、 "AddType application/x-httpd-php .php3”等,指明可以執行PHP的文件類型,如圖1-32所示。

圖1-32 配置可執行PHP的文件格式
(9)目錄默認索引文件可以在Apache的配置文件httpd.conf中設置,因為現在加了PHP模塊,也可以把 "index.php" 設為默認索引文件,優先順序可以自由設置,設置如圖1-33所示。

圖1-33 默認索引文件
(10)至此,PHP的安裝和Apache的結合已經全部完成,重啟Apache服務,用戶的Apache服務器就支持了PHP。
1.3.2 在Linux平臺下安裝PHP
下面介紹在Linux下如何安裝PHP、MySQL5和Apache2。MySQL5的下載地址為http://mysql.org/downloads/mysql/5.0.html。PHP5.0可從Php.net下載,下載地址為:http://www.php.net/downloads.php。Apache 2可以從Apache.org下載。可能還需要以下的支持庫:libxml2庫從XmlSoft.org下載,zlib庫從Gzip.org下載。
1.解壓安裝包(建議解壓在同一目錄中)
$ tar -xzvf mysql-max-5.0.15-linux-i686.tar.gz $ tar -xzvf php-5.0.5.tar.gz $ tar -xzvf httpd-2.0.50.tar.gz $ tar -xzvf libxml2-2.6.11.tar.gz $ tar -xzvf zlib-1.2.1.tar.gz
2.安裝支持庫(安裝前建議檢查文件夾usr/local下的內容)
檢查是否安裝了libxml2或者zlib,如果沒有安裝的話,按照如下步驟進行安裝:
編譯和安裝libxml2 XML解析器:
$ cd /解壓目錄/libxml2-2.6.11 $ ./configure(默認裝到了/usr/local/lib下,指定的話用--profix=/目錄) $ make && make install
對zlib做類似的操作:
$ cd /解壓目錄/zlib-1.2.1 $ ./configure(默認裝到了/usr/local/lib下,指定的話用--profix=/目錄) $ make && make install
3.安裝Apache
Apache使用PHP有兩種方式:作為動態模塊,其在運行狀態時可載入到Web服務器,或者作為靜態模塊,其可直接編譯到Web服務器代碼中。
為了能以Apache2.0模塊使PHP動態載入,Apache服務器必須以動態共享對象(DSO, Dynamic Shared Object)編譯。可以通過傳遞--enable-so參數到Apache 2.0configure使這一特性生效:
$ cd /解壓目錄/httpd-2.0.50 $ ./configure --prefix=/usr/local/apache2--enable-so $ make && make install
4. MySQL5的安裝(如系統已經安裝了mysql,則下述相應步驟可以省略)(下載二進制包直接解壓在/usr/local下)。
$groupadd mysql $useradd -g mysql mysql $ln -s mysql mysql $cd mysql $scripts/mysql_install_db --user=mysql chown -R root . chown -R mysql date chown -R mysql
如果想測試MySQL是否安裝成功,關閉原有的mysql服務,進入目錄下的bin目錄下執行如下操作:
./safe_mysqld
啟動MySQL服務。
./mysql -u root -p密碼
進入MySQL。
5.php的安裝
$ ./configure --prefix=/usr/local/php5(配置php的參數) --with-apxs2=/usr/local/apache2/bin/apxs --with-libxml-dir=/usr/local/lib --with-zlib-dir=/usr/local/lib --with-mysql=/usr/local/mysql (mysql的安裝目錄就是那個解壓后的目錄) --with-mysqli=/usr/local/mysql/bin/mysql_config --with-gd --enable-soap --enable-sockets $ make $ make install
將安裝目錄下的php.ini-dist文件改為php.ini,存放到/usr/local/lib目錄下。
6.編輯Apache配置文件,即/usr/local/apache2/conf/httpd. conf,并添加如下一行:
AddType application/x-httpd-php .php
7.并在DirectoryIndex的那一行加上index.php,保存文件并重啟動服務器。
注意:
(1)要以root用戶安裝;
(2)在啟動Apache和MySQL服務器時應確保原有的服務關閉;
(3)配置文件修改后必須重啟服務器。
1.3.3 驗證PHP安裝
配置完成后,想測試PHP是否安裝成功,可以在空根目錄下建立一個測試PHP程序文件,如:phpinfo.php,然后寫入簡單的PHP代碼,如:
<? phpinfo (); ?>
保存后,使用瀏覽器訪問http://localhost/phpinfo.php如果能見到如圖1-34所示界面,而無錯誤提示,就表明配置PHP環境成功。

圖1-34 PHP運行環境測試
1.4 PHP配置文件
php.ini是PHP在啟動時會讀取的配置文件。在PHP 5.x版的配置文件為php.ini-dist;若PHP安裝成服務器的模塊,則在Web服務器啟動執行時會讀取,之后就不再讀取。因此,改動配置的話要重新啟動Web服務器。若使用CGI方式運行時,每處理一個請求就要啟動一個CGI進程,當請求繁忙時,這將給服務器帶來繁重的負擔。
PHP5.0的php.ini配置文件詳細介紹如下:
;這個文件控制了PHP許多方面的觀點。為了讓PHP讀取這個文件,它必須被命名為 ; ' php.ini'。PHP將在這些地方依次查找該文件:當前工作目錄;環境變量PHPRC ;指明的路徑;編譯時指定的路徑。 ;在Windows下,編譯時的路徑是Windows安裝目錄。 ;在命令行模式下,php.ini的查找路徑可以用-c參數替代。 ;該文件的語法非常簡單。空白字符和用分號’’開始的行被簡單地忽略。
;章節標題(例如:[Foo])也被簡單地忽略,即使將來它們可能有某種的意義。 ; ;指示被指定使用如下語法: ;指示標識符=值 ; directive = value ;指示標識符是大小寫敏感的,foo=bar不同于FOO=bar。 ; ;值可以是一個字符串,一個數字,一個PHP常量(如:E_ALL or M_PI), INI常 ;量中的一個(On, Off, True, False, Yes, No and None),或是一個表達式 ;(如:E_ALL & ~E_NOTICE),或是用引號括起來的字符串("foo")。 ; ; INI文件的表達式被限制于位運算符和括號。 ; — itwise OR ; & itwise AND ; ~ itwise NOT ; ! boolean NOT ; ;布爾標志可用1, On, True or Yes這些值置于開的狀態。 ;它們可用0, Off, False or No這些值置于關的狀態。 ; ;一個空字符串可以用在等號后不寫任何東西表示,或者用None關鍵字: ; ; foo= ;將foo置為空字符串 ; foo=none;將foo置為空字符串 ; foo="none";將foo置為字符串’none' ; ;如果在值設置中使用常量,而這些常量屬于動態調入的擴展庫(不是PHP的擴展, ;就是Zend的擴展),僅可以調入這些擴展的行之后使用這些常量。 ; ;所有在php.ini-dist文件里設定的值與內建的默認值相同(這是說,如果php.ini ;沒被使用或者刪掉了這些行,默認值與之相同)。 ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;語言選項; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; engine =On ;使PHP scripting language engine (PHP腳本語言引擎)在Apache下有效。
short_open_tag = On ;允許tags將被識別。 asp_tags =Off ;允許ASP類型tags precision =14 ;浮點類型數顯示時的有效位數 y2k_compliance = Off ;是否打開2000年適應(可能在非Y2K適應的瀏覽器中導致問題) output_buffering = Off ;輸出緩存允許在輸出正文內容之后發送header(標頭,包括cookies)行, ;其代價是使輸出層減慢速度。可以在運行時打開輸出緩存, ;或者在這里將指示設為On而使得所有文件的輸出緩存打開。 output_handler = ;可以重定向腳本的所有輸出到一個函數,那樣做可能對處理或以日志記錄它有用。例 ;如將這個output_handler設為"ob_gzhandler",則輸出會被透明地為支持gzip或deflate ;編碼的瀏覽器壓縮。設一個輸出處理器自動地打開輸出緩沖。 implicit_flush =Off ;強制flush(刷新)讓PHP告訴輸出層在每個輸出塊之后自動刷新自身數據。 ;這等效于在每個print ()或echo ()調用和每個HTML塊后調用flush ()函數。 ;打開這項設置會導致嚴重的運行時沖突,建議僅在debug過程中打開。 allow_call_time_pass_reference = On ;是否讓強迫函數調用時按引用傳遞參數。 ;這一方法可能在將來版本的PHP/Zend里不再支持。 ;指定哪些參數按引用傳遞的方法是在函數聲明里。 ;可以嘗試關閉這一選項并確認腳本仍能正常工作,以保證在將來版本的語言里它們 ;仍能工作(將在每次使用該特點時得到一個警告)。 ; Safe Mode安全模式 safe_mode =Off safe_mode_exec_dir = safe_mode_allowed_env_vars = PHP_ ; ? Setting certain environment variables ; ? may be a potential security breach.
;該指示包含用逗號分隔的前綴列表。 ;安全模式中,用戶僅可以替換以在此列出的前綴開頭的環境變量的值。 ;默認地,用戶將僅能設定以PHP_開頭的環境變量,(如:PHP_FOO=BAR)。 ;注意:如果這一指示為空,PHP將允許用戶更改任意環境變量! safe_mode_protected_env_vars = LD_LIBRARY_PATH ;這條指示包含一個用逗號分隔的環境變量列表,那是最終用戶不能用putenv ()更 ;改的。這些變量甚至在safe_mode_allowed_env_vars設置為允許的情況下得到保護。 disable_functions = ;這條指示可以為了安全的原因而讓特定函數失效。 ;它接受一個用逗號分隔的函數名列表。 ;這條指示不受安全模式是否打開的影響。 ;語法高亮模式的色彩。 ;只要能被接受的東西就能工作。 highlight.string = #DD0000 highlight.comment = #FF8000 highlight.keyword = #007700 highlight.bg =#FFFFFF highlight.default = #0000BB highlight.html =#000000 ; Misc雜項 expose_php = Off ;決定PHP是否標示它裝在服務器上的事實(例如:加在它給Web服務 ;發送的信號上)。在出現什么power-by的header的時候,可以把它關掉。 ;它不會有安全上的威脅,但它使檢查服務器上是否安裝了PHP成為了可能。 ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Resource Limits ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; max_execution_time=30 ;每個腳本的最大執行時間,按秒計 memory_limit=8388608 ;一個腳本最大可使用的內存總量(這里是8MB) ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; Error handling and logging ; ; 出錯控制和登記 ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;錯誤報告是按位的,將數字加起來就能得到想要的錯誤報告等級。 ; E_ALL - 所有的錯誤和警告 ; E_ERROR - 致命性運行時錯 ; E_WARNING - 運行時警告(非致命性錯) ; E_PARSE - 編譯時解析錯誤 ; E_NOTICE - 運行時提醒(這些經常是你代碼的bug引起的, ;也可能是有意的行為造成的,如:基于未初始化的變量自動初始化為一個空字符串 ;的事實而使用一個未初始化的變量。 ; E_CORE_ERROR - 發生于PHP啟動時初始化過程中的致命錯誤 ; E_CORE_WARNING- 發生于PHP啟動時初始化過程中的警告(非致命性錯) ; E_COMPILE_ERROR- 編譯時致命性錯 ; E_COMPILE_WARNING- 編譯時警告(非致命性錯) ; E_USER_ERROR - 用戶產生的出錯消息 ; E_USER_WARNING- 用戶產生的警告消息 ; E_USER_NOTICE - 用戶產生的提醒消息 ;例子: ; error_reporting=E_ALL&~E_NOTICE;顯示所有的錯誤,除了提醒 ; error_reporting=E_COMPILE_ERROR—E_ERROR—E_CORE_ERROR;僅顯示錯誤 display_errors = On ;顯示出錯誤信息(作為輸出的一部分),在最終發布的Web站點上, ;強烈建議關掉這個特性,并使用錯誤日志代替(參看下面)。 ;在最終發布的Web站點繼續讓display_errors有效,可能會暴露一些有關安全的信 ;息,例如Web服務上的文件路徑、數據庫規劃或別的一些信息。 display_startup_errors = Off ;甚至當display_erroes打開了,發生在PHP的啟動步驟中的錯誤也不會被顯示。 ;強烈建議保持使display_startup_errors關閉,除了在改錯過程中。 log_errors =Off ;在日志文件里記錄錯誤(服務器指定的日志,stderr標準錯誤輸出,或下面error_log ;指定的日志),強烈建議在最終發布的Web站點以日志記錄錯誤取代直接錯誤輸出。 track_errors=Off;保存最近一個錯誤/警告消息于變量 $php_errormsg (boolean)中。
; error_prepend_string="";在錯誤信息前輸出的字符串 ; error_append_string="";在錯誤信息后輸出的字符串 ; error_log=filename;以指定文件記錄錯誤日志 ; error_log=syslog ;在系統日志syslog (NT下的事件日志,Windows 95下無效) ;中記錄錯誤日志 warn_plus_overloading=Off ;當將‘+’用于字符串時警告 ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Data Handling ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; variables_order ="EGPCS" ;這條指示描述了PHP記錄GET, POST, Cookie, Environment and Built-in這些變量 ;的順序(以G, P, C, E&S代表,通常以EGPCS或GPC的方式引用)。 ;按從左到右記錄,新值取代舊值。 register_globals = On ;是否將這些EGPCS變量注冊為全局變量。若不想讓用戶數據不在全局范圍內混亂 ;的話,就要關閉它。這和track_vars連起來用更有意義,這樣就可以通過 ; $HTTP_*_VARS[] 數組訪問所有的GPC變量。 register_argc_argv = On ;告訴PHP是否聲明argv和argc變量(注:這里argv為數組,argc為變量數), ;其中包含用Get方法傳來的數據,若不想用這些變量,應當關掉它以提高性能。 track_vars =On ;使$HTTP_*_VARS[]數組有效,這里*在使用時用ENV, POST, GET, COOKIE or ; SERVER替換。 post_max_size =8M ; PHP將接受的POST數據的最大大小。 gpc_order ="GPC";這條指示被人反對。用variables_order代替。 ; Magic quotes magic_quotes_gpc = On ;在輸入的GET/POST/Cookie數據里使用魔術引用,魔術引用是指用轉義符加在引用 ;性的控制字符上,如 \’等。 magic_quotes_runtime= Off ;對運行時產生的數據使用魔術引用,比如用SQL查詢得到的數據,用exec ()函數得
;到的數據,等等。 magic_quotes_sybase=Off ;采用Sybase形式的魔術引用(用 ’ ’ 脫出 ’ 而不用 \') ;自動在PHP文檔之前和之后添加文件 auto_prepend_file = auto_append_file = ;像4.04b4一樣,PHP默認地總是在 "Content-type:” 頭標輸出一個字符的編碼方 ;式。讓輸出字符集失效,只要設置為空即可。 ; PHP的內建默認值是text/html default_mimetype = "text/html" ; default_charset = "iso-8859-1" ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Paths and Directories ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; include_path = ; include路徑設置,UNIX: "/path1:/path2" Windows: "\path1; \path2" doc_root = ; php頁面的根路徑,僅在非空時有效 user_dir = ;告知php在使用/~username打開腳本時到哪個目錄下去找,僅在非空時有效 ; upload_tmp_dir = ;存放用HTTP協議上傳的文件的臨時目錄(在沒指定時使用系統默認的) upload_max_filesize = 2097152 ;文件上傳默認地限制為2 Meg extension_dir = c:\php\ ;存放可加載的擴充庫(模塊)的目錄 enable_dl =On ;是否使dl ()有效。 ;在多線程服務器上dl ()函數不能很好地工作,例如IIS or Zeus,并在其上默認為禁止 ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; File Uploads ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; file_uploads = On ;是否允許以HTTP方式上傳文件 ; upload_tmp_dir =
;指定用HTTP上傳的文件的臨時目錄(未指定則使用系統默認) upload_max_filesize = 2M ;上傳文件的最大許可大小 ; Fopen wrappers ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; allow_url_fopen = On ;是否允許把URLs當作http:.. 或把文件當作ftp:... ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 動態擴展 ; ; Dynamic Extensions ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;若希望自動加載一個擴展庫,用下面的語法: ; extension=modulename.extension ;例如,在Windows上,extension=msql.dll ;在UNIX下,extension=msql.so ;注意,這只應當是模塊的名字,不需要將目錄信息放在里面。 ;用上面的extension_dir指示指定擴展庫的位置。 ; Windows擴展 ; extension=php_nsmail.dll extension=php_calendar.dll ; extension=php_dbase.dll ; extension=php_filepro.dll extension=php_gd.dll ; extension=php_dbm.dll ; extension=php_mssql.dll ; extension=php_zlib.dll ; extension=php_filepro.dll ; extension=php_imap4r2.dll ; extension=php_ldap.dll ; extension=php_crypt.dll ; extension=php_msql2.dll ; extension=php_odbc.dll ;注意,MySQL的支持現在是內建的,因此不需要用它的dll
;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 模塊設定 ; ; Module Settings ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; [Syslog] define_syslog_variables = Off ;是否定義各種系統日志變量,如:$LOG_PID, $LOG_CRON,等等。 ;關掉它可以提高效率,運行時可以調用函數define_syslog_variables ()來定義這些變量 [mail function] SMTP =localhost ;僅用于Win32系統 sendmail_from = me@localhost.com;僅用于Win32系統 ; sendmail_path= ;僅用于unix,也可支持參數(默認的是’sendmail-t-i')。 [Debugger] debugger.host = localhost debugger.port = 7869 debugger.enabled = False [Logging] ;這些配置指示用于示例的日志記錄機制。 ; logging.method =db ; logging.directory = /path/to/log/directory [Java] ; java.class.path = .\php_java.jar ; java.home = c:\jdk ; java.library = c:\jdk\jre\bin\hotspot\jvm.dll ; java.library.path = .\ [SQL] sql.safe_mode = Off [ODBC] ; uodbc.default_db =Not yet implemented ; uodbc.default_user =Not yet implemented
; uodbc.default_pw =Not yet implemented uodbc.allow_persistent=On;允許或禁止持久連接 uodbc.check_persistent = On;在重用前檢查連接是否還可以用 uodbc.max_persistent=-1;持久連接的最大數,-1代表無限制。 uodbc.max_links =-1;連接的最大數目(持久和非持久), -1代表無限制。 uodbc.defaultlrl=4096;控制LONG類型的字段,返回變量的字節數。 uodbc.defaultbinmode = 1;控制二進制數據,0代表通過,1返回原樣,2轉換為字符。 [MySQL] mysql.allow_persistent=On;允許或禁止持久連接。 mysql.max_persistent=-1;持久連接的最大數,-1代表無限制。 mysql.max_links =-1;連接的最大數目(持久和非持久), -1代表無限制。 mysql.default_port = ; mysql_connect ()使用的默認端口,如不設置,mysql_connect ()將使用變量。 ;$MYSQL_TCP_PORT,或在/etc/services下的mysql-tcp條目(unix),或在編譯時 ;定義的MYSQL_PORT(按這樣的順序),在Win32環境,將僅檢查MYSQL_PORT。 mysql.default_socket= ;用于本地MySql連接的默認套接字名, ;為空則使用MySql內建值。 mysql.default_host = ; mysql_connect ()默認使用的主機(安全模式下無效)。 mysql.default_user = ; mysql_connect ()默認使用的用戶名(安全模式下無效)。 mysql.default_password= ; mysql_connect ()默認使用的密碼(安全模式下無效)。 ;注意,在這個文件下保存密碼通常不是一個好方法,任何可以使用PHP訪問的用戶都 ;可以運行’echo cfg_get_var ("mysql.default_password")’來顯示那個密碼! ;而且當然地,任何有讀該文件權力的用戶也能看到那個密碼。 [mSQL] msql.allow_persistent=On;允許或禁止持久連接。 msql.max_persistent =-1;持久連接的最大數,-1代表無限制。 msql.max_links =-1;連接的最大數目(持久和非持久), -1代表無限制。 [PostgresSQL] pgsql.allow_persistent=On;允許或禁止持久連接。 pgsql.max_persistent=-1;持久連接的最大數,-1代表無限制。 pgsql.max_links =-1;連接的最大數目(持久和非持久), -1代表無限制。 [Sybase]
sybase.allow_persistent=On;允許或禁止持久連接。 sybase.max_persistent=-1;持久連接的最大數,-1代表無限制。 sybase.max_links =-1;連接的最大數目(持久和非持久), -1代表無限制。 ; sybase.interface_file = "/usr/sybase/interfaces" sybase.min_error_severity=10;顯示的錯誤的最低嚴重性。 sybase.min_message_severity=10;顯示的消息的最低重要性。 sybase.compatability_mode = Off ;與舊版PHP 3.0兼容的模式,若打開,這將導致PHP自動地把根據結果的Sybase ;類型賦予它們,而不是把它們全當成字符串。這個兼容模式不會永遠留著。 [Sybase-CT] sybct.allow_persistent=On ;允許或禁止持久連接。 sybct.max_persistent=-1 ;持久連接的最大數,-1代表無限制。 sybct.max_links =-1 ;連接的最大數目(持久和非持久), -1代表無限制。 sybct.min_server_severity=10;顯示的錯誤的最低嚴重性。 sybct.min_client_severity=10;顯示的消息的最低重要性。 [bcmath] bcmath.scale=0;用于所有bcmath函數的十進制數數字的個數 [browscap] ; browscap = extra/browscap.ini browscap = C:\WIN\SYSTEM\inetsrv\browscap.ini [Informix] ifx.default_host = ; ifx_connect ()默認使用的主機(安全模式下無效)。 ifx.default_user = ; ifx_connect ()默認使用的用戶名(安全模式下無效)。 ifx.default_password = ; ifx_connect ()默認使用的密碼(安全模式下無效)。 ifx.allow_persistent =On;允許或禁止持久連接。 ifx.max_persistent =-1;持久連接的最大數,-1代表無限制。 ifx.max_links =-1;連接的最大數目(持久和非持久), -1代表無限制。 ifx.textasvarchar =0 ;若打開,select狀態符返回一個 "text blob" 字段的內容,而不是它的id。 ifx.byteasvarchar =0 ;若打開,select狀態符返回一個 "byte blob" 字段的內容,而不是它的id。 ifx.charasvarchar =0 ;追蹤從固定長度的字符列里剝離的空格,可能對Informix SE用戶有效。 ifx.blobinfile =0
;若打開,text和byte blobs的內容被導出到一個文件,而不是保存到內存。 ifx.nullformat =0 ; NULL(空)被作為空字段返回,除非這里被設為1。 ;若被設置為1, NULL將作為字串NULL返回。 [Session] session.save_handler =files ;用于保存/取回數據的控制方式。 session.save_path = C:\win\temp ;在save_handler設為文件時傳給控制器的參數,這是數據文件將保存的路徑。 session.use_cookies =1 ;是否使用cookies。 session.name =PHPSESSID ;用在cookie里的session的名字。 session.auto_start =0 ;在請求啟動時初始化session。 session.cookie_lifetime =0 ;按秒鐘記的cookie的保存時間,若為0時,直到瀏覽器被重啟。 session.cookie_path =/ ; cookie的有效路徑。 session.cookie_domain = ; cookie的有效域。 session.serialize_handler=php;用于連接數據的控制器,php是PHP的標準控制器。 session.gc_probability =1 ;按百分比的碎片整理進程,在每次session初始化的時候開始的可能性。 session.gc_maxlifetime =1440 ;在這里數字指的是秒數后,保存的數據將被視為碎片并由gc進程清理掉。 session.referer_check= ;檢查HTTP引用以使額外包含于URLs中的ids無效。 session.entropy_length =0 ;從文件中讀取的字節數。 session.entropy_file = ;指定這里建立session id。 ; session.entropy_length =16 ; session.entropy_file =/dev/urandom session.cache_limiter =nocache ;設為{nocache, private, public},以決定HTTP的緩存問題。 session.cache_expire =180 ;文檔在n分鐘后過時。 session.use_trans_sid =1 ;使用過渡性的sid支持 url_rewriter.tags ="a=href, area=href, frame=src, input=src, form=fakeentry" [MSSQL] ; extension=php_mssql.dll mssql.allow_persistent =On;允許或禁止持久連接。 mssql.max_persistent =-1;持久連接的最大數,-1代表無限制。 mssql.max_links =-1;連接的最大數目(持久和非持久), -1代表無限制。
mssql.min_error_severity=10;顯示的錯誤的最低嚴重性。 mssql.min_message_severity=10;顯示的消息的最低重要性。 mssql.compatability_mode=Off;與舊版的PHP 3.0兼容的模式。 [Assertion] ; assert.active=On ;斷言(表達式),默認生效。 ; assert.warning=On ;為每個失敗的斷言發出警告。 ; assert.bail=Off ;默認不釋放。 ; assert.callback=0 ;如果斷言失敗,就調用一個用戶函數。 ; assert.quiet_eval =0 ;用當前error_reporting ()的返回值來評估表達式,如果想在eval ()前后調用 ; error_reporting (0),就設置為真。 [Ingres II] ii.allow_persistent =On;允許或禁止持久連接。 ii.max_persistent =-1;持久連接的最大數,-1代表無限制。 ii.max_links = -1;連接的最大數目(持久和非持久), -1代表無限制。 ii.default_database = ;默認database(格式為:[node_id::]dbname[/srv_class])。 ii.default_user = ;默認user。 ii.default_password = ;默認password。 [Verisign Payflow Pro] pfpro.defaulthost ="test.signio.com";默認的Signio服務器。 pfpro.defaultport =443;連接的默認端口。 pfpro.defaulttimeout =30;按秒計的默認超時時間。 ; pfpro.proxyaddress = ;默認的代理IP地址(如果需要)。 ; pfpro.proxyport = ;默認的代理端口。 ; pfpro.proxylogon = ;默認的代理登錄(logon用戶名)。 ; pfpro.proxypassword = ;默認的代理密碼。 [Sockets] sockets.use_system_read =On;使用系統的read ()函數替代php_read ()封裝。 ; Local Variables: (局部變量) ; tab-width: 4 ; End:
要看目前的系統配置,可以運用phpinfo ()來看到。以下為選項配置:
表1-2 phpinfo ()中的系統配置選項作用說明表

續表

續表

表1.3列出了一些與session有關的配置。
表1-3 與session有關的配置

1.5 運行第一個PHP頁面
PHP頁面是嵌入了PHP命令代碼的HTML頁面。Web服務器執行PHP命令并將輸出HTML文檔傳送至瀏覽器,例1.1顯示了一個完整的PHP頁面。
例1.1: hello.php
<html> <head> <title>第一個PHP程序</title> </head> <body> <? php echo "hello,這是第一個PHP程序"; ?> </body> </html>
將例1.1的內容保存到文件hello.php中,然后單擊瀏覽器查看,結果顯示如圖1-35所示。

圖1-35 第一個PHP程序
在這個例子中,PHP代碼被放在標簽<? PHP和?>之間。PHP命令echo將輸出字符串 "hello,這是第一個PHP程序”插入到HTML文件中。
在瀏覽器中,單擊右鍵選擇查看源代碼,可以查看到如下內容:
<html> <head> <title>第一個PHP程序</title> </head> <body> hello,這是第一個PHP程序 </body> </html>
- Spring Boot 2實戰之旅
- Cross-platform Desktop Application Development:Electron,Node,NW.js,and React
- JIRA 7 Administration Cookbook(Second Edition)
- 名師講壇:Java微服務架構實戰(SpringBoot+SpringCloud+Docker+RabbitMQ)
- Yocto for Raspberry Pi
- Mastering ServiceNow(Second Edition)
- VMware虛擬化技術
- 可解釋機器學習:模型、方法與實踐
- Spring Boot Cookbook
- 從Java到Web程序設計教程
- R用戶Python學習指南:數據科學方法
- JSP程序設計實例教程(第2版)
- Instant Zurb Foundation 4
- Emotional Intelligence for IT Professionals
- 超好玩的Scratch 3.5少兒編程