php面試題匯總三(基礎篇附答案)


問題

1. 如何訪問會話變量(session)?

A.通過$_GET

B.通過$_POST

C.通過$_REQUEST

D.通過全局變量

E.以上都不對

2. 哪個函數能讓服務器輸出如下 header?

set-Cookie: foo=bar;

答案:_______________

3. 在忽略瀏覽器 bug 的正常情況下,如何用一個與先前設置的域名(domain)不同的新

域名來訪問某個 cookie?

A.通過 HTTP_REMOTE_COOKIE 訪問

B.不可能

C.在調用 setcookie()時設置一個不同的域名

D.向瀏覽器發送額外的請求

E.使用 Javascript,把 cookie 包含在 URL 中發送

4. index.php 腳本如何訪問表單元素 email 的值?(雙選)

 

 

A.$_GET[‘email’]

B.$_POST[‘email’]

C.$_SESSION[‘text’]

D.$_REQUEST[‘email’]

E.$_POST[‘text’]

5. 以下腳本將如何影響$s 字符串?(雙選)

25

$s = '

 

Hello

 

‘;

$ss = htmlentities ($s);

echo $s;

?>

A.尖括號<>會被轉換成 HTML 標記,因此字符串將變長

B.沒有變化

C.在瀏覽器上打印該字符串時,尖括號是可見的

D.在瀏覽器上打印該字符串時,尖括號及其內容將被識別為 HTML 標簽,因此不可

E.由於調用了 htmlentities(),字符串會被銷毀

6. 如果不給 cookie 設置過期時間會怎么樣?

A.立刻過期

B.永不過期

C.cookie 無法設置

D.在瀏覽器會話結束時過期

E.只在腳本沒有產生服務器端 session 的情況下過期

7. 思考如下代碼:如果用戶在兩個文本域中分別輸入“php”和“great”,腳本輸出什么?

 

 

echo $_GET['element'];

?>

A.什么都沒有

B.Array

C.一個提示

D.phpgreat

E.greatphp

8. 在 HTTPS 下,URL 和查詢字串(query string)是如何從瀏覽器傳到 Web 服務器上的?

A.這兩個是明文傳輸,之后的信息加密傳輸

B.加密傳輸

C.URL 明文傳輸,查詢字串加密傳輸

D.URL 加密傳輸,查詢字串明文傳輸

E.為確保加密,查詢字串將轉換為 header,夾在 POST 信息中傳輸

9. 當把一個有兩個同名元素的表單提交給 PHP 腳本時會發生什么?

A.它們組成一個數組,存儲在超級全局變量數組中

B.第二個元素的值加上第一個元素的值后,存儲在超級全局變量數組中

C.第二個元素將覆蓋第一個元素

D.第二個元素將自動被重命名

E.PHP 輸出一個警告

10.如何把數組存儲在 cookie 里?

A.給 cookie 名添加一對方括號[]

B.使用 implode 函數

C.不可能,因為有容量限制

D.使用 serialize 函數

E.給 cookie 名添加 ARRAY 關鍵詞

11.以下腳本輸出什么?

ob_start();

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

echo $i;

}

$output = ob_get_contents();

ob_end_clean();

echo $ouput;

?>

A.12345678910

B.1234567890

C.0123456789

D.什么都沒有

E.一個提示

12.默認情況下,PHP 把會話(session)數據存儲在______里。

A.文件系統

B.數據庫

C.虛擬內容

D.共享內存

E.以上都不是

13.你在向某台特定的電腦中寫入帶有效期的 cookie 時總是會失敗,而這在其他電腦上都

正常。在檢查了客戶端操作系統傳回的時間后,你發現這台電腦上的時間和 web 服務

器上的時間基本相同。而且這台電腦在訪問大部分其他網站時都沒有問題。請問這會

是什么原因導致的?(雙選)

A.瀏覽器的程序出問題了

B.客戶端的時區設置不正確

C.用戶的殺毒軟件阻止了所有安全的 cookie

D.瀏覽器被設置為阻止任何 cookie

E.cookie 里使用了非法的字符

14.假設瀏覽器沒有重啟,那么在最后一次訪問后的多久,會話(session)才會過期並被

回收?

A.1440 秒后

B.在 session.gc_maxlifetime 設置的時間過了后

C.除非手動刪除,否則永不過期

D.除非瀏覽器重啟,否則永不過期

E.以上都不對

15.哪個函數能把換行轉換成 HTML 標簽

答案:____________

 

答案

