問題javascript
1. 如何訪問會話變量(session)?php
A.經過$_GEThtml
B.經過$_POSTjava
C.經過$_REQUESTweb
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 的這一部分功能並不是完美。本章考驗你對字符串的了理解及對處理字符串
的函數的認識。此外,你還必須面對正則表達式——一個很是有用,卻老是被開發者忽試
的工具——的編寫藝術。