第一篇:php版本比較
PHP版本VC6與VC9、Thread Safe與None-Thread Safe等的區別最近發現很多PHP程序員對PHP版本知識了解不是很清楚,自己也看了不少類似的文章,還是感覺不夠明確和全面,網上的結論又都是模棱兩可,在此,給出最完整甚至武斷的解釋。
本文講解:VC6與VC9,Thread Safety與None-Thread Safe,Apache module與fastcgi的區別與選擇。
PHP的大版本主要分三支:PHP4/PHP5/PHP6
其中,PHP4由于太古老、對OO支持不力已基本被淘汰,請無視PHP4。
PHP6由于基本沒有生產線上的應用,還基本只是一款概念產品,很多功能已在PHP5.3.3上實現,所以也不詳述,請無視PHP6。
PHP5的版本主要分四支:PHP5.2之前的版本、PHP5.2.X、PHP5.3和日前發布的PHP5.4。
那我們應該如何選擇適用自己項目的版本呢?
PHP5.2之前的版本不值得考慮,因為某些功能缺陷或者BUG,PHP5.2之前的版本。PHP5.4還處于Beta試用的版本號,非穩定版本,請無視PHP5.4。
主流PHP程序對PHP5.2.X的兼容性最好,而每次版本號的升級帶來的都是安全性和穩定性的改善,所以宜挑選最新的版本。目前PHP5.2系列最新的是PHP5.2.17。
而如果產品是自己開發自己使用,PHP5.3在某些方面更具優勢,在穩定性上更勝一籌,增加了很多PHP5.2所不具有的功能,比如內置php-fpm、更完善的垃圾回收算法、命名空間的引入、sqlite3的支持等等,是部署項目值得考慮的版本,強烈推薦PHP5.3.3。
除了版本號的不同,同一版本號的PHP版本也有區別,并且在選擇PHP擴展的時候需要注意。
?install版:可執行的MSI格式安裝包。
?ZIP版:解壓即可用,與install版無區別。建議選擇ZIP版。
?DEBUG版:請無視。
VC6與VC9
對于VC6還是VC9版本的選擇,PHP官方網站有詳細的描述,原文如下:
Which version do I choose?
If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP
If you are using PHP with IIS you should use the VC9 versions of PHP
VC6 Versions are compiled with the legacy Visual Studio 6 compiler
VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability.The VC9 versions require you to have the Microsoft 2008 C++ Runtime(x86)or the Microsoft 2008 C++ Runtime(x64)installed Do NOT use VC9 version with apache.org binaries 我該選擇哪個版本?
如果你在apache1或者apache2下使用PHP,你應該選擇VC6的版本
如果你在IIS下使用PHP應該選擇VC9的版本
VC6的版本使用visual studio6編譯
VC9使用Visual Studio 2008編譯,并且改進了性能和穩定性。VC9版本的PHP需要你安裝Microsoft 2008 C++ Runtime 不要在apache下使用VC9的版本TS和NTS
TS指Thread Safety,即線程安全,一般在IIS以ISAPI方式加載的時候選擇這個版本。
NTS即None-Thread Safe,一般以fast cgi方式運行的時候選擇這個版本,具有更好的性能。
從2000年10月20日發布的第一個Windows版的PHP3.0.17開始的都是線程安全的版本,這是由于與Linux/Unix系統是采用多進程的工作方式不同的是Windows系統是采用多線程的工作方式。如果在IIS下以CGI方式運行PHP會非常慢,這是由于CGI模式是建立在多進程的基礎之上的,而非多線程。一般我們會把PHP配置成以ISAPI的方式來運行,ISAPI是多線程的方式,這樣就快多了。但存在一個問題,很多常用的PHP擴展是以Linux/Unix的多進程思想來開發的,這些擴展在ISAPI的方式運行時就會出錯搞垮IIS。因此在IIS下CGI模式才是 PHP運行的最安全方式,但CGI模式對于每個HTTP請求都需要重新加載和卸載整個PHP環境,其消耗是巨大的。
為了兼顧IIS下PHP的效率和安全,微軟給出了FastCGI的解決方案。FastCGI可以讓PHP的進程重復利用而不是每一個新的請求就重開一個進程。同時FastCGI也可以允許幾個進程同時執行。這樣既解決了CGI進程模式消耗太大的問題,又利用上了CGI進程模式不存在線程安全問題的優勢。
因此,如果是使用ISAPI的方式來運行PHP就必須用Thread Safe(線程安全)的版本;而用FastCGI模式運行PHP的話就沒有必要用線程安全檢查了,用None Thread Safe(NTS,非線程安全)的版本能夠更好的提高效率。
如何查看當前運行的PHP的版本?一個很簡單的辦法就是phpinfo();
Thread Safety disabled是NTS,enabled是TS
Configure Command看到VC98字樣的是VC6,Compiler標明 MSVC9(Visual C++ 2008)的是VC9
在WIN7下:IIS7+NTS+FastCGI+vc9 是最佳搭檔或者apache+fastcgi+nts+vc6。
在WINXP下:Apache+TS+Apache module +vc6最合適的搭檔。
PHP語言簡介
PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法。它可以比 CGI或者Perl更快速的執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。PHP具有非常強大的功能,所有的CGI的功能PHP都能實現,而且支持幾乎所有流行的數據庫以及操作系統。最重要的是PHP可以用C、C++進行程序的擴展!特性
1、開放的源代碼:
所有的PHP源代碼事實上都可以得到。
2、PHP是免費的。
和其它技術相比,PHP本身免費。
3、php的快捷性
程序開發快,運行快,技術本身學習快。嵌入于HTML:因為PHP可以被嵌入于HTML語言,它相對于其他語言,編輯簡單,實用性強,更適合初學者。
4、跨平臺性強:
由于PHP是運行在服務器端的腳本,可以運行在UNIX、LINUX、WINDOWS下。
5、效率高:
PHP消耗相當少的系統資源。
6、圖像處理:
用PHP動態創建圖像
7、面向對象:
在php4,php5 中,面向對象方面都有了很大的改進,現在php完全可以用來開發大型商業程序。
8、專業專注:
PHP支持腳本語言為主,同為類C語言。技術應用
1,偽靜態
2,靜態頁面生成3,數據庫緩存
4,過程緩存
5,div+cssw3c標準
6,大負荷
7,分布式
8,jquery框架集成9,flex
10,桌面程序應用(不擅長)
11,支持MVC模型 PHP3 PHP3跟Apache服務器緊密結合的特性,加上它不斷的更新及加入新的功能,而且幾乎支持所有主流與非主流數據庫,再以它能高速的執行效率,使得PHP在1999年中的使用站點已經超過了150000。加上它的源代碼完全公開,在 Open Source意識抬頭的今天,它更是這方面的中流砥柱。不斷地有新的函數庫加入,以及不停地更新的活力,使得PHP無論在UNIX、LINUX或是Windows的平臺上都可以有更多新的功能。它提供豐富的函數,使得在程序設計方面有著更好的支持。PHP4
PHP4.0整個腳本程序的核心大幅更動,讓程序的執行速度,滿足更快的要求。在最佳化之后的效率,已較傳統CGI或者ASP等程序有更好的表現。而且還有更強的新功能、更豐富的函數庫。無論您接不接受,PHP 都將在 Web CGI 的領域上,掀起巔覆性的革命。對于一位專業的Web Master 而言,它將也是必修課程之一。
PHP 4.0是更有效的,更可靠的動態Web頁開發工具,在大多數情況運行比 PHP 3.0要快,其腳本描述更強大并且更復雜, 最顯著的特征是速率比的增加。PHP4.0這些優異的性能是PHP 腳本引擎重新設計產生的結果:引擎由 AndiGutmans 和 Zeev Suraski從底層全面重寫。PHP4.0 腳本引擎 ——Zend引擎,使用了一種更有效的編譯——執行方式, 而不是PHP 3.0 采用的執行 ——當解析時模型。
PHP4的優越性:
PHP4在3.0版的基礎上增加或增強了許多有用的特征,主要如下:
(1)別名:在PHP4中,可以利用引用為變量賦值,這給編程帶來了很大的靈活性。
(2)擴充了API模塊:PHP 4.0 為擴展的 API 模塊的提供了擴展PHP接口模塊, 它比舊的 API 版本顯著地快。PHP 模塊已有的及最常用的接口多數被轉換到使用這個擴展的接口。
(3)自動資源釋放:PHP4增加了引用計數功能,這種新技術的引入使PHP4具有了自動內存管理功能,減輕了開發人員的負擔。
(4)布爾類型:PHP 4.0 支持布爾類型。
(5)進程生成:在 UNIX 環境下的 PHP 4.0 提供了一個很智能和通用的生成進程, 使用了一種名為基于automake/libtool的系統生成技術。
(6)COM/DCOM 支持:PHP 4.0 提供 COM/DCOM 支持(僅用于Windows 環境)可以無縫地存取和訪問 COM 對象。
(7)與PHP 3.0 兼容性很好:PHP 4.0 是與 PHP 3.0 代碼向后兼容性接近100%。由于 PHP 4 的改進的體系結構,兩者有一些細微的差別,但是大多數人將可能永遠不可能遇上這種情況。
(8)配置:PHP4重新設計和增強了PHP.ini文件,這使得用PHP.ini來配置PHP顯得極為容易,這個文件可以在運行時被Apache(unix系統)或由Windows 注冊(Windows 環境)。
(9)加密支持:PHP4實現了完整的加密, 這些加密功能是一個完整的mycrypt庫,并且 PHP 4.0 支持哈希函數。Blowfish,TripleDES,MD5,并且SHA1 也是可使用的一些加密算法。
(10)類型檢查:PHP 4.0 支持同一操作符用于評類型檢查: ===(3 等號運算符), 為在兩個值和其類型之間作檢查。例如, '3' ===3 將視為假(類型是不同的), 而 3 ==3(相等判斷)將視為真。
(11)FTP 支持:PHP 4.0 支持 FTP。通常, 你會為通過一個調制解調器連接下載一個大文件提供一個接口。然而, 如果你確實有需要,可以使用PHP。
(12)PHP4新增函數或功能增強函數:PHP 4.0 新增了許多函數,同時也將許多現有的函數功能進行了增強,以下是一些例子。array_count_values()eval()foreach()include()ob_end_clean()ob_end_flush()ob_get_contents()ob_start()strip_tags()unset()
(13)here打印:PHP 4.0 的Here打印是與Perl類似的, 盡管完全不相同。Here是打印大容量文章的一個有用的方法,例如在 HTML文件中,不會漏掉任何一個字符,例如目錄標記。
(14)HTTP Session fallback 系統:為 HTTP Session管理的一個 fallback 系統在 PHP 4.0被實現。缺省情況下,Session標識符由cookies存儲。如果沒有cookies支持或一項cookies任務失敗,Session標識符自動被創建并在 URL 的查詢字符串中被攜帶。
(15)ISAPI 支持:PHP 4.0 能作為一個個性化的 ISAPI 模塊作為 IIS插件。這比 PHP 3.0 更有效, 它作為一個外部的程序來運行。
(16)內存:PHP 4.0 能更有效的使用內存, 導致較少的內存占用消耗,這主要歸功于引用計數技術的實現。
(17)其他類成員函數:在 PHP 4.0 你能在成員函數本身的作用域或全局范圍內調用其他類的成員函數。例如,你能用一個子函數覆蓋父函數,并在子函數中調用父函數。
(18)多維數組:在 PHP 4.0,利用GET,POST,Cookies的進行的數據傳輸支持多維數組。
(19)個性化的 HTTP Session支持:HTTP Session處理, 包括 fallback 系統管理,在 PHP 4.0被它的新庫函數實現。在版本 3.0 中處理Session要求使用 PHPLIB 和第三方的庫函數, 它比把Session直接地由 PHP 支持慢了許多。
(20)個性化的 Java 支持:PHP 4.0 支持和java的交互。這種個性化的Java 支持為PHP 在 Java 對象上創建和使用方法提供一個簡單并且有效的工具。
(21)對象和數嵌套組:PHP 4.0 實現了功能更加強大的對象, 移去了 PHP 3.0存在的種種句法限制。對象能在數組以內被嵌套并且反過來也如此, 可以根據你的需要實現嵌套。
(22)面向對象的編程:PHP 4.0 為面向對象的編程和構造類及對象提供擴展的功能和新特征。PHP4實現了對象重載,引用技術等新技術。
(23)對象重載支持:對象重載語法允許第三方的基于面向對象的類庫使用 PHP4 的面向對象的特征存取他們自身的功能。使用這個特征的一個 COM 模塊已經被實現了。
(24)輸出緩沖支持:PHP 提供了一個輸出緩沖函數集合。輸出緩沖支持允許你寫包裹函數功能壓縮緩沖區。在 PHP4 的輸出緩沖支持允許 HTML 頭信息存放, 無論 HTML的正文是否輸出。頭信息(header(), content type, and cookies)不采用緩沖。
(25)增加了PCRE 庫:PHP 4.0 包括一個 Perl 兼容的正則表達式(PCRE)庫, 和正常regex庫一起與 PHP 綁定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正規表達式之間有一些細微差別。
(26)PHP.ini 文件:PHP.ini文件在 PHP4.0 被重新設計, 使用的 PHP 的配置PHP.ini是更容易并且更有效的。全部文件能被Apache 在運行時間操作(在 Apache環境 下)或由 Windows 注冊表(在 Windows 下面)。被加入PHP.ini文件的配置指令自動地在所有相關的模塊中被支持。
(27)引用計數:PHP 4.0 為系統中的每個數值提供了引用計數, 包括資源。一旦一個資源不再被任何變量引用,它自動地被釋放以節省內存資源。利用這個特征的最明顯的例子一個內置SQL查詢的循環語句。在PHP 3.0中,每次遞歸另外的 SQL 結果集合重復申請內存,直到腳本執行完畢,這些結果集合占用的內存才被釋放。
(28)支持引用:通過引用可以改變一個變量的值。
(29)函數的運行時綁定:PHP 4.0 的運行時間綁定功能允許你在他們被聲明以前調用, 無論聲明是否在代碼以后或是在運行時間。
(30)類的運行時信息:PHP 4.0 支持在運行時刻存取下列類信息:一個對象的類名,一個對象的父類的類名字,以及對象函數所在的名字。
(31)服務器抽象層:為支持Web服務器提供了增強型 SAPI(服務器 API)接口,是 PHP 4.0 不可分的一部分。這個服務器抽象層,提供了通用的WEB服務器接口支持,支持多線程WEB服務器,為大多數的WEB服務器提供透明的支持, 這些服務器包括 Apache ,IIS(ISAPI), 以及 AOL 服務器。
(32)語法的點亮顯示:PHP 4.0 語法的點亮顯示允許開發者看見源代碼而不是腳本, 這個功能比PHP 3.0中的更有效。它跑得更快,更執行得更好,并且產生更緊湊的HTML代碼。
(33)由引用改變變量的值:PHP 4.0 由引用支持可變的賦值, “關聯”的2個變量之中個的任何一個的值被改變,另外的變量的值同樣被改變,這類似與C中的指針類型。
(34)在引用字符串中的變量引用:PHP 4.0 增強了在引用字符串中的變量引用。PHP5
PHP5在長時間的開發及多個預發布版本后,2004年7月13日,PHP5.0發布。該版本以Zend引擎Ⅱ為引擎,并且加入了新功能如PHP Data Objects(PDO)。現在PHP5.0版本強化更多的功能。首先,完全實現面向對象,提供名為PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直觀地訪問XML數據、名為SimpleXML的XML處理用界面。同時還強化了XMLWeb服務支持,而且標準支持SOAP擴展模塊。數據庫方面,PHP新版本提供旨在訪問MySQL的新界面——MySQL。除此前的界面外,還可以使用面向對象界面和預處理語句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上還捆綁有小容量RDBMS-SQLite.
1、新的對象模式(New Object Mode)
PHP5 中的對象已經進行了較系統、較全面的調整,現在的樣子可能看起來會有些類似于 Java。本小節著重講述 PHP5 中新的對象模式,并舉了一些較簡易的例子來說明。就讓本節成為你的 PHP5 之旅的一個新起點吧。:)
* 構造函數和析構函數
* 對象的引用
* 對象的克隆
* 對象中的私有、公共及受保護模式
* 接口(Interfaces)
* 抽象類
* __call
* __set 和 __get
* 靜態成員
構造函數和析構函數
在 PHP4 中,當函數與對象同名時,這個函數將成為該對象的構造函數,并且在 PHP4 中沒有析構函數的概念。
在 PHP5 中,構造函數被統一命名為 __construct,并且引入了析構函數的概念,被統一命名為 __destruct。
對象的引用
在PHP4中,傳遞變量給一個函數或方法,實際是把這個變量做了一次復制,也就意味著你傳給函數或方法的是這個變量的一個副本,除非你使用了引用符號“&” 來聲明是要做一個引用,而不是一個 Copy。在 PHP5中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。
對象的克隆
當一個對象始終以引用的形式來被調用時,如果我想得到該對象的一個副本,該怎么辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。
對象中的私有、公共及保護模式
PHP4 中,一個對象的所有方法和變量都是公共的,這意味著你可以在一個對象的外部操作其中的任意一個變量和方法。PHP5 引入了三種新的用來控制這種存取權限的模式,它們是:公共的(Public)、受保護的(Protected)及私有的(Private)。
公共模式(Public):允許在對象外部進行操作控制。
私有模式(Private):只允許本對象內的方法對其進行操作控制。
受保護模式(Protected):允許本對象及其父對象對其進行操作控制。
接口(Interfaces)
PHP4中的對象支持繼承,要使一個對象成為另一個對象的派生類,你需要使用類似 “class foo extends parent” 的代碼來控制。PHP4 和 PHP5 中,一個對象都僅能繼承一次,多重繼承是不被支持的。不過,在 PHP5中產生了一個新的名詞:接口,接口是一個沒有具體處理代碼的特殊對象,它僅僅定義了一些方法的名稱及參數,此后的對象就可以方便的使用'implement' 關鍵字把需要的接口整合起來,然后再加入具體的執行代碼。
這對提高代碼的可讀性及通俗性有很大的幫助,通過上面的例子可以看到,對象 foo 包含了displayable 和 printable 兩個接口,這時我們就可以清楚的知道,對象 foo 一定會有一個 display()方法和一個print()方法,只需要去了解接口部分,你就可以輕易的操作該對象而不必去關心對象的內部是如何運作的。
抽象類
抽象類不能被實例化。
抽象類與其它類一樣,允許定義變量及方法。
抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。
__call
PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。如果你試著調用一個對象中不存在的方法,__call 方法將會被自動調用。
__set 和 __get
這是一個很棒的方法,__set 和 __get 方法可以用來捕獲一個對象中不存在的變量和方法。
類型指示
在 PHP5 中,你可以在對象的方法中指明其參數必須為另一個對象的實例。
靜態成員
靜態成員和靜態方法在面象對象編程的術語中被稱作 “類方法(class methods)” 和 “類變量(class variables)”。
“類方法” 在一個對象沒有實例化前允許被調用。同樣,“類變量” 在一個對象沒有實例化前可以被獨立操作控制(不需要用一個對象的方法來控制)。
2、異常處理(Exceptions)
異常處理是公認的處理程序錯誤的理想方法,在 Java 及 C 中都有這個概念,我們欣喜的看到,在 PHP5 已經加入了這方面的應用。你可以嘗試使用 “try” 和 “catch” 來控制程序的錯誤。當有錯誤發生的時候,代碼會把錯誤交給 “catch” 子句來處理,在 “catch” 子句中,你需要指明要把錯誤交給某個對象處理,這樣做可以使代碼結構看起來更清晰,因為現在我們可以把所有的錯誤信息交給一個對象來處理。
自定義錯誤處理
你可以很方便的用自定義的處理錯誤的代碼來控制你的程序中的意外。你僅僅需要從異常類中派生出一個自己的錯誤控制類,在你自己的錯誤控制類中,你需要有一個構造函數和一個 getMessage 方法。
3、名稱空間(Namespace)
名稱空間對類的分組或函數分組很有用。它可以把一些相關的類或函數給組合到一起,方便以后調用。
例:名稱空間
namespace Math
{
class Complex
{
//...code...function __construct()
{
print(“hey”);
}
}
}
$m = new Math::Complex();
?>
注意你需要在何種情況下使用名稱空間,在實際運用中,你可能會需要聲明兩個或多個名稱一樣的對象來做不同的事情,那么你就可以把他們分別放到不同的名稱空間中去(但接口是要相同的)。
PHP6設想 1.支持Unicode
支持Unicode是有其必然,雖然Unicode占用較多的空間,但Unicode帶來的便利性,遠超過占用空間的缺點,尤其在國際化的今天,硬件設備越來越強大,網速也大幅度的提升,這么一點小小的缺點是可以忽略的。另外一點,PHP也可以在.ini文件中設定是否開啟支持Unicode,決定權在你自己,這是一個不錯的點子,關掉Unicode的支持,PHP的性能并不會有大幅度的提升,主要的影響在于需要引用字符串的函數。.2.Register Globals 將被移除
這是一個重要的決定,許多新進的PHP開發者會覺得Register Globals蠻方便的,但是卻忽略了Register Globals會帶來程序上安全性的隱患,大多數的主機上此項功能是關閉的,印象PHP4.3.x版開始時,此項默認設置值即是關閉狀態,PHP6正式移除Register Globals也代表著如果程序是由PHP3時代的產物,將完全無法使用,除了改寫一途外,別無他法。相信現在的PHP世界里,仍使用PHP3時代所產生的程序應該是少之又少。
3.Magic Quotes 將消失
Magic Quotes主要是自動轉義需要轉義的字符,此項功能移除也符合大多數PHP開發者的心聲。
4.Safe Mode 取消
老實說,這個模式不知道哪里不好,取消就取消吧,反正也用不到
5.'var' 別名為 'public'
在類中的var聲明變成public的別名,相信是為了兼容PHP5而作的決定,PHP6現在也可以稱作為OO語言了。
6.通過引用返回將出錯
現在透過引用返回編譯器將會報錯 例如$a =& new b()、function &c(),OO語言默認就是引用,所以不需要再使用&了。
7.zend.ze1 compatbility mode 將被移去
Zend.ze1相容模式將被移去,PHP5是為兼容舊有PHP4,所以在.ini中可選擇是否開啟相容模式,原因在于PHP5使用的是第二代解析引擎,但是相容模式并不是百分之百能解析PHP4語法,所以舊時代的產物,移除。
8.Freetype 1 and GD 1 support 將不見
這兩個是很久的Libs,所以不再支持,GD1早已被現在的GD2取代了。
9.dl()被移到 SAPI 中
dl()主要是讓設計師加載extension Libs,現在被移到 SAPI 中
10.Register Long Array 去除
從PHP5起默認是關閉,再PHP6中正式移除。
11.一些Extension的變更
例如 XMLReader 和 XMLWriter將不再是以Extension的方式出現,他們將被移入到PHP的核心之中,并且默認是開啟,eregextension將被放入PECL,代表著它將被移出PHP核心,這也為了讓路給新的正則表達式extension,此外,Fileinfoextension 也將被導入PHP的核心之中。
12.APC將被導入核心
這是一個提高PHP性能的功能,現在它將被放入PHP核心中,并且可以選擇是否啟用APC 13.告別ASP風格的起始標簽
原來是為了取悅ASP開發者轉向使用PHP,現今已經不再需要這種做法了
擴展閱讀: PHPChina:http://bbs.phpchina.com/?fromuid=171390 2 PHP官方網站http:// 參考來源:http://baike.baidu.com/view/99.htm?func=retitle
第二篇:PHP課后
PHP課后習題
第一章自測題
一、單選題
1.動態網站隸屬性下面哪一種軟件開發形式()
A.應用程序開發
B.C/S架構軟件
C.嵌入式程序開發
D.B/S架構軟件
2.在下面的選項中,哪一種Web構建在開發動態網站時通常用于接收井處理用戶事件()
A.HTML
B.CSS
C.JavaScript
D.PHP 3.下面幾個后臺腳本編程語言中,哪個屬于開源的軟件()
A.ASP
B.PHP
C.JSP
D.CGI 4.下面幾個Web構建中,哪個可以直接作為數據庫的客戶端應用處理數據庫中的數據()
A.JavaScript
B.Apache
C.Linux
D.PHP 5.用于調整網頁的外觀和布局的Web構建是下面選項中的哪一個()
A.PHP
B.JavaScript
C.CSS
D.XML 6.構建一個網站開發平臺,希望具有簡易性、低成本、高安全性、開發速度快并且執行靈活,可以選擇下面選項中哪一種網站開發平臺()
A.ASP.NET
B.J2EE
C.LAMP
D.CGI 7.下面選項中,哪個不屬于URL的組成部分()
A.傳輸協議
B.主機
C.端口
D.Internet 8.如果選用LAMP平臺開發Web程序,下面選項中不能使用PHP處理的工作是()
A.接收用戶表單
B.處理用戶事件
C.圖像處理
D.生成HTML輸出
9.在下面的選項中,可以由Web服務器Apache完成的工作是哪一個()
A.解析PHP文件
B.連接處理數據庫
C.主動建立與客戶端連接
D.發布網站
10.在下面的選項中,對MySQL數據庫描述不正確的是()
A.MySQL屬于C/S結構軟件
B.在LAMP組合的開發平臺中,MySQL用于保存網站中的內容數據
C.可以使用PHP作為MySQL客戶端程序連接并處理MySQL服務器
D.MySQL服務器必須和Apache服務器以及PHP應用服務器安裝在同一臺電腦中
二、練習題
1.了解B/S軟件體系結構的特點。
2.掌握動態網站開發所需要的Web構件,及每種構件在Web開發中的用途。3.了解網站的運行過程,Web的王作原理
4。了解HTTP請求/響應模式的過程,及URL的作用 5.探索LAMP組合的特性及應用領域
第二章自測題
1.下載最新版本的源代碼包,在Linux操作系統下為自己安裝一個最好的LAMP運行平臺,并配置好phpMyAdmin。
2.下載各種軟件的最穩定版本,在Windows操作系統中獨立安裝屬于自己的PHP T作平臺,要求設置好每個軟件的安裝路徑,井配置好phpMyAdmin。
3.挑選一種自己喜歡的PHP及相關軟件的集成版本,安裝并進行設置。
4.不管是安裝的哪一種開發環境,找到Apache、MySQL、PHP的安裝目錄和它們的配置文件,以及網頁發布目錄的位置。
第三章自測題
一、單選題
1.Apache是()服務的服務器程序
A.www.tmdps.cn)A.strchr, split,var_dump
B.strstr,explode, print_r C.srrstr,explode, echo
D.Strchr,split, var,_dump 5.下面哪個正則表達式,可以從服務器上取到訪問域名第二層()A.preg_replace(“/.*([^.V]+)(.(comlnetlorg))?.[^.V]+$/”,“1”, $_SERVER['HTTP_ HOST'])B.preg_replace(“/.*?([^.V]+)(.(comlnetlorg))?.[^.V]+$/”,“1”,$_SERVER['HTTP_ HOST'])C.preg_replace(“/.*([^.v]+)(.(comlnetlorg))?.[^.V]+$/”,“1”,$HTTP HOST)D.preg_replace(“/.*?([^.V]+)(.(comInmlorg))?.[^.V]+$/”,“1”,$HTTP_HOST)PHP中,下列哪個函數是將字符串前后顛倒()A.strrev()
B.strrpos()C.strstr()
D.sirfiirst()6.下列那個選項是正確的引用文件的方法:()A.require和include
B.re:quire和function C.define和include
D.function和include 7.以下字符的長度是()
$text=“ tllo ”;
echo strlen(trim($text));
?> A.9
B.5
C.7
D.3 8.將字符串中所有英文單字的開頭字母轉換為大寫的函數應該是()A.ucfrrst(“字符串”)
B.strtolower()C.strtoupper()
D.ucwords()
二、練習題
1.寫出一個函數驗證電子郵件的格式是否正確。
2.寫出一個正則表達式,過濾網頁上的所有JavaScript/VBScript腳本(即把script標記及其內容都去掉)。3.編寫一個PHP腳本程序,用于接受用戶在表單中的輸入,井要求在該腳本中進行數據效驗(在客戶端表單中有以下字段和需要效驗的格式)。
Name
請輸入你的名字,單行,32個漢字以下.8個漢字以上
Title
請輸入標題,單行,64個漢字以下,不能為空
Body
輸入文本內容,多行,不限
E-mail 請輸入郵件地址,按電子郵件格式效驗
Birthday請輸入生日,按YYYY-MM-DD格式效驗
第八章自測題
自測題
一、單選題
1.以下哪個錯誤級別會使程序崩潰,阻止并退出程序()A.E_WARNING
B.E_NOTICE
C.E_ERROR
D.以上都可以 2.下面劉PHP錯誤日志描述不正確的是()
A.可以錯誤記錄到Apache服務器的錯誤日志文件error.log 中
B.記錄錯誤日志到自己指定的文件中
C.可以將錯誤日志發送給系統syslog
D。在寫入錯誤日志之前,應該先在PHP配置文件中將displa y_errors選項開啟 3.關于PHP 5中的異常,下列四句描述中哪句是錯誤的()
A.異常也是一個類
B,為了拋出我們自建的異常,我們必須使用throw語句實現
C.異常在拋山后會在父一層被自動消滅掉
D.要容忍某些特定的異常,我們應該使用try?catch語法的同時,留空catch段 4.下面哪個函數不能返回UNIX時間戳()
A.Time()
B.strtotime()
C.localtimeo
D.gmrnktime()5.當前GMT時區的時間戳和當前本地的時間戳,在秒上有什么區別()
A.這取決于本地時區和GMT時區之間小時數的差別
B.沒有任何區別
C.本地時區和GMT時區完全匹配時才相等
D.沒有可比的地方
6.以下哪一個是最簡單的方式將microtime()轉化輸出為一個單一的數值()
A.$time=implode(' ',microtime());
B.$time=explode(' ',microtime());$time=$t.ime[0]+$time [1];
C.$time=microtime()+microtime();
D.$time=arr ay_sum(explode(' ',microtime()));7.下面程序運行結果為()
$nextWeek=timeO+(7*24*60*60);
echo 'Now:'.date('Y-m-d').“n”;
echo 'Next Week:'.date('Y-m-d',$nextWeek).“n”;
?>
A.得到今天的日期(月-曰)
B-得到今天的U期(年-月-U)與下周的日期(年-月-日)
c.得到現在的時間(小時-分-秒)
D.得到現在到下周的時間間隔
8.使用PHP的GD函數庫動態創建圖像時,需要先獲取圖像資源,下面函數中哪一個不能創建圖像資源()
A.imagecreate()
B.imagec:reatetruecolor()
C.imagecreateflromjpeg()
D.imagecolorallocate()
二、練習題
1.簡述PHP中error_reporting函數的作用是什么。
2。使用PHP的日期和時間函數,打印出“前一天“的日期和時問信息(輸出可以參考2009-5-12 11:05:30格式)。
3.使用PHP的GD函數庫編寫一個具有縮放圖片和添加水印功能的類(要求支持中文水印)。
第十一章自測題
一、單選題
1.怎樣打開或創建一個文件()
A.open()
B.fopen()
C.fwriteo
D,write()2.下面哪兩個參數用來提示fopen()函數打開一個文件進行讀取并寫入()
A.w
B.r
c.a
D.+ 3.哪個函數用來從文本文件里面讀取一個單獨的行,但是當你需要讀取二進制數據或者其他格式的文件的時候,你需要使用哪個函數()
A.fgets(),fseeko
B.freda(),fgets0
C.fputs(),fgets()
D.fgets0,fread()4.下面代碼中file_ exists的意義是()
$ filename-‘/path/to/foo.txt’;
Iq(file_exists($fil.encame)){
Echo“The file $filenfune exists”;
}else{
echo “Thcfile$filename does not exist”;)
?>
A.測試字符串
B.測試數組
C.測試變量
D.測試一個文件是否存在
5./tmp是上傳文件的默認存儲目錄,如果更改這個目錄需要編輯哪個文件的哪個屬性值(A.php.ini文件的upload_tmp_dir屬性
B.php.ini文件的uploaud_dif屬性
c-php,conf文件的upl'oad_tmp_dir屬性
D.php+conf文件的upload_dir屬性 6.以下代碼運行結果為()
php
$fp=fopen(”/etc/passwd“,”rt“);
$data=fgets($fp,12);
echo ftell($fp);
fclose($fp);
?>
A.13
B.11
C.0
D.10 7.File()函數返回的數據類型為()
A.數組
B.字符串
C.整型
D.根據文件來定 8.PHP中刪除文件的函數是()
A.rm
B.del
C.unlink
D.rm-if 9.PHP中,可以用來接收上傳的文件的函數是()
A.$一FILES
B-copys
C.is_uploadnle
D-move_uploaded_file 10.PHP中用來刪除當前日錄的函數是()
A.chdir
B.cd
C.opendir
D.rmdir =、練習題
1.使用PHP的文件處理函數實現網頁靜態化功能。
2.寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。
3.在沒有數據庫的環境下,以文件替代數據庫實現一個完整的網頁留言板功能。
第十二章自測題
一、單選題
1.下列哪些數據庫管理系統是PHP不支持的()A.MySQL
B-IBM DB2
C.PostgreSQL
D.Microsoft SQL Server
E.以上沒有一個PHP不支持
2.請看下面的SQL查詢語句,選擇哪兩項可以減少從數據庫返回的數據量()SELECT*FROM
MY —TABLE
A.轉為存儲過程
B.用具體的字段名來代替“*”
c.加一個“wnere”語句
D.轉變查詢為視圖
E.使用預語句 3.下面哪個不是一個合法的SQL的歸類函數()
A.AVG
B.SUM
C.MIN
D.MAX
E.CURRENT_DATEO 4.mysql_affected_rows()對哪個操作沒有影響()
A.SELECT
B.DELETE
C, UPDATE
D.INSERT 5.取得搜索語句的結果集中的記錄總數的函數是()
A.Mysql-fetch-row
B.mysql-u root password tcst
C.mysql_num-rows
D.mysql-u root-password test 6.mysql_insert_id()函數的作用是()
A.盤看下一次捅入記錄時的ID號
B.查看剛剛插入過的自動增長ID值
C.查看一共做過多少次insert操作
D.查看一共多少條記錄 7.修改MySQL崩戶root的密碼的指令是(A.mysqiadmin—u root password test
B.mysql-u root password test
C.mysql—Ll root—ptest
D.mysql-u root-password test
8.以下代碼執行結果是()
A.報錯
C.循環換行打印全部記錄
B.只打印一條記錄 D.無任何結果
B.查看剛剮插入過的自動增長ID值 D.查看一共有多少條記錄
9.假設-f一個數據庫mydb中有一個表tb】,表中有六個字段,主鍵為ID,有十條記錄,ID從0到9,以下代碼輸山結果是()
$link 2 mysql_c.onnec.t(”IocalhostrP, “mysql_user't, ”mysql_passwordr')
or die(l'Could not connelc.t:”.m ysql_erroH));
tSresult 2 mysql_query{T'SELECT i.d,name,age FROM mydb.tbl where id<5");
or die(P'Could not query:.mysqI—error(》;
echo mysql_num_fields(S;result.);
mysql_close{'$tink);
?>
A,6
B.5
C.4
D.3 10.使用以下哪條指令能夠實現數據庫的長久連接()
A.mysql_connecE
B.mysql_con nectd
C.mysql_pconnetcd
D.mysql_pconnect 1 1.建立一個“學生”表Student,它由學弓Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個屬性組成。其中學號不能為空,值是唯一的,并且姓名取值也唯一,下列哪個選項正確()
A.CREATE TABLE.Student(Sno CHAR(5)NOT NULL UNIQUE, Sname CHAR(20)UNIQUE,Ssex CHAR(1),Sage INT* Sdep CHAR(1 5)):
B-
CREATE TABLE Student(Sno CHAR(5)NOT NULL UNIQUE, Sname CHAR(20)UNIQUE,Ssex CHAR(I)Sage INT, Sdept CHAR(15));
C.CREATE TABLE Student(Sno CHAR(5), Snarm: CHAR(20)UNIQUE* Ssex CHAR(I), SageINT.Sdept CHAR(15));
D-CREATE TAHLE Student(Sno CHAR(5)NOT NULL UNIQUE, Sname CHAR(20)UNIQUE,Ssex CHAR(l), Sdcpt CHAR(1 5)): 12.查詢所有年齡在20歲以下的學生姓名及其年齡,以下正確的是()
A, SELECT Sname,Sage FROM Student.WHERE Sage<=20;
B.SELECT Sname,Sage FROM Student WHERE NOT Sage<20;
C-SELECT Sname,Sage FROM Student WHERE NOT Sage>20;
D.SELECT Sname,Sage FROM Studcnt WHERE Sage<20;13.查詢名字中第2個字為“陽”字的學生的姓名和學號,下列正確的是()
A.SELECT Sname,Sno FROM Student WHERE Sname LIKE '_陽%';
B.SELECT Sname,Sno FROM Student WHERE Sname LIKE'陽%':
C.SELECT Sname,Sno FROM StU dent WHERE Sn ame LIKE'一陽';
D.SELE CT Sn ame,Sno FROM Student WHERE Sname LIKE'陽_%';14.HAVING短語與WHERE子句的區別是()
A.WHERE進擇滿足條件的組
B.HAVING選擇滿足條件的元組
C,作用對象不同
D.查詢條件不同
15.導山數據庫正確的方法為()
A.mysqldump數據庫名>文件名;
B,mys qldump數據庫名>>文件名;
c.mysqliciump數據庫名 文件名;
D.mysqldump數據庫名=文作名; 16.
卜面哪一項不是有效的SELECT語句()
A.SELECT astname,firstname FROM customers;
B-SELECT*FROM orders;
C.Select FirstName NAME from CUSTOMERS;
D,SELECT lastname Last Name FROM customers;1 7.以下ALTER語法不正確的是()
A.ALTER TAHLE tl RENAME t2;
B.ALTER TABLE t2 MODIFY a TINYINT NOT NULL;
C.ALTER TABLE t2 MODIFY a TINYrNT NOT NULL, CHANGE b CHAR(20);
D.ALTER TABLE t2 ADD c INT UNSIGNED NOT NULLAUTO_INCREMENT, ADD INDEX(c);1 8.下面哪一個不是有效的約束類型()
A.PRIMARYKEYS
B.UNIQUE
C.CHECK
D.FOREIGN KEY 19.MySQL.中表的默認類型為()
A.ISAM
B.InnoDB
C.MyISAM
D.HE.AP
二、練習題
1.實現用戶注冊功能。需要建一張用戶信息表,并編寫注冊和結果兩個頁面。用戶在注冊頁面填寫注冊信息,提交到結果頁面后顯示注冊的結果。
具體要求:
(1)在MySQL數據庫的test數據庫中,創建一張用于存放用戶注冊信息的表,表中有描用戶名”、“密碼”兩個字段,并且設置“用戶名”字段為主鍵;
(2.)用戶注冊頁面要顯示一個輸入框、一個密碼框和一個“注冊”提交按鈕:
(3)用戶單擊“注冊”按鈕時,耍用JavaScript技術對用廣的輸入信息進行判斷,包括 用戶名或者密碼不能為空,密碼的長度必須大于6位,用戶名和密碼的長度必須小于10位。假如用戶輸入不符合上述規范,則彈出相應的錯誤提示信息終止提交;只有當用戶輸入滿足上規范時,才允許將表單提交到結果頁面;
(4)如果用戶名在表中已經存在,則在結果頁面提示用戶重新輸入用戶名;
(5)如果用戶名在表中不存在,則將用戶的注冊信息插入到數據庫中,并在結果頁面顯示“注冊成功”的提示信息;
(6)用戶注冊成功后,在結果頁面顯示“現在已經有×X位注冊用戶了!”并將所有的注
冊用戶信息以列表方式顯示出來。
2.在M.ySQL數據庫,使用的用戶名為root,密碼為php。其中的一個數據庫名稱為lamp,其中的有兩個表名為type和border。下面為兩個表中的關系與數據:
表type
表Border
編寫一個腳本遍歷兩張表中的數據形成目錄結構,一級為type表中的數據,每個類別下為border表中的數據。
具體要求:
(1)數掘庫文件(具體操作語句)。
(2)正確顯示一級type表中數據。
(3)正確顯示每個類下border表中數據母
第三篇:php試題
1.寫一個函數,盡可能高效的,從一個標準 url 里取出文件的擴展名
例如: http:// 語言中,頁面頭部的 meta 標記可以用來輸出文件的編碼 格式,以下是一個標準的 meta 語句
請使用 PHP 語言寫一個函數,把一個標準 HTML 頁面中的類似 meta 標記中的 charset 部分值改為 big5 請注意:(1)需要處理完整的 html 頁面,即不光此 meta 語句(2)忽略大小寫
(3)? 和 ” 在此處是可以互換的
(4)?Content-Type? 兩側的引號是可以忽略的,但 ?text/html;charset=gbk? 兩側的不行(5)注意處理多余空格
3.寫一個函數,算出兩個文件的相對路徑 如 $a = ?/a/b/c/d/e.php?;$b = ?/a/b/12/34/c.php?;
計算出 $b 相對于 $a 的相對路徑應該是../../c/d將()添上
4.寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。5.簡述論壇中無限分類的實現原理。
6.設計一個網頁,使得打開它時彈出一個全屏的窗口,該窗口中有一個文本框和一個按鈕。用戶在文本框中輸入信息后點擊按鈕就可以把窗口關閉,而輸入的信息卻在主網頁中顯示。簡述題(50分)
1、用PHP打印出前一天的時間格式是2006-5-10 22:21:21(2分)
2、echo(),print(),print_r()的區別(3分)
3、能夠使HTML和PHP分離開使用的模板(1分)
5、使用哪些工具進行版本控制?(1分)
6、如何實現字符串翻轉?(3分)
7、優化MYSQL數據庫的方法。(4分,多寫多得)
8、PHP的意思(送1分)
9、MYSQL取得當前時間的函數是?,格式化日期的函數是(2分)
10、實現中文字串截取無亂碼的方法。(3分)
11、您是否用過版本控制軟件? 如果有您用的版本控制軟件的名字是?(1分)
12、您是否用過模板引擎? 如果有您用的模板引擎的名字是?(1分)phperz.com
13、請簡單闡述您最得意的開發之作(4分)
14、對于大流量的網站,您采用什么樣的方法來解決訪問量問題?(4分)
15、用PHP寫出顯示客戶端IP與服務器IP的代碼1分)
16、語句include和require的區別是什么?為避免多次包含同一文件,可用(?)語句代替它們?(2分)
17、如何修改SESSION的生存時間(1分).18、有一個網頁地址, 比如PHP開發資源網主頁: http://,如何得到它的內容?($1分)
19、在HTTP 1.0中,狀態碼401的含義是(?);如果返回“找不到文件”的提示,則可用 header 函數,其語句為(?);(2分)
12、在PHP中,heredoc是一種特殊的字符串,它的結束標志必須?(1分)
13、談談asp,php,jsp的優缺點(1分)
14、談談對mvc的認識(1分)
15、寫出發貼數最多的十個人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)16.請說明php中傳值與傳引用的區別。什么時候傳值什么時候傳引用?(2分)php程序員站
17.在PHP中error_reporting這個函數有什么作用?(1分)18.請寫一個函數驗證電子郵件的格式是否正確(2分)19.簡述如何得到當前執行腳本路徑,包括所得到參數。(2分)20.如何修改SESSION的生存時間.(1分)
21、JS表單彈出對話框函數是?獲得輸入焦點函數是?(2分)
22、JS的轉向函數是?怎么引入一個外部JS文件?(2分)
23、foo()和@foo()之間有什么區別?(1分)
24、如何聲明一個名為”myclass”的沒有方法和屬性的類?(1分)
25、如何實例化一個名為”myclass”的對象?(1分)
26、你如何訪問和設置一個類的屬性?(2分)
27、mysql_fetch_row()和mysql_fetch_array之間有什么區別?(1分)
28、GD庫是做什么用的?(1分)
29、指出一些在PHP輸入一段HTML代碼的辦法。(1分)30、下面哪個函數可以打開一個文件,以對文件進行讀和寫操作?(1分)(a)fget()(b)file_open()
(c)fopen()
(d)open_file()www.tmdps.cn
31、下面哪個選項沒有將 john 添加到users 數組中?(1分)(a)$users[] = ?john?;
(b)array_add($users,?john?);(c)array_push($users,?john?);(d)$users ||= ?john?;
32、下面的程序會輸入是否?(1分)
33、使用php寫一段簡單查詢,查出所有姓名為“張三”的內容并打印出來(2分)表名User Name Tel Content Date 張三 *** 大專畢業 2006-10-11 張三 *** 本科畢業 2006-10-15 張四 021-55665566 中專畢業 2006-10-15 請根據上面的題目完成代碼:
$mysql_db=mysql_connect(“local”,”root”,”pass”);www.tmdps.cn @mysql_select_db(“DB”,$mysql_db);
34、如何使用下面的類,并解釋下面什么意思?(3)class test{
function Get_test($num){ $num=md5(md5($num).”En”);return $num;
}
}
35、寫出 SQL語句的格式 : 插入,更新,刪除(4分)表名User Name Tel Content Date 張三 *** 大專畢業 2006-10-11 張三 *** 本科畢業 2006-10-15 張四 021-55665566 中專畢業 2006-10-15(a)有一新記錄(小王 *** 高中畢業 2007-05-06)請用SQL語句新增至表中(b)請用sql語句把張三的時間更新成為當前系統時間(c)請寫出刪除名為張四的全部記錄
36、請寫出數據類型(int char varchar datetime text)的意思;請問varchar和char有什么區別(2分)
37、MySQ自增類型(通常為表ID字段)必需將其設為(?)字段(1分)
38、寫出以下程序的輸出結果(1分) $b=201;$c=40;$a=$b>$c?4:5;echo $a;?>
39、檢測一個變量是否有設置的函數是否?是否為空的函數是?(2分)40、取得查詢結果集總數的函數是?(1分)
41、$arr = array(?james?, ?tom?, ?symfony?);請打印出第一個元素的值(1分)
42、請將41題的數組的值用?,'號分隔并合并成字串輸出(1分)
43、$a = ?abcdef?;請取出$a的值并打印出第一個字母(1分)
44、PHP可以和sql server/oracle等數據庫連接嗎?(1分)
45、請寫出PHP5權限控制修飾符(3分)
46、請寫出php5的構造函數和析構函數(2分)
47、以下請用PHPMYADMIN完成
(一)創建新聞發布系統,表名為message有如下字段(3分)php程序員站 id 文章id title 文章標題 content 文章內容
category_id 文章分類id hits 點擊量
(二)同樣上述新聞發布系統:表comment記錄用戶回復內容,字段如下(4分)comment_id 回復id id 文章id,關聯message表中的id comment_content 回復內容
現通過查詢數據庫需要得到以下格式的文章標題列表,并按照回復數量排序,回復最高的排在最前面
文章id 文章標題 點擊量 回復數量
用一個SQL語句完成上述查詢,如果文章沒有回復則回復數量顯示為0
(三)上述內容管理系統,表category保存分類信息,字段如下(3分)category_id int(4)not null auto_increment;categroy_name varchar(40)not null;
第四篇:PHP面試題
PHP程序員初級面試題
一、解釋一下語句作用,并標示出以下哪一句不會把 John 新增到 users 陣列?
$users[] = 'john';
array_add($users,?john?);
array_push($users,?john?);
$users ||= 'john';
二、sort()、assort()、和 ksort()有什么分別?它們分別在什么情況下使用? sort()
asort()
ksort()
三、以下的代碼會產生什么?為什么? $num =10;function multiply(){ $num =$num *10;} multiply();echo $num;
四、reference 跟一個正規的變量有什么分別?如何 pass by reference?在什么情況下我們需要這樣做?
五、哪些函式可以用來向正在執行的腳本中插入函式庫?
六、foo()與 @foo()有什么分別?
七、你如何替 PHP 的應用程式偵錯?
八、“===”是什么?試舉一個“==”是真但“===”是假的例子。
九、你會如何定義一個沒有成員函式或特性的類別 myclass?
十、include 和 include_once 有什么分別?require 又如何?
十一、以下哪一個函式可以把瀏覽器轉向到另一個頁面? redir()
header()
location()
redirect()
十二、以下哪一個函式可以用來開啟檔案以便讀/寫? fget()
file_open()
fopen()
open_file()
十三、mysql_fetch_row()和 mysql_fetch_array()有什么分別?
十四、下面的代碼用來做什么?請解釋。
$date='08/26/2003';print ereg_replace(“([0-9]+)/([0-9]+)/([0-9]+)”,“[url=file://2///1///3%22,$date]2/1/3”,$date[/url]);
十五、試寫出幾個輸出一段 HTML 代碼的方法。(一)
成功把 John 新增到陣列 users。函式 array_add()無定義。
成功把 John 新增到陣列 users。
語法錯誤。
(二)根據陣列中元素的值,以英文字母順序排序,索引鍵會由 0 到 n-1 重新編號。主要是當陣列索引鍵的值無關疼癢時用來把陣列排序。
與 sort()一樣把陣列的元素按英文字母順序來排列,不同的是所有索引鍵都獲得保留,特別適合替聯想陣列排序。
根據陣列中索引鍵的值,以英文字母順序排序,特別適合用于希望把索引鍵排序的聯想陣列。
(三)由于函式 multiply()沒有指定 $num 為全域變量(例如 global $num 或者 $_GLOBALS['num']),所以 $num 的值是 10。
(四)Reference 傳送的是變量的地址而非它的值,所以在函式中改變一個變量的值時,整個應用都見到這個變量的新值。一個正規變量傳送給函式的是它的值,當函式改變這個變量的值時,只有這個函式才見到新值,應用的其他部分仍然見到舊值。
$myVariable = “its' value”;Myfunction(&$myVariable);// 以 reference 傳送參數以 reference 傳送參數給函式,可以使函式改變了的變量,即使在函式結束后仍然保留新值。
(五)對這道題目不同的理解會有不同的答案,我的第一個想法是插入 PHP 函式庫不外乎 include()、include_once()、require()、require_once(),但細心再想,“函式庫”也應該包括 com 物件和.net 函式庫,所以我們的答案也要分別包括 com_load 和 dotnet_load,下次有人提起“函式庫”的時候,別忘記這兩個函式。
(六)foo()會執行這個函式,任何解譯錯誤、語法錯誤、執行錯誤都會在頁面上顯示出來。@foo()在執行這個函式時,會隱藏所有上述的錯誤訊息。
很多應用程式都使用 @mysql_connect()和 @mysql_query 來隱藏 mysql 的錯誤訊息,我認為這是很嚴重的失誤,因為錯誤不該被隱藏,你必須妥善處理它們,可能的話解決它們。
(七)我并不常這樣做,我曾經試過很多不同的偵錯工具,在 Linux 系統中設定這些工具一點也不容易。不過以下我會介紹一個近來頗受注目的偵錯工具。
PHPAPD,第一步是執行以下的指令安裝: pear install apd安裝后在你的腳本的開頭位置加入以下的語句開始進行偵錯: apd_set_pprof_trace();執行完畢,打開以下檔案來查閱執行日志: apd.dumpdir 你也可以使用 pprofp 來格式化日志。
(八)“===”是給既可以送回布爾值“假”,也可以送回一個不是布爾值但卻可以賦與“假”值的函式,strpos()和 strrpos()便是其中兩個例子。
問題的第二部份有點困難,想一個“==”是假,但是“===”是真的例子卻很容易,相反的例子卻很少。但我終于找到以下的例子:
if(strpos(“abc”, “a”)== true){ // 這部分永不會被執行,因為 “a” 的位置是 0,換算成布爾值“假”}if(strpos(“abc”, “a”)=== true){ // 這部份會被執行,因為“===”保證函式 strpos()的送回值不會換算成布爾值.}(九)
class myclass{}(十)$obj = new myclass();(十一)
使用語句:$this->propertyName,例如:
class myclass{ private $propertyName;public function __construct(){ $this->propertyName = “value”;}}(十二)
三者都是用來在腳本中插入其他檔案,視乎 url_allow_fopen 是否核準,這個檔案可以從系統內部或外部取得。但他們之間也有微細的分別:
include():這個函式容許你在腳本中把同一個檔案插入多次,若果檔案不存在,它會發出系統警告并繼續執行腳本。include_once():它跟 include()的功能相似,正如它的名字所示,在腳本的執行期間,有關檔案只會被插入一次。require():跟 include()差不多,它也是用來在腳本中插入其他檔案,但若果檔案不存在,它會發出系統警告,這個警告會引致致命錯誤令腳本中止執行
(十三)這不是一個 PHP 函式,會引致執行錯誤。
這個是正確答案,header()用來插入卷頭資料,可以用來使瀏覽器轉向到另一個頁面,例如:
header(“Location: http:// 標簽,為何要自行編寫正規表達式?好了,便當作是面試的一道考題吧,我會這樣回答:
$stringOfText = ”
This is a test
“;$expression = ”/<(.*?)>(.*?)(.*?)>/“;echo preg_replace($expression, ”[url=file://2/]2[/url]“, $stringOfText);// 有人說也可以使用 /(<[^>]*>)/ $expression = ”/(<[^>]*>)/“;echo preg_replace($expression, ”“, $stringOfText);(十八)這正是為何我老是告訴別人選擇適當的編程語言,若果你只用一種語言的話你怎么能回答這道問題?這道問題很簡單,Perl 所有陣列變量都是以 @ 開頭,例如 @myArray,PHP 則沿用 $ 作為所有變量的開頭,例如 $myArray。至于 Perl 表示散列表則用 %,例如 %myHash,PHP 則沒有分別,仍是使用 $,例如
$myHash。
(十九)最主要的倆各選擇是 session 和 cookie。使用 session 的方法是在每一頁的開始加上 session_start(),然后利用 $_SESSION 散列表來儲存 session 變量。至于 cookie 你只需記著一個原則:在輸出任何文字之前調用 set_cookie()函式,此外只需使用 $_COOKIE 散列表便可以存取所有 cookie 變量。
還有一個不那么可靠的方法,就是利用訪客的 IP 地址,這個方法有特定的危險性。
(二十)這個可能是我最喜歡的函式庫,自從 PHP 4.3.0 版本后 GD 便內建在 PHP 系統中。這個函式庫讓你處理和顯示各式格式的圖檔,它的另一個常見用途是制作所圖檔。GD 以外的另一個選擇是 ImageMagick,但這個函式庫并不內建于 PHP 之中,必須由系統管理員安裝在伺服器上。
(二十一)嗯,你可以使用 PHP 中任何一種輸出語句,包括 echo、print、printf,大部分人都使用如下例的 echo: echo ”My string $variable";你也可以使用這種方法:
echo <<
我們不要為一個簡單的問題引發一場舌戰,正如我經常說的:“為工作選擇適合的語言,不要把工作遷就語言。”我個人認為 Perl 十分適合用作命令行工具,雖然它在網頁應用上也有不錯的表現,但是它的真正實力在命令行上才能充分發揮。同樣地,PHP 雖然可以在控制臺的環境中使用,但是個人認為它在網頁應用上有更好的表現,PHP 有大量專門為網頁應用而設計的函式,Perl 則似乎以命令行為設計之本。
個人來說兩種語言我都喜歡,在大學期間我經常使用 Perl、PHP 和 Java,可惜工作上我使用 C#,但在家里我花不少時間操練 PHP、Perl、Ruby(現正學習)和 Java,保持我的技能知識在最新狀態。很多人問我 C 和 C++ 怎么樣,它們是否仍有機會在我的應用中占一席位,我的答案基本上是“否”,我近來的工作主要集中在網頁開發,雖然 C 和 C++ 也可以用來寫網頁,但它們到底不是為這種工作而設計的,“為工作選擇適合的語言”,若果我需要編寫一個控制臺應用,用來展示 bubble sort、quick sort 和 merge sort 的效能比較,我一定會使用 C / C++。若果我需要編寫一個相片簿系統,我會使用 PHP 或者 C#(我認為制作用戶介面方面.NET 語言比網頁更加)。
第五篇:php試題
1.mysql_connect()與@mysql_connect()的區別是(B)
A
@mysql_connect()不會忽略錯誤,將錯誤顯示到客戶端 B mysql_connect()不會忽略錯誤,將錯誤顯示到客戶端 C 沒有區別
D 功能不同的兩個函數
2.語句for($k=0;$k=1;$k++);和語句for($k=0;$k==1;$k++);執行的次數分別是: A
A
無限和0
B 0和無限
C 都是無限
D 都是0
3.讀取post方法傳遞的表單元素值的方法是: B
A
$_post[“名稱”]
B $_POST[“名稱”]
C $post[“名稱”]
D $POST[“名稱”]
4.php運算符中,優先級從高到低分別是()B
A
關系運算符,邏輯運算符,算術運算符
B 算術運算符,關系運算符,邏輯運算符
C 邏輯運算符,算術運算符,關系運算符
D 關系運算符,算術運算符,邏輯運算符
5.cookie的值存儲在()C
A
硬盤中
B 程序中
C 客戶端
D 服務器端
6.要查看一個變量的數據類型,可使用函數()B
A
type()
B gettype()
C GetType()
D Type()
7.字符串的比較,是按()進行比較。B
A
拼音順序
B ASCII碼值
C 隨機
D 先后順序
8.復選框的type屬性值是()A
A
checkbox
B radio
C select
D check
9.SESSION會話的值存儲在()D
A
硬盤上
B 網頁中
C 客戶端
D 服務器端
10.如果想取得最近一條查詢的信息,應該使用哪個函數()A
A
mysql_info
B mysql_stat
C mysql_insert_id()
D mysql_free_result
11.要查看一個結構類型變量的值,可以使用函數()
D
A
Print()
B print()
C Print_r()
D print_r()
12.在PHP中哪個變量數組總是包含所有總客戶端發出的cookies數據(A
$_COOKIE
B $_COOKIES
C $_GETCOOKIE
D $_GETCOOKIES
13.下列哪個說法是錯誤的()D
A
gettype()是查看數據類型的B 沒有被賦值的變量是0
C unset()是被認為NULL
D 雙引號字符串最重要的一點是其中的變量名會被變量值替代
14.HTML中,超鏈接用的是什么標簽 A
A
〈a>
B 〈table>
C 〈b>
D 〈head>
15.strtolower()函數的功能是()
A
upper 轉為大寫
A
將給定的字符串全部轉換為小寫字母
B 將給定的字符串全部轉換為大寫字母
C 將給定的字符串首字母轉換為小寫字母
D 將給定的字符串首字母轉換為大寫字母)A
16.HTML中,表格單元格的“值”是存儲在()標簽里
B
A
〈body>
B 〈td>
C 〈tr>
D 〈table>
REFDVCD |
A
intval()
B strval()
C str
D valint()
18.php中字符串的連接運算符是()
D
A
B +
C &
D.19.php函數不支持的功能有:
C
A
可變的參數個數
B 通過引用傳遞參數
C 通過指針傳遞參數
D 實現遞歸函數
20.文件框的type屬性值是()C
A
text
B hidden
C textarea
D checkbox
21.運算符“^”的作用是()D
A
無效
B 乘方
C 位非
D 位異或
22.自定義函數中,返回函數值的關鍵字是()
A
returns
B close
A
C return
D back
23.24.要檢查一個常量是否定義,可以使用函數()
A
A
defined()
B isdefin()
C isdefined()
D 無
25.關于mysql_select_db的作用描述正確的是()
A
連接數據庫
B 連接并選取數據庫
C 連接并打開數據庫
D 選取數據庫
26.HTML中,title標簽放在什么位置
B
A
body標簽里
B head標簽里
C script標簽里
D table標簽里
27.使用()函數可以求得數組的大小
A
A
count()
B conut()
C $_COUNT[“名稱”]
D $_CONUT[“名稱”]
28.從隊列數組隊頭刪除數據可以使用()函數。
A
array_push()
B array_pop()
C array_shift()
D array_unshift()
29.在html中嵌入javaScript,應該使用的標記是()
A
〈script language=“javascript”>
B 〈head> 〈/head>
C 〈body> 〈/body>
D 〈!--....//..>
30.以下代碼運行結果()C $A=array(“Monday”,“Tuesday”,3=>“Wednesday”);
D C A
echo $A[2];
A
Monday B Tuesday C Wednesday D 沒有顯示
31.新建一個數組的函數是()
A
A
array
B next
C count
D reset
32.下列不正確的變量名是()
B
A
$_test
B $2abc
C $Var
D $printr
33.讀取get方法傳遞的表單元素值的方法是: A
A
$_GET[“名稱”]
B $get[“名稱”]
C $GEG[“名稱”]
D $_get[“名稱”]
34.函數var_dump的意義是()C
A
定義數組
B 遍歷數組
C 輸出變量的相關信息
D 遞歸數組
35.strtoupper()函數的功能是: A
A
將給定字符串全部轉換為大寫字母。
B 將給定字符串全部轉換為小寫字母。
C 將給定字符串首字母轉換為大寫字母。
D 將給定字符串首字母轉換為小寫字母。
36.以下代碼的運行結果是()A
if($i=“")
{echo ”a“;}
else
{echo ”b“;
} ?>
A
輸出a
B 輸出b
C 條件不足,無法確定
D 運行出錯
37.在str_replace(1,2,3)函數中1 2 3 所代表的名稱是()
B
A
”取代字符串","被取代字符串","來源字符串"
B "被取代字符串",“取代字符串","來源字符串"
C "來源字符串",”取代字符串","被取代字符串"
D "來源字符串","被取代字符串",“取代字符串"
38.瀏覽網頁時,看到的內容是HTML的哪一部分? C
A
title
B table
C body
D head
39.運算符”%“的作用是()C
A
無效
B 取整
C 取余
D 除
40.file()函數返回的數據類型是()
A
A
數組
B 字符串
C 整型
D 根據文件來定
41.計算字符串長度的函數是()A
A
strlen()
B len()
C stringlen()
D lens()
42.array_push()的作用是()C
A
將數組的第一個元素彈出
B 將數組的最后一個元素彈出
C 將一個或多個元素壓入數組的末尾
D 將一個或多個元素插入數組的開頭
43.isset()的功能是()
A
A
測試變量是否存在B 測試變量是否為空
C 測試常量是否為空
D 測試常量是否存在
44.定義靜態變量的關鍵字是()
A
A
static
B statics
C STATIC
D STATICS
45.以下屬于忽略鍵名數組排序的是()
D
A
natsort
B ksort
C asort
D sort
46.empty()的功能是:
A
A
測試變量是否為空
B 測試變量是否存在C 測試常量是否為空
D 測試常量是否存在
47.瀏覽網頁時,看到的內容是HTML的哪一部分?
C
A
title
B table
C body
D head
48.自定義用戶常量,可以使用()函數.B
A
Define()
B define()
C Defin()
D defin()
49.執行下列代碼后的結果是()$x=15;echo $x++;$y=20;echo ++$y;
A
15,20
B 15,21
C 16,20
D 16,21
50.申明全局變量的關鍵字是()B
A
globals
B global
C GLOBAL
D 無
多項選擇題:(共12題,每題5分)
B.cd C.opendir D.rmdir 1.在返回數組中的所有值,可以使用array_value()函數 T
B 2.運算符“++”可以對常量和變量進行累加1 F 3.php語言中的數值型字符串可以和數字變量進行混合運算.T 4.php中,雙引號字符串支持變量解析以及轉義字符.T 5.php語言中的數值型字符串不可以和數字變量進行混合運算.F 6.PHP程序的擴展名必須是.php F 7.php中,字符串是用引號引起來的字符,單引號和雙引號沒有區別,都是一樣的,隨便用哪一個都是一樣的.F 8.if條件控制語句中,if后面的{ }可有可無,意義一樣。F 9.一個MySQL服務器,可以擁有多個數據庫,每個數據庫可擁有多個表.T 10.MS-server200與mysql一樣,同屬微軟公司的產品,用于軟件開發的數據庫支持 F 11.運算符“--”可以對常量和變量進行自身減1 F 12.php中,單引號字符串不支持變量解析以及轉義字符.T 13.if條件控制語句中,if后面的{ }不能省略。F 14.< f orm id=”form1“ name=”form1“ method=”“ action=”“ >,默認的method使用get進行值傳遞。F 15.〈 form id=”form1“ name=”form1“ method=”“ action=”">,默認的method使用post進行值傳遞。F 16.常量的作用域是全局的,不存在全局與局部的概念.T 17.if條件控制語句中,if后面必須加括號 T 18.使用get和post傳遞表單值沒有什么區別,可以隨便選擇一種使用.F 19.php中,在任何時候,雙引號和單引號都是不一樣的.F 20.運算符“++”只能對常量進行自身加1 F 21.if條件控制語句中,if后面的{ }可有可無。F 22.PHP跟ASP一樣,只能應用IIS架設服務器 F 23.MySQL可以建立個用戶,但每個用戶的權限一樣,僅是名稱不一樣而已.F 24.php中,()與{ }具有不一樣的功能。T 25.php中可以使用method=post的方式進行文件上傳 F 26.php中,==與===是同一個運算符。F 27.MySQL數據庫可以建立多個用戶,且各個用戶的權限可以分別設置.T 30.array_search()與in_array()函數均可用來查詢數組中元素的值。F 31.PHP是微軟公司開發的,應用于設計網頁的語言 F 32.php中,雙引號和單引號在某些時候具有不同的意義,在某些時候具有相同的意義.T 33.array_unshift()函數在數組的末尾插入一個或多個元素,返回成功插入后的總元素個數。F 34.current()和pos()均可返回數組中的當前單元。F 35.在返回數組中的所有值,可以使用array_keys()函數 F 36.php中,函數默認按值傳遞參數。T 37.php中,雙引號字符串不支持變量解析以及轉義字符.F 38.session與cookie只是名稱不同,實質上沒有什么區別,均可用于實現用戶登錄等功能.F 39.運算符“++”只能對變量的值自身累加1 F 40.安裝Windows XP后,系統默認狀態沒有安裝PHP環境;而安裝Windows 2003后,系統自動安裝了PHP環境,不用我們再安裝.F