1. 盡管在 register_globals 被設置為 on 時,可以通過全局變量來訪問 session,但在較新版

本的 PHP 中,為了避免造成安全隱患,php.ini 文件已經把 register_globals 設置為 off

了。因此答案是 E。

2. 雖然 header 函數在這里也能用,但這題顯然是在說 setcookie 或 setrawcookie 函數。

3. 答案是 B。瀏覽器不允許來自某個域名的 HTTP 事務更改另一個域名下的 cookie,否

則這將造成嚴重的的安全問題。

4. 既然表單采用 post 方式傳輸,那么腳本將只可能從$_POST 和$_REQUEST 兩個超級全

局變量數組中取到值。元素名稱(email)是鍵名,因此答案是 B 和 D。注意,由於可

能導致潛在的安全問題,這里不鼓勵使用$_REQUEST。

5. 本題考驗你對 HTML 編碼的認識以及代碼查錯能力。變量$s 在被函數 htmlentities()處

理過后,結果返回給了變量$ss,而$s 自己並沒有被改變。因此答案是 B 和 D。你可能

覺得自己被戲弄了,但是記住,發現這樣的小錯誤是捉蟲能力中很重要的一部分。

6. 如果沒有設置過期時間,cookie 將在用戶會話結束時自動過期。cookie 不需要服務器

端會話的支持,因此答案是 D。

7. 表單使用 post 方式傳輸,所以無論在文本框中輸入什么,其值都會傳給$_POST 超級

全局變量,這里的$_GET 數組沒有值。答案是 A。

8. HTTPS 傳輸發生時,瀏覽器與服務端立刻完成加密機制的握手,之后的數據都是加密

傳輸而不是明文傳輸——包括 URL,查詢字串。而在 HTTP 傳輸中,它們都是明文傳

輸的,因此答案是 B。

9. 對於收到的查詢字串和 POST 信息,PHP 只是簡單的把元素添加進對應的超級變量數

組中。結果就是如果有兩個元素同名,前一個會被后一個覆蓋。答案是 C。

10.只有 B 永遠正確。雖然你可以用 implode 函數把數組轉化成字符串,然后存在數組里,

但卻無法保證日后一定能用 serialize()把這個字符串還原成數組。瀏覽器對單個 cookie

有容量限制,因此在 cookie 里存儲數組不是個好主意。但事情也並非永遠是這樣,你

仍然可以存儲一些比較小的數組。

11.這又是一個考驗 debug 能力的題。注意到了嗎,在腳本的末尾,echo 語句中的$output

變量拼錯了!腳本不會輸出任何東西,答案是 E。

12.答案是文件系統(A)。默認情況下,PHP 把所有會話信息存儲在/tmp 文件夾中;在沒

有這個文件夾的操作系統中(比如 Windows),必須在 php.ini 中給 session.save_path 設

置一個合適的位置(如 c:\Temp)。

 

13.B 和 D 是最有可能出問題並應該深入調查的地方。由於瀏覽器訪問其他網站都正常,

所以不可能是瀏覽器程序出了問題。殺毒軟件通常不會選擇性的只阻止安全的 cookie

(不過有可能會阻止所有的 cookie)。你首先應當檢查瀏覽器是否被設置為阻止所有

cookie,這是最有可能導致該問題的原因。同時,錯誤的時區設置也可能是根源——給

cookie 設置有效期時用得是 GMT 時間。可能會出現 cookie 在寫入時就立刻過期,從

而無法被腳本接收的情況。

14.session.gc_maxlifetime 設置的是用戶最后一次請求到 session 被回收之間的時間間隔。

盡管數據文件並沒有被真正刪除,不過一旦 session 被回收,你將無法對此 session 進行

訪問。巧合的是,session.gc_maxlifetime 的默認設置正好是 1440 秒,但這個數字是可

以被系統管理員調整的。所以答案應該是 B。

15.函數 nl2br 能實現這個功能。

數組

PHP 最強大的功能大概就是處理數組了。PHP 允許開發者創建由各種不同數據類型的

鍵和值組成的數組,並允許你對它進行排序、分割和組合等多種操作。

力量越大,責任越大。找到最佳的辦法來處理如此復雜的數組並不是一件輕松的事。

本章一方面考察你對數組工作機制的認識——不光是理論上的,還要求實踐。另一方面考

察你“人工處理”簡單腳本——指出哪里出錯或者腳本將輸出什么的能力。

 

 

問題

1. 索引數組的鍵是______,關聯數組的鍵是______。

A.浮點,字符串

B.正數,負數

C.偶數,字符串

D.字符串,布爾值

E.整型,字符串

2. 考慮如下數組,怎樣才能從數組$multi_array 中找出值 cat?

$multi_array = array("red",

"green",

42 => “blue”,

“yellow” => array(“apple”,9 => “pear”,”banana”,

“orange” => array(“dog”,”cat”,”iguana”)));

?>

A.$multi_array['yellow']['apple'][0]

B.$multi_array['blue'][0]['orange'][1]

C.$multi_array[3][3][2]

D.$multi_array['yellow']['orange']['cat']

E.$multi_array['yellow']['orange'][1]

3. 運行以下腳本后,數組$array 的內容是什么?

$array = array ('1', '1');

foreach ($array as $k => $v) {

$v = 2;

}

?>

A.array (’2′, ’2′)

B.array (’1′, ’1′)

C.array (2, 2)

D.array (Null, Null)

E.array (1, 1)

 

4.對數組進行升序排序並保留索引關系,應該用哪個函數?

A.ksort()

B.asort()

C.krsort()

D.sort()

E.usort()

5.哪個函數能把數組轉化能字符串?

答案:____________

6. 以下腳本將按什么順序輸出數組$array 內的元素?

$array = array ('a1', 'a3', 'a5', 'a10', 'a20');

natsort ($array);

var_dump ($array);

?>

A.a1, a3, a5, a10, a20

B.a1, a20, a3, a5, a10

C.a10, a1, a20, a3, a5

D.a1, a10, a5, a20, a3

E.a1, a10, a20, a3, a5

7. 哪個函數能把下方數組的內容倒序排列(即排列為:array(‘d’, ‘c’, ‘b’, ‘a’))?(雙選)

$array = array ('a', 'b', 'c', 'd');

?>

A.array_flip()

B.array_reverse()

C.sort()

D.rsort()

E.以上都不對

8. 以下腳本輸出什么?

 

$array = array ('3' => ‘a’, ’1b’ => ‘b’, ‘c’, ‘d’);

echo ($array[1]);

?>

A.1

B.b

C.c

D.一個警告

E.a

9.哪種方法用來計算數組所有元素的總和最簡便?

A.用 for 循環遍歷數組

B.用 foreach 循環遍歷數組

C.用 array_intersect 函數

D.用 array_sum 函數

E.用 array_count_values()

10.以下腳本輸出什么?

$array = array (0.1 => ‘a’, 0.2 => ‘b’);

echo count ($array);

?>

A.1

B.2

C.0

D.什么都沒有

E.0.3

11. 以下腳本輸出什么?

$array = array (true => ‘a’, 1 => ‘b’);

var_dump ($aray);

?>

A.1 => ‘b’

B.True => ‘a’, 1 => ‘b’

C.0 => ‘a’, 1 => ‘b’

D.什么都沒有

E.輸出 NULL

12.在不考慮實際用途的前提下,把數組直接傳給一個只讀函數比通過引用傳遞的復雜度

低?

A.是的,因為在把它傳遞給函數時,解釋器需要復制這個數組

B.是的,如果函數修改數組的內容的話

C.是的,如果這個數組很大的話

D.是的,因為 PHP 需要監視函數的輸出,已確定數組是否被改變

E.不是

12. 以下腳本輸出什么?

function sort_my_array ($array)

{

return sort ($array);

}

$a1 = array (3, 2, 1);

var_dump (sort_my_array (&$a1));

?>

A.NULL

B.0 => 1, 1 => 2, 2 => 3

C.一個引用錯誤

D.2 => 1, 1 => 2, 0 => 3

E.bool(true)

13. 以下腳本輸出什么?

$result = '';

function glue ($val)

{

global $result;

$result .= $val;

}

$array = array ('a', 'b', 'c', 'd');

 

array_walk ($array, 'glue');

echo $result;

?>

答案:____________

15.以下腳本輸出什么?

$array = array (1, 2, 3, 5, 8, 13, 21, 34, 55);

$sum = 0;

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

$sum += $array[$array[$i]];

}

echo $sum;

?>

A.78

B.19

C.NULL

D.5

E.0

 

復制代碼
答案

1. 鍵名是整型數字(integer)的數組叫索引數組,鍵名是字符串的數組叫關聯數組。正

確答案是 E。

2. cat 被包含在另外兩個數組中。順藤摸瓜,首先,鍵 yellow 必須要用到,它跟在 orange

后面。最內部的數組是個索引數組,字符串 cat 是第二個值,它的索引是 1。正確答

案是 E。

3. 答案是 B。foreach 操作的是$array 的副本,因此對原來的值沒有影響。

4. 只有 asort 函數能在保留原有索引關系的前提下進行排序。答案是 B。

5. serialize 函數能把復雜的數據結構轉換成字符串,並可以用 unserialize 函數再轉換回原

先的結構。還有 implode 函數,它可以把數組中的所有元素組成一個字符串。

6. 函數 natsort()使用“自然排序”法對數組進行排序。在本題中,數組元素已經“自然”

排列了,因此函數根本沒有改變數組。答案是 A。

7. array_flip()只能把數組中每個元素的鍵和值進行交換。rsort()和 array_reverse()則能把題

目中的數組逆向排序為需要的形式(’d’,’c’,’b’,’a’)。答案是 B 和 D。

8. 給數組中的元素設置數字鍵時,PHP 從可用的最小的數字開始,遞增設置。如果沒有

指定從哪個數字開始,PHP 將從 0 開始。本題中,3 是第一個元素的鍵,因此,第三

個元素的鍵將被設置為 4,最后一個元素是 5。注意,1b 不是數字。因此,鍵是 1 的

值不存在,答案是 D。

9. array_sum 函數計算數組中所有元素的總和。答案是 D。

10. 腳本輸出 1(答案是 A)。因為只有整型數字和字符串可以被用來做數組的鍵——浮點

數字會被轉換成整型數字。所以 0.1 和 0.2 會被轉換成 0,$array 中只有 0=>’b’這個元

素。

11. 這題試圖把你的注意力從真正的問題上轉移開。true 等同於數字 1,因此$array 數組

將只包含一個元素。然而在 var_dump()函數里出現了一個錯誤——$array 被錯拼成了

$aray,少了一個“r”。因此 var_dump 將輸出 NULL(也可能是一個提示 ,這取決於

你的設置)。答案是 E。

12. 這題有些繞人。首先,注意兩點:第一,你並非一定要使用這兩種方式來傳遞數組。

如果需要用一個函數來修改數組的內容,通過引用傳遞將是唯一的方法——但題中不

是這種情況;第二,題目強調把數組傳遞個一個只讀函數。如果不是這樣,由於對數

組進行改變將產生一個該數組的副本,答案會是 B。然而常規情況下,PHP 需要創建

一套結構來維持一個引用,另一方面,由於 PHP 采用懶拷貝(lazy-copy)——又叫寫

 

時拷貝(copy-on-write)——機制,變量在被改變之前不會產生副本,所以通過引用

將數組傳遞給一個不修改數組內容的函數比通過值傳遞要慢,而通過值傳遞是一種快

速、安全的在函數間共用數組的方式。答案是 E。

13. 答案是 E。sort 函數不產生或返回數組副本,而是直接對傳遞給它的數組本體進行操

作。該函數只返回布爾值 true,代表排序成功(或者 false,代表出錯)。注意,這里

將數組$a1 引用傳遞給了 sort_my_array(),我們不贊成這樣做,應該在函數中重新聲

明引用。

14. array_walk 函數將一個指定函數應用在數組中的每個元素上。因此腳本 glue 函數將把

數組中的所有元素連在一起,輸出 abcd。

15. 本題主要考驗你分析腳本的能力。你也許覺得這題很費解——但我們在調試別人寫的

代碼時卻不得不經常面對此類令人不悅的問題。相對於我們所見過的一些代碼,這已

經算相當簡單了。腳本中的 for 循環了 5 次,每次都把鍵是數組$array 中鍵為$i 的值

的值加進$sum。這聽起來有點像繞口令,但如果你一步一步想,你將發現, 當$i 等

於零時,$array[$array[$i]]等同於$array[$array[0]],也就是$array[1],也就是 2。順着

這個思路,最終的答案是 78。

 

字符串與

正則表達式

字符串是 PHP 的“瑞士軍刀”——作為一種 Web 開發語言,PHP 最常打交道的就是

字符串。因此對於開發者來說,處理字符串是一項非常基礎的技能。

幸運的是,由於 PHP 開發團隊的努力,PHP 對字符串的處理相當易學。你只需邁過第

一個難關,接下來就一馬平川了。

但是,PHP 的這一部分功能並非完美。本章考驗你對字符串的了理解及對處理字符串

的函數的認識。此外,你還必須面對正則表達式——一個非常有用,卻總是被開發者忽試

的工具——的編寫藝術。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM