PHP筆試題總結1

---恢復內容開始---javascript

1.1    PHP中判斷變量的相關函數

 

1.2    strlen( )與mb_strlen( )的做用分別是什麼(新浪網技術部)

strlen 和mb_strlen 都是用於獲取字符串長度的,其中strlen只針對單字節編碼字符,也就是說它計算的是字符串的總字節數,若是是多字節編碼,如gbk和utf8,使用strlen獲得的不是字符串的個數,而是該字符串的總字節數,可使用mb_strlen獲取其字符個數,使用mb_strlen要注意兩點,一是要開啓mbstring擴展,二是要指定字符集。php

示例:html

 

相關題目1:實現中文字串截取無亂碼的方法。java

方法一,使用php內置函數 mb_substr()mysql

方法二,自定義函數,以utf8爲例,以下:web

 

代碼分析:正則表達式

//u 表示按unicode(utf-8)匹配(主要針對多字節好比漢字)sql

join — 別名 implode()表示將一個一維數組的值轉化爲字符串數據庫

array_slice() 函數在數組中根據條件取出一段值,並返回express

 

 

相關題目2:如何求解字符串「中國2北333京」的字符數(一箇中文一個字符),並找到第四個字符「北」
方法一,使用php內置函數,確保配置中已打開mbstring擴展

 

方法二,自定義函數實現求其長度,截取使用上面定義的substr_utf8

 

代碼分析:

 

 

1.3    下列哪一個函數是用正則表達式將字符串分割到數組中(  )

A. split

B. implode

C. explode

D. join

答案:A

1.4    寫出下列程序的輸出結果(新浪網技術部)

 

答案:1

1.5    注意:PHP的文件名不能有中文

1.6    寫出下列幾個預約義全局變量的做用(新浪網技術部)

$_SERVER['DOCUMENT_ROOT']   //當前運行腳本所在的文檔根目錄$_SERVER['HTTP_HOST ']  //當前請求的 Host: 頭部的內容

$_SERVER['REMOTE_ADDR']  //正在瀏覽當前頁面用戶的 IP 地址

$_SERVER['HTTP_REFERER']  //連接到當前頁面的前一頁面的 URL 地址

$_SERVER['SERVER_NAME']  //當前運行腳本所在服務器主機的名稱

$_FILES  //包含有全部上傳的文件信息,他是預約義超級全局數組中惟一的二維數組。

S_FILES['userfile']['name']  //客戶端機器文件的原名稱

$_FILES['userfile']['type']  //文件MIME 類型,若是瀏覽器提供此信息的話,如「image/gif」。

$_FILES['userfile']['size']   //已上傳文件的大小,單位爲字節

$_FILES['userfile']['tmp_name']  //文件被上傳後在服務端儲存的臨時文件名

$_FILES['userfile']['error']  //和該文件上傳相關的錯誤代碼

1.7    include和require都能把另一個文件包含到當前文件中,他們有什麼區別?Include和include_once又有什麼區別?(新浪網技術部)

兩者區別只有一個,那就是對包含文件的需求程度,include就是包含,若是被包含的文件不存在的話,那麼則會提示一個錯誤,可是程序會繼續執行下去。

而require意思是須要,若是被包含文件不存在或者沒法打開的時候,則會提示錯誤,而且會終止程序的執行。

這兩種結構除了在如何處理失敗以外徹底同樣。

once的意思是一次,那麼include_once和require_once表示只包含一次,避免重複包含。

相關題目1:What is the difference between include & include_once? include & require?(Yahoo

 

相關題目2:語句 include 和 require 都能把另一個文件包含到當前文件中,它們的區別是____;爲了不屢次包含同一文件,能夠用語句____來代替它們。

在如何處理失敗時,include() 產生一個警告而 require() 則致使一個致命錯誤;require_once()/include_once()

相關題目3:What functions can you use to add library code to the currently running script?(Yahoo

include、require

1.8    用最少的代碼寫一個求3值最大值的函數. (51.com筆試題)

 

 

1.9    簡述POST 和GET傳輸的最大容量分別是多少? (51.com筆試題)

POST 根據你php.ini文件配置(默認是8M)   

GET的話大小限制在2KB

 

相關題目:表單中 getpost提交方法的區別?

get是發送請求HTTP協議經過url參數傳遞進行接收,而post是實體數據,能夠經過表單提交大量信息。

1.10 有三個php文件位於同一目錄下,內容以下所示,使用瀏覽器訪問 c.php,請問是否存在問題。若是存在問題,請指出修正方法並寫出瀏覽器查看效果,若是不存在問題,請寫出瀏覽器查看效果(酷訊PHP工程師筆試題)

A.php:-------

 <?php function fa() { echo "in Function A\n"; }?>

B.php:-------

 <?php include 'a.php'; ?>

 <?php function fb() { fa(); echo "in Function B\n"; } ?>

C.php:-------

 <?php include 'a.php'; ?>

 <?php include 'b.php'; ?>

 <?php fa(); fb(); ?>

答案:存在問題,a.php 被包含了兩次,致使fa()函數重複定義,使用include_once 避免重複包含。(此處應首先想到考點可能就是include和include_once)(總結:函數不能重複定義)

 

1.11 echo(),print(),print_r()的區別?(新浪)

echo 是一個語言結構,輸出一個或多個字符串;

print() 實際上不是一個函數(它是一個語言結構),所以你能夠沒必要使用圓括號來括起它的參數列表,它輸出一個字符串;

print_r () 是一個函數,打印變量的信息,基本類型,數組,對象。

 

注意 ,是echo自己支持的一種語法,而. 則是字符串鏈接操做符,使用 , 的效率要高一些。

 

相關題目:What is the difference between "print()" and "echo( )"? (騰訊)

answer: print is a function,echo is a language construct

 

1.12 用PHP打印出前一天的時間格式是2006-5-10 22:21:21。

 

 

相關題目:求兩個日期的差數,例如2009-3-1 ~ 2009-4-4 的日期差數

(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24

1.13 不使用第三個變量交換兩個變量的值

方案一:

 

方案二:

對字符進行編碼,好比base64_encode,要保證編碼是可逆的

 

1.14 請說明php中傳值與傳引用的區別。何時傳值何時傳引用?

變量默認老是傳值賦值。那也就是說,當將一個表達式的值賦予一個變量時,整個原始表達式的值被賦值到目標變量。這意味着,例如,當一個變量的值賦予另一個變量時,改變其中一個變量的值,將不會影響到另一個變量。

PHP 也提供了另一種方式給變量賦值:引用賦值。這意味着新的變量簡單引用(換言之,「成爲其別名」 或者 「指向」)了原始變量。改動新的變量將影響到原始變量,反之亦然。使用引用賦值,簡單地將一個 & 符號加到將要賦值的變量前(源變量)。

對象默認是傳引用。

須要操做原始數據,則引用,不能影響原始數據,則值傳遞。

 

相關題目1:What would the following code print to the browser? Why?

 

輸出 10 (調用函數的題必定要考慮是否有返回值)

相關題目2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo

reference 傳送的是變量的地址而非它的值,因此在函數中改變一個變量的值時,整個應用都見到這個變量的新值。

一個regular variable傳送給函數的是它的值,當函數改變這個變量的值時,只有這個函數才見到新值,應用的其餘部分仍然見到舊值。

 

1.15 將1234567890轉換成1,234,567,890 每3位用逗號隔開的形式。(百度)

 

 

 

相關題目1:如何實現字符串翻轉?

strrev(),不過這種方法都不能解決中文字符串翻轉的問題,會出錯的。

 

 

 

相關題目2:假設如今有一個字符串www.baidu.com如何使用PHP對它進行操做使字符串以moc.udiab.輸出? (億郵)

 

1.16 用PHP寫出顯示客戶端IP與服務器IP的代碼。

客戶端IP:$_SERVER["REMOTE_ADDR"]

服務器端IP:$_SERVER["SERVER_ADDR"]

1.17 簡述如何獲得當前執行腳本路徑,包括所獲得參數。

獲取當前執行腳本路徑使用$_SERVER["SCRIPT_FILENAME"] 或 __FILE__

獲取參數,使用$_SERVER["QUERY_STRING"]

__FILE__ :被稱爲PHP魔術常量,返回當前執行PHP腳本的完整路徑和文件名,包含一個絕對路徑

 

1.18  What is the difference between foo() & @foo()?  (Yahoo)

foo() 會執行這個函式,任何解譯錯誤、語法錯誤、執行錯誤都會在頁面上顯示出來。@foo() 在執行這個函式時,會隱藏全部上述的錯誤訊息。

不少應用程序都使用 @mysql_connect() 和 @mysql_query 來隱藏 mysql 的錯誤信息,這是不對的,由於錯誤不應被隱藏,你必須妥善處理它們,可能的話解決它們。

1.19 下面哪一個選項沒有將 john 添加到users 數組中? ( 百度 )

A. $users[ ] = "john";

B. array_add($users, "john");    //PHP中沒有array_add這個函數

C. array_push($users, "john");

D. $users ||= "john" ;

答案:BD

 

 

1.20 檢測一個變量是否有設置的函數是什麼?是否爲空的函數是什麼?

isset 檢測一個變量是否設置

empty 檢測是否爲空

注意兩者的區別,若是 變量是非空或非零的值,則 empty() 返回 FALSE。換句話說,""0"0"NULLFALSEarray() 以及沒有任何屬性的對象都將被認爲是空的。

1.21 在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預約義變量______中;而連接到當前頁面的的前一頁面URL記錄在預約義變量______中。

當前腳本名稱:$_SERVER["PHP_SELF"]  或者 $_SERVER["SCRIPT_NAME"];

連接到當前頁面的前一頁面的 URL 地址:$_SERVER["HTTP_REFERER"]。

 

1.22 sort()、assort()、和 ksort() 有什麼分別?它們分別在什麼狀況下使用?

sort(),根據數組中元素的值,以英文字母順序排序,索引鍵會由 0 到 n-1 從新編號。主要是當數組索引鍵的值可有可無時用來把數組排序。
       assort(),PHP 沒有 assort() 函式,因此多是 asort() 的筆誤。
       asort(),對數組進行排序,數組的索引保持和單元的關聯。主要用於對那些單元順序很重要的結合數組進行排序。

ksort(),根據數組中索引鍵的值,以英文字母順序排序,特別適合用於但願把索引鍵排序的關聯數組。

 

1.23 在PHP中error_reporting這個函數有什麼做用?

打開或者關閉錯誤報告,如:

error_reporting(0);

error_reporting(E_ALL & ~ E_NOTICE);

error_reporting(E_ALL);

 

相關題目:error_reporting(2047) 什麼做用?(新浪)

2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024

其中,1對應E_ERROR,2對應E_WARNING,4對應E_PARSE,8對應E_NOTICE,16對應E_CORE_ERROR,32對應E_CORE_WARNING,64對應E_COMPILE_ERROR, 128對應E_COMPILE_WARNING,256對應E_USER_ERROR,512對應E_USER_WARNING,1024對應E_USER_NOTICE。error_reporting(2047)意味着上述錯誤都會顯示出來。

 

1.24 寫出如下程序的輸出結果 (CBSI)

 

 

hotdogok

相關題目:什麼是可變變量?

獲取一個普通變量的值做爲這個可變變量的變量名。

1.25 常量如何定義? 如何檢測一個常量是否被定義?

定義常量:define() ,

檢測常量是否認義:defined(),如

define("TEST","happy new year!");

if( defined("TEST")){

       echo TEST;

}

 

1.26 執行程序段<?php echo 8%(-3) ?>將輸出

%爲取模運算,輸出0

$a % $b 其結果的正負取決於 $a 的符號。
       echo ((-8)%3)."<br />";   //輸出 -2

echo (8%(-3))."<br />";   //輸出 2

1.27 數組函數 arsort 的做用是____;語句 error_reporting(2047)的做用是____。

arsort:對數組進行逆向排序並保持索引關係

error_reporting(2047)的做用 report All errors and warnings,見21題中相關題目。

 

1.28 以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句____動態裝載PHP模塊,而後再用語句____使得Apache把全部擴展名爲php的文件都做爲PHP腳本處理。

LoadModule php5_module "c:/php/php5apache2.dll";

AddType application/x-httpd-php .php

1.29 一個函數的參數不能是對變量的引用,除非在php.ini中把____設爲on.

allow_call_time_pass_reference :是否啓用在函數調用時強制參數被按照引用傳遞,默認關閉。

 

1.30 在PHP中,heredoc是一種特殊的字符串,它的結束標誌必須____

頂格寫,而且不能包含任何其它字符除";",如:

$str = <<<SHOW

            my name is Jiang Qihui!

     SHOW;

1.31 echo count("abc"); 輸出什麼?(新浪?)

輸出1

count :計算數組中的單元數目或對象中的屬性個數,一般是一個 array,任何其它類型都只有一個單元。

對於對象,若是安裝了 SPL,能夠經過實現 Countable 接口來調用 count()。該接口只有一個方法 count(),此方法返回 count() 函數的返回值。

若是 var 不是數組類型或者實現了 Countable 接口的對象,將返回 1,有一個例外,若是 var 是 NULL 則結果是 0。

 

相關題目:What will be the output of the following PHP code:  (騰訊)
<?php

echo count(strlen("http://php.net"));

?>

answer: 1

 

1.32 寫個函數用來對二維數組排序(新浪)

 

1.33 寫5個不一樣的本身的函數,來獲取一個全路徑的文件的擴展名,容許封裝php庫中已有的函數。(新浪)

 

1.34 PHP的意思,它能幹些什麼?

PHP( Hypertext Preprocessor,超文本預處理器的字母縮寫)是一種被普遍應用的開放源代碼的多用途腳本語言,它可嵌入到 HTML中,尤爲適合 web 開發。

PHP 能作任何事。PHP 主要是用於服務端的腳本程序,所以能夠用 PHP 來完成任何其它的 CGI 程序可以完成的工做,例如收集表單數據,生成動態網頁,或者發送/接收 Cookies。但 PHP 的功能遠不侷限於此。

PHP 腳本主要用於如下三個領域:

1)        服務端腳本。這是 PHP 最傳統,也是最主要的目標領域。

2)        命令行腳本。能夠編寫一段 PHP 腳本,而且不須要任何服務器或者瀏覽器來運行它。經過這種方式,僅僅只須要 PHP 解析器來執行。

3)        編寫桌面應用程序。

 

1.35 Name a few ways to output (print) a block of HTML code in PHP?(Yahoo)

你可使用 PHP 中任何一種輸出語句,包括echo、print、printf,大部分人都使用以下例的 echo:

 echo "My string $variable";

你也可使用這種方法:

 echo <<<END

This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of its own, and can't contain any extra white space.

END;

1.36 寫出如下程序的輸出結果 (CBSI)

 

輸出結果爲 4

1.37 $arr = array('james', 'tom', 'symfony'); 請打印出第一個元素的值,並請將數組的值用','號分隔併合併成字串輸出。

打印第一個元素:echo $arr[0];

以’,’合併成字符串:echo implode(',',$arr);

1.38 $a = 'abcdef'; 請取出$a的值並打印出第一個字母

echo $a{0} 或 echo $a[0]

相關題目:$string="abcdefg",那麼$string{4}的值是? (卓望)

值是 e

1.39 What does === do? What's an example of something that will give true for '==', but not '==='? (Yahoo)

=== 表示全等,是指的兩個變量的值和類型都相等。

如 if (strpos('abc','a') == false) 和 if (strpos('abc','a') === false)

1.40 Which of the following snippets prints a representation of 42 with two decimal places? (騰訊)

A. printf("%.2d\n", 42);
B. printf("%1.2f\n", 42);
C. printf("%1.2u\n", 42);

answer:B

1.41 Given $text = 'Content-Type:text/xml'; Which of the following prints 'text/xml'? (騰訊)

A. print substr($text, strchr($text, ':'));
B. print substr($text, strchr($text, ':') + 1);
C. print substr($text, strpos($text, ':') + 1);
D. print substr($text, strpos($text, ':') + 2);
E. print substr($text, 0, strchr($text, ':'));

answer:C

 

1.42 What is the value of $a?  (騰訊)

A. True
B. False

answer:A

1.43 What is the value of $result in the following PHP code? (騰訊)

answer: NULL

1.44 What is the best all-purpose way of comparing two strings? (騰訊)
A. Using the strpos function
B. Using the == operator
C. Using strcasecmp()
D. Using strcmp()

answer:C

1.45 運行如下程序,$a的值是多少?

 

hello

1.46 運行如下程序,$b的值是多少?

 

1

1.47 運行如下程序,$x的值是多少?

 

ture

1.48 將字符09轉換成十進制數字。(百度)

使用intval函數,echo intval("09"),或者使用int強制類型轉換。

1.49 請寫一個函數,實現如下功能: 字符串"open_door" 轉換成 "OpenDoor"、"make_by_id" 轉換成 "MakeById"。

 

 

1.50 要求寫一段程序,實現如下數組$arr1轉換成數組$arr2:

 

 

參考代碼:

 

1.51 如何將一個數組元素的排列順序反轉過來(例如如下代碼反轉之後的順序是: array ('d', 'c', 'b', 'a'))? (選擇2個答案)

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

?>

A. array_flip()

B. array_reverse()

C. sort()

D. rsort()

答案:BD

 

1.52 $val = max('string', array(2, 5, 7), 42);   $val值爲

array(2,5,7)

max用法示例以下:

 

 

1.53 定義常量MYPI=3.14_________________________;
    define("MYPI",3.14);

 

1.54 簡述單引號和雙引號的用法

雙引號串中的內容能夠被解釋並且替換,而單引號串中的內容總被認爲是普通字符。

1.55 Switch完整語法和注意事項

使用 Switch 語句能夠避免冗長的 if..elseif..else 代碼塊,case只能處理整數,或者能像整數同樣運算的類型,好比char,使用時case 後用'',注意 break不能少,default是爲了處理一些以前沒有包含到的狀況,這樣更爲安全。

1.56 用PHP編寫代碼在頁面輸出當前的北京時間,格式爲「2007-01-18 09:22:03」
    date_default_timezone_set('PRC');
    echo date("Y-m-d H:i:s",time());

1.57 簡述GBK、GB23十二、BIG5 、GB18030

GB2312支持的漢字較少,GBK是相比GB2312漢字更爲豐富,包括所有中日韓漢字,GB18030相比GBK增長了一些少數名族漢字漢字庫更爲多樣,可是常人很難用到,通常簡體中文使用GBK而繁體中文使用BIG5。

1.58 計算某段字符串中某個字符出現的次數(例如: gdfgfdgd59gmkblg中g的次數)
    $text = 'gdfgfdgd59gmkblg';

echo substr_count ( $text,'g');

1.59 如下語句可能存在錯誤,若是存在錯誤請指出什麼錯誤(每一個語句單獨考慮)
    print_r $val = 333;   // error,print_r是一個函數,需加上括號,若是是print則能夠

      print_r($val = 333);  // 正確

      $a += ($b = 4) + 5;   // notice,$a未定義,但能夠正確運行

$foo[bar] = 'enemy';  // notice,最好bar加上引號

function x($a = "1", $b){}  // 無,但給參數默認值應儘可能從右向左

 

1.60 寫出以下程序的輸出結果(小米)

 

相等

 

相等

 

不相等

1.61 寫出以下程序的輸出結果

 

true  true  true  true  true  false  true  false

1.62 寫出以下程序的輸出結果

 

aaaaaa

1.63 寫出以下程序的輸出結果

 

5 0 1 

在PHP中,做用域是不重疊的,函數以外的是全局變量,函數內部定義的則是局部變量,兩者是兩個不一樣的變量,除非在函數內使用global顯式聲明使用全局變量或直接用$_GLOBALS來引用。

 

1.64 寫出以下程序的輸出結果

 

5 2

 

1.65 寫出以下程序的輸出結果

 

1 2

 

1.66 $arr = array('james', 'tom', 'symfony'); 請將’jack’添加到$arr數組的開頭,並把jack打印出來。

array_unshift($arr,’jack’);

echo $arr[0];

1.67 $arr = array('james', 'tom', 'symfony');請將$arr數組的值用’,’分割併合併成字符串輸出?

echo implode(‘,’,$arr);

1.68 $str = ‘jack,james,tom,symfony’; 請將$str用’,’分割,並把分割後的值放到$arr數組中?

$arr = explode(‘,’,$str);

 

1.69 $arr = array(3,7,2,1,’d’,’abc’);請將$arr按照從大到小的順序排序,並保持其鍵值不變?

arsort($arr);

print_r($arr);

 

1.70 $mail = 「gaofei@163.com」;     請將此郵箱的域(163.com)取出來並打印,看最多能寫出幾種方法?

echo strstr($mail,'163');

echo substr($mail,7);

echo substr($mail, strpos($mail, '@')+1);

$arr = explode("@",$mail); echo $arr[1];

1.71 PHP中的註釋的寫法,要列出三種?

// 註釋內容  C風格的單行註釋

# 註釋內容 unix風格的單行註釋

/* 註釋內容 */  C風格的多行註釋

 

1.72 如何在一個php函數中使用具備全局屬性的變量,說出兩種方式?

global $a 或者 $GLOBALS['a']

 

1.73 若$aa='aa';則print('aa is \'aa\''."<br/>")會輸出什麼?

aa is 'aa'

 

1.74 如何把$a = ‘123’轉化成123,列出兩種方式?

 

相關題目:字符串怎麼轉成整數,有幾種方法?怎麼實現?

1)        強制類型轉換: (整型)字符串變量名;

2)        直接轉換:settype(字符串變量,整型);

3)        intval(字符串變量);

 

1.75 說說break和continue能夠用在哪些語句裏,而且列出兩者的區別?

break 和 continue 能夠用在 switch 語句中,或是循環結構中

它們的區別主要是體如今循環語句中,break 表示 跳出整個循環,再也不執行,循環將終止,而continue則表示跳出本次循環,繼續下一次的循環,不會終止循環。

1.76 函數中的默認參數位置如何放置?

當使用默認參數時,任何默認參數必須放在任何非默認參數的右側;不然,函數將不會按照預期的狀況工做。

1.77 如何往一個數組後面添加一個值?列出兩種方式?

$arr[ ] = $value;

array_push($arr, $value);

1.78 說出數組涉及到的經常使用函數。

array --  聲明一個數組

count -- 計算數組中的單元數目或對象中的屬性個數

foreach -- 遍歷數組

list -- 遍歷數組

explode -- 將字符串轉成數組

implode -- 將數組轉成一個新字符串

array_merge -- 合併一個或多個數組

is_array -- 檢查是不是數組       

print_r -- 輸出數組

sort -- 數組排序

array_keys -- 返回數組中全部的鍵名

array_values -- 返回數組中全部的值

key -- 從關聯數組中取得鍵名

 

1.79 字符串的經常使用函數?

trim()  -- 去除字符串首尾處的空白字符(或者其餘字符)

strlen()  -- 字符串長度

substr()  -- 截取字符串

str_replace()  -- 替換字符串函數

substr_replace()  -- 對指定字符串中的部分字符串進行替換

strstr()  -- 檢索字符串函數

explode()  -- 分割字符串函數

implode()  -- 將數組合併成字符串

str_repeat() -- 重複一個字符串

addslashes(); -- 轉義字符串

htmlspecialchars() -- THML實體轉義

 

1.80 如下代碼的執行後是,$result值爲:(奇矩互動)

 

A. a

B. false

C. true

D. b

E. c

答案:B

mixed array_rand( array $input [, int $num_req ] )

從數組中隨機取出一個或多個單元,它接受 input 做爲輸入數組和一個可選的參數 num_req,指明瞭你想取出多少個單元 - 若是沒有指定,默認爲 1。

若是你只取出一個,array_rand() 返回一個隨機單元的鍵名,不然就返回一個包含隨機鍵名的數組。

因此使用array_rand函數,返回結果要麼是鍵名,有麼是數組,在這個例子中,數組是索引數組,因此返回的是整型。

 

1.81 如下代碼的執行後是,$result值爲: (奇矩互動)

 

A. 1

B. 2

C. 3

D. 4

E. 5

答案:B

1.82 php函數名是否區分大小寫? (奇矩互動)

A. 不區分

B. 區分

答案:A

函數名是大小寫無關的,不過在調用函數的時候,一般使用其在定義時相同的形式。

1.83 下代碼的執行後是,$result值爲:(奇矩互動)

 

A. null

B. true

C. false

D. 1

答案:C

is_null -- 檢測變量是否爲 NULL,若是變量是 null 則返回 TRUE,不然返回 FALSE。

在下列狀況下一個變量被認爲是 NULL:

1)        被賦值爲 NULL

2)        還沒有被賦值

3)        被unset()

 

1.84 翻轉字符串中的單詞,字符串僅包含大小寫字母和空格,單詞間使用空格分隔。如:輸入"This is PHP",輸出"PHP is This"(非必要請不要使用PHP自帶函數) (小米)

 

1.85 請列舉出你所知道的全局環境變量 (億郵)

$_ENV;

$_SERVER;

$_REQUEST;

$_FILES;

$_SESSION;

$_COOKIE;

$_GET;

$_POST;

$GLOBALS;

1.86 設有這樣一個數組$a=array(array(id=>0),array(id=>1),array(id=>2)......)id=>0-10000,請問你如何使用PHP判斷id=>500是否在這個數組內? (億郵)

使用in_array 函數,代碼以下:

 

1.87 在PHP中兩個數組怎麼鏈接合併在一塊兒 (億郵)

使用array_merge()函數

1.88 運行以上代碼後$a $b $c分別是? (卓望)

 

$a 爲false,$b = $c = 0
 

1.89 寫出php的public、protected、private三種訪問控制模式的區別(新浪網技術部)

public:公有,任何地方均可以訪問

protected:繼承,只能在本類或子類中訪問,在其它地方不容許訪問

private:私有,只能在本類中訪問,在其餘地方不容許訪問

相關題目:請寫出PHP5權限控制修飾符

private  protected   public

1.90 設計模式考察:請用單態設計模式方法設計類知足以下需求

請用PHP5代碼編寫類實如今每次對數據庫鏈接的訪問中都只能得到惟一的一個數據庫鏈接,具體鏈接數據庫的詳細代碼忽略,請寫出主要邏輯代碼(新浪網技術部)

 

1.91 寫出下列程序的輸出結果(新浪網技術部)

 

輸出結果 10

1.92 PHP5中魔術方法函數有哪幾個,請舉例說明各自的用法 (騰訊PHP工程師筆試題)

__sleep    serialize以前被調用

__wakeup  unserialize時被調用

__toString 打印一個對象時被調用

__set_state 調用var_export時被調用,用__set_state的返回值做爲var_export的返回值

__construct 構造函數,實例化對象時被調用  

__destruct  析構函數,當對象銷燬時被調用

__call 對象調用某個方法,若存在該方法,則直接調用,若不存在,則調用__call 函數

__get 讀取一個對象屬性時,若屬性存在,則直接返回,若不存在,則調用__get 函數

__set 設置一個對象的屬性時,若屬性存在,則直接賦值,若不存在,則調用__set函數

__isset 檢測一個對象的屬性是否存在時被調用

__unset unset一個對象的屬性時被調用

__clone 克隆對象時被調用

__autoload 實例化一個對象時,若是對應的類不存在,則該方法被調用

相關題目:請寫出php5的構造函數和析構函數

構造函數:__construct

      析構函數:__destruct

1.93 如何使用下面的類,並解釋下面什麼意思?

 

雙重md5加密

$testObject = new test();

$encryption = $testObject->Get_test("itcast");

1.94 How would you declare a class named 「myclass」 with no methods or properties? (Yahoo)

class myclass{};

相關題目:如何聲明一個名爲「myclass」的沒有方法和屬性的類?

 

1.95 How would you create an object, which is an instance of 「myclass」? (Yahoo)

$obj= new myclass();

相關題目:如何實例化一個名爲「myclass」的對象?

 

1.96 How do you access and set properties of a class from within the class?(Yahoo)

使用語句:$this->propertyName,例如:

 

1.97 The code below ___________ because ____________.   (騰訊)


A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and multiple PHP blocks.

答案: B

1.98 類的屬性能夠序列化後保存到 session 中,從而之後能夠恢復整個類,這要用到的函數是____。

serialize() 和 unserialize()

 

1.99 在PHP中,若是派生類與父類有相同名字的函數,則派生類的函數會替換父類的函數,程序結果爲


A. tmp

B. Picachu

C. disName

D. Doraemon

E. 無輸出

答案:D

1.100   接口和抽象類的區別是什麼?

抽象類是一種不能被實例化的類,只能做爲其餘類的父類來使用。抽象類是經過關鍵字 abstract 來聲明的。

抽象類與普通類類似,都包含成員變量和成員方法,二者的區別在於,抽象類中至少要包含一個抽象方法,

抽象方法沒有方法體,該方法天生就是要被子類重寫的。

抽象方法的格式爲:abstract function abstractMethod();

接口是經過interface關鍵字來聲明的,接口中的成員常量和方法都是public的,方法能夠不寫關鍵字public,

接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。

抽象類和接口實現的功能十分類似,最大的不一樣是接口能實現多繼承。在應用中選擇抽象類仍是接口要看具體實現。

子類繼承抽象類使用extends,子類實現接口使用implements。

1.101   類中如何定義常量、如何類中調用常量、如何在類外調用常量。

類中的常量也就是成員常量,常量就是不會改變的量,是一個恆值。定義常量使用關鍵字const,例如:const PI = 3.1415326;

不管是類內仍是類外,常量的訪問和變量是不同的,常量不須要實例化對象,

訪問常量的格式都是類名加做用域操做符號(雙冒號)來調用,即:類名:: 類常量名。

 

1.102   autoload()函數是如何運做的?

使用這個魔術函數的基本條件是類文件的文件名要和類的名字保持一致。

當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()函數。

這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。

 

1.103   哪一種OOP設置模式能讓類在整個腳本里只實例化一次?(奇矩互動)

A. MVC

B. 代理模式

C. 狀態模式

D. 抽象工廠模式

E. 單件模式

答案:E

1.104   藉助繼承,咱們能夠建立其餘類的派生類。在PHP中,子類最多能夠繼承幾個父類?(奇矩互動)

A. 1個

B. 2個

C. 取決於系統資源

D. 3個

E. 想要幾個有幾個

答案:A

 

1.105   執行如下代碼,輸出結果是(奇矩互動)

 

A. a

B. 一個錯誤警告

C. 一個致命性的報錯

答案:C  由於類a是抽象類,不能被實例化

1.106   執行如下代碼,輸出結果是

 

A. echo class a something echo class b something

B. echo class b something echo class a something

C. echo class a something

D. echo class b something

答案:D

類b繼承自類a,兩個類都定義了構造函數,因爲兩者名字相同,因此子類中的構造函數覆蓋了父類的構造函數,要想子類對象實例化時也執行父類的構造函數,須要在子類構造函數中使用parent::__construct()來顯示調用父類構造函數。

 

1.107   請定義一個名爲MyClass的類,這個類只有一個靜態方法justDoIt。(卓望)

 

1.108   只有該類才能訪問該類的私有變量嗎?(卓望)

是的

1.109   寫出你知道的幾種設計模式,並用php代碼實現其中一種。(卓望)

單例模式,工廠模式

單例模式 實現代碼 見 第二題

 

1.110   寫出一個能建立多級目錄的PHP函數(新浪網技術部)

 

1.111   寫出smarty模板的特色(新浪網技術部)

速度快,編譯型,緩存技術,插件機制,強大的表現邏輯

1.112   打開php.ini中的safe_mode,會影響哪些函數?至少說出6個。(新浪)

safe_mode,php安全模式,它提供一個基本安全的共享環境,在一個有多個用戶帳戶存在的php開發的web服務器上。當安全模式打開的時候,一些函數將被徹底的禁止,而另外一些函數的功能將會受到限制,如:chdir, move_uploaded_file,chgrp,parse_ini_file, chown, rmdir, copy, rename, fopen, require,mkdir, unlink等。

注意,在php5.3以上版本,safe_mode被棄用,在php5.4以上版本,則將此特性徹底去除了。

 

1.113   抓取遠程圖片到本地,你會用什麼函數?  (51.com筆試題)

1.114   file_get_contents 或者 curl PHP的垃圾收集機制是怎樣的(騰訊)

PHP 能夠自動進行內存管理,清除再也不須要的對象。PHP使用了引用計數(reference counting)這種單純的垃圾回收(garbage collection)機制。每一個對象都內含一個引用計數器,每一個reference鏈接到對象,計數器加1。當reference離開生存空間或被設爲 NULL,計數器減1。當某個對象的引用計數器爲零時,PHP知道你將再也不須要使用這個對象,釋放其所佔的內存空間。

1.115   請寫一段PHP代碼,確保多個進程同時寫入同一個文件成功(騰訊)

核心思路:加鎖

 

 

1.116   寫一個函數,儘量高效的,從一個標準 url 裏取出文件的擴展名,例如: http://www.sina.com.cn/abc/de/fg.php?id=1 須要取出 php 或 .php  (新浪)

參考方案1:

 

參考方案2:

 

相關題目:使用五種以上方式獲取一個文件的擴展名,要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必須使用PHP自帶的處理函數進行處理,方法不能明顯重複,能夠封裝成函數,好比 get_ext1($file_name), get_ext2($file_name)

 

1.117   寫一個函數,可以遍歷一個文件夾下的全部文件和子文件夾。(新浪)

 

1.118   簡述論壇中無限分類的實現原理。(新浪)

建立類別表以下:

CREATE TABLE category(

              cat_id smallint unsigned not null auto_increment primary key comment '類別ID',

              cat_name VARCHAR(30) NOT NULL DEFAULT '' COMMENT '類別名稱',

              parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '類別父ID'

)engine=MyISAM charset=utf8;

 

編寫一個函數,遞歸遍歷,實現無限分類

 

1.119   寫一個函數,算出兩個文件的相對路徑,如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php';計算出 $b 相對於 $a 的相對路徑應該是 ../../c/d (新浪)

 

1.120   mysql_fetch_row() 和 mysql_fetch_array() 有什麼分別?

 mysql_fetch_row() 把數據庫的一列儲存在一個以零爲基數的數組中,第一欄在數組的索引 0,第二欄在索引 1,依此類推。

mysql_fetch_assoc() 把數據庫的一列儲存在一個關聯數組中,數組的索引就是字段名稱,例如個人數據庫查詢送回「first_name」、「last_name」、 「email」三個字段,數組的索引即是「first_name」、「last_name」和「email」。mysql_fetch_array() 能夠同時送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。

 

1.121   有一個網頁地址, 好比PHP開發資源網主頁: http://www.phpres.com/index.html,如何獲得它的內容?

方法1(對於PHP5及更高版本):

$readcontents = fopen("http://www.phpres.com/index.html", "rb");

$contents = stream_get_contents($readcontents);

fclose($readcontents);

echo $contents;

方法2:

echo file_get_contents("http://www.phpres.com/index.html");

1.122   談談對mvc的認識

由模型(model),視圖(view),控制器(controller)完成的應用程序,model層負責提供數據,和數據庫有關的操做都交給模型層來處理,view層則提供交互的界面,並輸出數據,而controller層則負責接收請求,並分發給相應的model來處理,而後調用view層來顯示。

1.123   What does the GD library do?  (Yahoo)

GD庫提供了一系列用來處理圖片的API,使用GD庫能夠處理圖片,或者生成圖片。 在網站上GD庫一般用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。自從 PHP 4.3.0 版本後 GD 便內建在 PHP 系統中。

 

1.124   What function can you use to open a file for reading and writing? (Yahoo)

A. fget();

B. file_open();

C. fopen();

D. open_file();

答案:C

fget() 這不是一個 PHP 函數,會引致執行錯誤。

file_open() 這不是一個 PHP 函數,會引致執行錯誤。

fopen()這是正確答案,fopen() 能夠用來開啓檔案以便讀寫。

open_file() 這不是一個 PHP 函數,會引致執行錯誤。

1.125   Smarty的原理

smarty是一個模板引擎,使用smarty主要是爲了實現邏輯和外在內容的分離,若是不使用模板的話,一般的作法就是php代碼和html代碼混編。使用了模板以後,則能夠將業務邏輯都放到php文件中,而負責顯示內容的模板則放到html文件中。Smarty在執行display方法的時候,讀取模板文件,並進行數據替換,生成編譯文件,以後每次訪問都會直接訪問編譯文件,讀取編譯文件省去了讀取模板文件,和字符串替換的時間,因此能夠更快,編譯文件裏時間戳記錄模板文件修改時間,若是模板被修改過就能夠檢測到,而後從新編譯(編譯是把靜態內容保存起來,動態內容根據傳入的參數不一樣而不一樣)。 若是啓用了緩存,則會根據編譯文件生成緩存文件,在訪問的時候若是有緩存文件而且緩存文件沒有過時,則直接訪問緩存文件。

 

相關題目1:可以使HTML和PHP分離開使用的模板

smarty,phplib等

相關題目2:您是否用過模板引擎? 若是有您用的模板引擎的名字是?

Smarty

1.126   PHP如何實現頁面跳轉

方法一:php函數跳轉,缺點,header頭以前不能有輸出,跳轉後的程序繼續執行,可用exit中斷執行後面的程序。

header("Location: 網址");    //直接跳轉

header("refresh:3;url=http://axgle.za.net");   //三秒後跳轉

方法二:利用meta

echo "<meta http-equiv=refresh content='0; url=網址'>";

1.127   PHP能夠和sql server/oracle等數據庫鏈接嗎?

能夠

1.128   使用哪些工具進行版本控制?

SVN 或者 CVS

相關題目:您是否用過版本控制軟件? 若是有您用的版本控制軟件的名字是?

TortoiseSVN-1.2.6

1.129   寫出一個正則表達式,過慮網頁上的全部JS/VBS腳本(即把script標記及其內容都去掉):

過濾javascript腳本參考:

 

 

1.130   Given a line of text $string, how would you write a regular expression to strip all the HTML tags from it?(Yahoo)

方案一,使用PHP 內建函數 strip_tags() 除去 HTML 標籤

方案二,自定義函數,以下:

 

1.131   請寫一個函數驗證電子郵件的格式是否正確(要求使用正則)(新浪)

preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/', $email);

 

相關題目:請用正則表達式寫一個函數,驗證電子郵件的格式是否正確。 (鑫衆人云)

 

1.132   請對POSIX風格和兼容Perl風格兩種正則表達式的主要函數進行類比說明 (騰訊)

主要區別有如下三種:

1)        preg_replace()裏面的正則能夠寫成型如:"/.xxx/"而ereg_replace()裏面的正則需寫成型如"xxx"

2)        preg_replace()能操做數組,而ereg_replace()不能夠

3)        在逆向引用用preg_replace()可以使用0-99個,而ereg_replace()最多爲9個

使用 Perl 兼容正則表達式語法的 preg_match() 函數一般是比 ereg() 更快的替代方案。

 

1.133   請寫出並說明如何在命令行下運行PHP腳本(寫出兩種方式)同時向PHP腳本傳遞參數?(騰訊)

首先進入php安裝目錄

php -f d:/wamp/www/1.php     其中-f參數指定要執行的php文件

php -r phpinfo();              其中-r表示直接執行php代碼,無需寫開始結束標記

 

1.134   使用正則表達式提取一段標識語言(html或xml)代碼段中指定標籤的指定屬性值(需考慮屬性值對不規則的狀況,如大小寫不敏感,屬性名值與等號間有空格等)。此處假設需提取test標籤的attr屬性值,請自行構建包含該標籤的串 (騰訊)

編寫以下函數:

function getAttrValue($str, $tagName, $attrName){

       $pattern1 = "/<" . $tagName . "(\\s+\\w+\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)

                     (\\2))*\\s+" . $attrName . "\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\5)

                     (\\s+\\w+\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\9))*\\s*>/i";

       $arr = array();

       $re = preg_match($pattern1, $str, $arr);

       if($re){

              echo "<br />\$arr[6]={$arr[6]}";

       }

       else{

              echo "<br />沒找到。";

       }

}

 

測試:

$str1 = "<test attr='ddd'>";

getAttrValue($str1,"test","attr");   //找test標籤中attr屬性的值,結果爲ddd

$str2 = "<test2 attr='ddd' attr2='ddd2' t1=\"t1 value\" t2 = 't2 value'>";

getAttrValue($str2,"test2","t1");   //找test2標籤中t1屬性的值,結果爲t1 value

 

1.135   What does the following code do? Explain what's going on there. $date='08/26/2003'; print ereg_replace(「([0-9]+)/([0-9]+)/([0-9]+)」,\\2/\\1/\\3,$date); (Yahoo)

這是把一個日期從 MM/DD/YYYY 的格式轉爲 DD/MM/YYYY 格式。

輸出26/08/2003

 

1.136   What function would you use to redirect the browser to a new page?(Yahoo)
A. redir()
B. header()
C. location()
D. redirect()

答案:B

redir() 這不是一個 PHP 函數,會引致執行錯誤。

header() 這個是正確答案,header()函數發送頭信息,能夠用來使瀏覽器轉向到另外一個頁面,例如:header("Location: http://www.search-this.com/")。

location() 這不是一個 PHP 函數,會引致執行錯誤。

redirect() 這不是一個 PHP 函數,會引致執行錯誤。

1.137   When turned on ____________ will _________ your script with different variables from HTML forms and cookies. (騰訊)

A. show_errors, enable

B. show_errors, show

C. register_globals, enhance

D. register_globals, inject

答案:C

1.138   一個函數的參數不能是對變量的引用,除非在php.ini中把____設爲on。

allow_call_time_pass_reference

是否啓用在函數調用時強制參數被按照引用傳遞

 

1.139   在 HTML 語言中,頁面頭部的 meta 標記能夠用來輸出文件的編碼格式,如下是一個標準的 meta 語句<META http-equiv='Content-Type' content='text/html; charset=gbk'>,請使用 PHP 語言寫一個函數,把一個標準 HTML 頁面中的相似 meta 標記中的 charset 部分值改成 big5。(新浪)

請注意:

4)        須要處理完整的 html 頁面,即不光此 meta 語句

(2) 忽略大小寫

11. ' 和 " 在此處是能夠互換的

12. 'Content-Type' 兩側的引號是能夠忽略的,但 'text/html; charset=gbk' 兩側的不行

13. 注意處理多餘空格

編寫正則表達式以下:

$reg1 = "/(<meta\\s*http-equiv\\s*=\\s*(['\"]?)Content-Type(\\2)\\s*content\\s*=\\s*(['\"])

text\/html;charset=)(UTF-8)(\\4)(\\s*\/?>)/i";

 

1.140   PHP中如何判斷一個字符串是不是合法的日期模式:2007-03-13 13:13:13 。要求代碼不超過5行。 (酷訊)

 

1.141   PHP中,如何得到一個數組的鍵值?(酷訊 )

使用 key() 能夠得到數組中當前元素的鍵名,使用current()則能夠返回當前元素的值。使用array_keys()則能夠獲得數組中全部的鍵名。使用foreach結構foreach($arr as $key=>$value) 能夠經過$key 和 $value分別獲取鍵名和值。

1.142   若是模板是用smarty模板。怎樣用section語句來顯示一個名爲$data的組。好比:

$data = array(

       0 => array('id' => 8, 'name' => 'name1'),

       1 => array('id' => 10, 'name' => 'name2'),

       2 => array('id' => 15, 'name' => 'name3')

);

寫出在模板頁的代碼?若用foreach語句又要怎樣顯示呢?

用section語句:

<{section name=test loop=$data start=0 step=1}>

id:<{$data[test].id}><br />

name:<{$data[test].name}><br /><br />

<{sectionelse}>
       數組爲空

<{/section}>

 

用foreach語句:

<{foreach from=$data item=test}>

id:<{$test.id}><br />

name:<{$test.name}><br /><br />

<{foreachelse}>

數組爲空

<{/foreach}>

 

1.143   哪一個選項會匹配下邊的這個正則表達式? (/.*\*xyz\d/)

A. ******xyz       

B. *****_xyz1     

C. ******xyz2     

D. _*xyz
答案:C

 

1.144   如下哪一個錯誤沒法被標準的錯誤控制器獲取?

A. E_WARNING     

B. E_USER_ERROR  

C. E_PARSE      

D. E_NOTICE

答案:B

 

1.145   如下哪一種錯誤類型沒法被自定義的錯誤處理器捕捉到? (奇矩互動)

A. E_WARNING

B. E_USER_ERROR

C. E_PARSE

D. E_NOTICE

答案:C

1.146   (^\s*)|(\s*$)這個正則表達式做用是:__________;

匹配以0個或多個空白符開頭或者0個或多個空白符結尾的字符串

1.147   編寫函數取得上一月的最後一天

 

1.148   在不少時候,咱們能夠經過apache的主配置文件來設置對test目錄的訪問權限控制,如http://IP/test請問若是需設置test下的一個子目錄的訪問控制權限,是否能夠在主配置文件中修改,若是不能夠應如何解決。

能夠,還能夠在須要控制的子目錄下建立.htaccess文件,寫入訪問控制。

1.149   若是個人網站用的utf-8編碼,爲防止亂碼出現,都須要注意哪些地方?

從如下幾個方面考慮:

1)        數據庫中庫和表都用utf8編碼

2)        php鏈接mysql,指定數據庫編碼爲utf8 mysql_query(「set names utf8」);

3)        php文件指定頭部編碼爲utf-8 header(「content-type:text/html;charset=utf-8」);

4)        網站下全部文件的編碼爲utf8

5)        html文件指定編碼爲utf-8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

1.150   在url中用get傳值的時候,若中文出現亂碼,應該用哪一個函數對中文進行編碼?     urlencode()

1.151   寫出兩種對變量加密的函數?

md5($str);

sha1($str);

1.152   如何把2009-9-2 10:30:25變成unix時間戳?

 

1.153   如何把一個GB2312格式的字符串裝換成UTF-8格式?

 

 

1.154   若是須要原樣輸出用戶輸入的內容,在數據入庫前,要用哪一個函數處理?

htmlspecialchars 或者 htmlentities

1.155   寫出五種以上你使用過的PHP的擴展的名稱(提示:經常使用的PHP擴展)

mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO 等

1.156   瞭解MVC模式嗎?請寫出三種以上目前PHP流行的MVC框架名稱(不區分大小寫)

FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等

1.157   php中WEB上傳文件的原理是什麼,如何限制上傳文件的大小?

上傳文件的表單使用post方式,而且要在form中添加enctype='multipart/form-data'。

通常能夠加上隱藏域:<input type=hidden name='MAX_FILE_SIZE' value=dddddd>,位置在file域前面。value的值是上傳文件的客戶端字節限制。能夠避免用戶在花時間等待上傳大文件以後才發現文件過大上傳失敗的麻煩。

使用file文件域來選擇要上傳的文件,當點擊提交按鈕以後,文件會被上傳到服務器中的臨時目錄,在腳本運行結束時會被銷燬,因此應該在腳本結束以前,將其移動到服務器上的某個目錄下,能夠經過函數move_uploaded_file()來移動臨時文件,要獲取臨時文件的信息,使用$_FILES。

限制上傳文件大小的因素有:

1)        客戶端的隱藏域MAX_FILE_SIZE的數值(能夠被繞開)。

2)        服務器端的upload_max_filesize,post_max_size和memory_limit。這幾項不可以用腳原本設置。

3)        自定義文件大小限制邏輯。即便服務器的限制是能本身決定,也會有須要個別考慮的狀況。因此這個限制方式常常是必要的。

 

1.158   簡述UBB code 的實現原理。(YG)

UBB代碼是HTML的一個變種,經過程序自定義咱們的標籤,好比「[a]PHP中UBB的使用[/a]」這樣的標籤,其實質就是查找[a][/a]標籤,將其替換成<a></a>的標準html,說白了,就是將標準的html標記經過技術手段使其簡化,其輸出出來的結果仍是標準的 html。

明白了ubb的原理,那麼再製做一個簡單的 ubb 編輯器就不難了,和 fck 之類的編輯器比較起來,ubb 代碼最大的優勢就是代碼簡單,功能不多,簡單的ubb只須要一個文件,並且 ubb 標籤能夠本身來定義,更改起來很方便,在 php 中就是利用替換函數就能夠將 html 進行標籤化,輸出時進行標籤的轉化。

1.159   怎麼把文件保存到指定目錄?怎麼避免上傳文件重名問題?

能夠本身設置上傳文件的保存目錄,與文件名拼湊造成一個文件路徑,使用move_uploaded_file(),就能夠完成將文件保存到指定目錄。能夠經過上傳的文件名獲取到文件後綴,而後使用時間戳+隨機數+文件後綴的方式爲文件從新命名,這樣就避免了重名。

1.160   _____函數能返回腳本里的任意行中調用的函數的名稱。該函數同時還常常被用在調試

中,用來判斷錯誤是如何發生的。 (奇矩互動)

debug_print_backtrace()

1.161   在Smarty模板語法中怎麼能遍歷數組$a = array(array('id' => 0),array('id' =>

1),array('id' => 2),……) id=>0-10000 ,怎麼判斷當id=>500,讓輸出的值在HTML裏變爲紅色? (億郵)

設數組分配過來的數組名爲 $ids

{section name = temp loop = $ids}

{if $ids[temp].id == 500}

<span style = ‘color: #f00;’>{$ids[temp].id}</span>

{esle}

{$ids[temp].id}

{/if}

{/section}

1.162   在Smarty模板語法中如何獲取當前時間,而且使用Y-m-d H:i:s的格式輸出?(億郵)

使用{$smarty.now} 來獲取當前時間,獲得的是unix系統時間戳

使用變量調節器進行格式化,以下:

{$smarty.now | date_format : 「%Y-%m-%d %H:%M:%S」 }

1.163   在Smarty模板語法中如何獲取php的全局環境變量 (億郵)

$smarty.get.變量  #顯示經過get方式傳過來的指定變量的值

$smarty.post.變量  #顯示經過post方式傳過來的指定變量的值

$smarty.cookies.變量  #顯示經過cookie中指定變量的值

$smarty.server.SERVER_NAME  #顯示server變量值,$_SERVER系列變量

$smarty.env.PATH  #顯示系統環境變量值,$_ENV系列變量

$smarty.session.變量  #顯示session中指定變量的值

$smarty.request.變量  #顯示經過post、get、cookie中指定變量的值

1.164   在Smarty模板中如何用自定義函數 (億郵)

使用模板分隔符包含,傳遞參數則使用HTML屬性的方式,例如:

{html_image file="pumpkin.jpg"}

1.165   列舉出你所知道的php系統函數庫例如,數學函數庫 (億郵)

mysql,gd,pdo,XML,zip,filesystem,mail等

1.166   假如讓你來寫一個函數實現Utf-8轉gb2312,那麼函數的名稱應該怎麼命名?(億郵)

utf8_to_gb2312 或者 utf8togb2312

1.167   請描述以下URL重寫規則的用意。(卓望)

<IfModulemod_rewrite.c>

RewriteEngineon

RewriteCond%{REQUEST_FILENAME}!-f

RewriteCond%{REQUEST_FILENAME}!-d

RewriteBase/

RewriteRule./index.php[L]

</IfModule>

若是REQUEST_FILENAME文件存在,就直接訪問文件,不進行下面的rewrite規則,若是REQUEST_FILENAME目錄存在,就直接訪問目錄,不進行下面的rewrite規則,RewriteRule./index.php[L]的意思是把全部的請求都給index.php處理。

 

1.168   Warning:Cannot modify header information-headers already sent by (output started at

D:\src\init.php:7) in D:\src\init.php on line10一般什麼狀況下php會報該警告信息?(卓望)

通常是在header、set_cookie以及session_start函數前面有輸出(包括空格)的狀況下,會報該警告信息

1.169   禁用COOKIE 後 SEESION 還能用嗎? (51.com筆試題)

能夠,COOKIE和SESSION都是用來實現會話機制的,因爲http協議是無狀態的,因此要想跟蹤一個用戶在同一個網站之間不一樣頁面的 狀態,須要有這麼一個機制----會話機制。

COOKIE:將會話信息的保存到瀏覽器端。

SESSION:將會話信息保存到服務器端。

SESSION默認狀況下是基於COOKIE的,對於SESSION來講,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到cookie當中。

若是禁用了COOKIE,則基於COOKIE的SESSION很差使了,咱們可使用get,傳遞SID,或者直接開啓透明的SID(此時須要關閉基於cookie的SESSION配置項)。

相關題目:SESSIONCOOKIE的區別?

COOKIE保存在客戶端,而SESSION則保存服務器端。

從安全性的角度來說,SESSION的安全性要高。

從保存內容的類型的角度來說,COOKIE只保存字符串(及可以自動轉換成字符串),而session則能夠保存全部的數據類型。

從保存內容的大小的角度來說,COOKIE保存的內容是有限制的,比較小,而SESSION基本上沒有這個限制。

從性能的角度來說,用SESSION的話,對服務器的壓力會更大一些。

1.170   請使用socket相關函數(非curl)實現以下功能:構造一個post請求,發送到指定http server的指定端口的指定請求路徑(如http://www.example.com:8080/test)。請求中包含如下變量:

用戶名(username):溫柔一刀

密碼(pwd):&123=321&321=123&

我的簡介(intro):Hello world!

且該http server須要如下cookie來進行簡單的用戶動做跟蹤:

cur_query:you&me

last_tm:...(上次請求的unix時間戳,定爲當前請求時間前10分鐘)

cur_tm:...(當前請求的unix時間戳)

設置超時爲10秒,發出請求後,將http server的響應內容輸出 (騰訊)

參考代碼:

if($fp = fsockopen('localhost', '80')) {

    //鏈接成功

    $request_data = "POST /2.php HTTP/1.1" . "\r\n";  //請求行

    $request_data .= "Host: localhost" . "\r\n";  //host頭信息

    $request_data .= "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" . "\r\n";//host頭信息

    $request_content = "username=".urlencode('溫柔一刀')."&pwd=".urlencode('&123=321&321=123&')."&intro=".urlencode("Hello world!");

    $request_data .= "Content-Type: application/x-www-form-urlencoded" . "\r\n";

    $request_data .= "Content-Length: " . strlen($request_content) . "\r\n";

    $cur_query = urlencode("you&me");

       $last_tm = time()-10*60;

       $cur_tm = time();

       $request_data .= "Cookie:cur_query=$cur_query;last_tm=$last_tm;cur_tm=$cur_tm" . "\r\n";

    $request_data .= "\r\n"; //請求頭信息結束時的空行    

    //請求主體數據部分

    $request_data .= $request_content;

    //利用創建好的通道,將數據發送過去

    fwrite($fp, $request_data); //寫入數據(發送數據)

    //讀取數據

    while(!feof($fp)) { //判斷是否沒有到文件末尾

        $resp_data = fgets($fp);

        echo $resp_data . '<br>';

    }

}

 

1.171   在HTTP 1.0中,狀態碼401的含義是________;若是返回「找不到文件」的提示,則可用 header 函數,其語句爲__________;

未經受權:訪問因爲憑據無效被拒絕

header("HTTP/1.0 404 Not Found")

 

1.172   如何修改SESSION的生存時間?

要注意這裏的生存時間指的是什麼? 因爲session默認是基於cookie的,也就是說使用session會話技術,首先是將session數據保存到服務器端,其次會將sessionID 保存到瀏覽器端,保存在服務器端的session文件生命週期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor來決定,而保存在客戶端的sessionID由客戶端cookie來決定,默認其生存週期直到瀏覽器關閉,它也能夠經過php.ini中的設置session.cookie_lifetime 來控制,兩者共同來決定session 的生存時間,兩者中的其中任意一個失效了,就會形成session失效,要根據本身的需求來決定是要從哪方面來修改其生存時間。

參考1:將php.ini中的session.gc_maxlifetime設置爲9999重啓apache

參考2:

$savePath = "./session_save_dir/";

      $lifeTime = 小時 * 秒;

     session_save_path($savePath);

     session_set_cookie_params($lifeTime);

     session_start();

參考3:

session_start();

       $lifeTime = 24 * 3600; // 保存一天

       setcookie(session_name(), session_id(), time() + $lifeTime, "/");

 

1.173   How can you get round the stateless nature of HTTP using PHP? (Yahoo)

最主要的兩個選擇是SESSION和COOKIE。使用SESSION的方法是在每一頁的開始加session_start(),而後利用$_SESSION來存取 SESSION變量。至於 COOKIE你只需記着一個原則:在輸出任何文字以前調用 set_cookie() 函數設置COOKIE,使用 $_COOKIE 獲取COOKIE變量。

6. PHP程序中如何設置當前頁面的編碼爲utf-8?

header(「content-type:text/html;charset=utf-8」);

 

1.174   如何設置一個cookie的名字爲username,值爲jack,而且讓此cookie一週後失效?

      setcookie(‘username’,’jack’,time()+7*24*3600);

1.175   一個瀏覽器最多能夠產生多少個cookie,每一個cookie文件最大不能超過多少?

cookie的總數量沒有限制,可是每一個域名的COOKIE數量和每一個COOKIE的大小是有限制的!

IE每一個域名限制爲50個。

Firefox每一個域名cookie限制爲50個。

Opera每一個域名cookie限制爲30個。

Safari/webkit貌似沒有cookie限制。可是假如cookie不少,則會使header大小超過服務器的處理的限制,會致使錯誤發生。

不一樣瀏覽器間每一個cookie文件大小也不一樣

Firefox和safari是4097個字節,包括名(name)、值(value)和等號。

Opera是4096個字節,包括:名(name)、值(value)和等號。

IE是4095個字節,包括:名(name)、值(value)和等號。

1.176   設置或讀取session以前,須要作什麼?

session_start()前面不能有任何輸出,包括空行。

相關題目:使用setcookie函數前,須要注意什麼?

前面不能有任何輸出,包括空行。

1.177   請描述出七層網絡模型的名稱,由下到上(可使用中文描述)

物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層

11. 說說下面這些這些協議的全稱和中文解釋(提示:都是工做在應用層)SMTP、POP3HTTP、FTP、DNS (小米)

SMTP (Simple Mail Transfer Protocol) 簡單郵件傳輸協議

POP3 (Post Office Protocol 3) 郵局協議第3版

HTTP (Hypertext Transfer Protocol) 超文本傳輸協議

FTP (File Transfer Protocol)文件傳輸協議

DNS (Domain Name System and Domain Name Service protocol) 域名系統(服務)協議

1.178   COOKIE、SESSION的聯繫和區別,多臺web服務器如何共享 SESSION?

COOKIE和SESSION都是用於會話機制,COOKIE保存在客戶端,而SESSION則保存在服務器端。在默認狀況下,SESSION機制是基於COOKIE的,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到COOKIE當中,在下次請求的時候,由瀏覽器攜帶這個COOKIE。

要想多臺web服務器共享SESSION,能夠利用MySQL數據庫存儲SESSION數據。

1.179   HTTP/1.0中,狀態碼200 301 304 403 404 500的含義 (小米)

200 OK 服務器成功處理了請求

301 Moved Permanently(重定向)請求的URL已移走

304 Not Modified(未修改)客戶的緩存資源是最新的, 要客戶端使用緩存

403  Forbidden(禁止)請求被服務器拒絕了

404 Not Found 未找到資源

Internal Server Error(內部服務器錯誤) 服務器遇到一個錯誤,使其沒法爲請求提供服務

 

1.180   請描述PHP(或其餘語言)Session的運行機制,大型網站中Session方面應注意什麼?(小米)

session機制是一種服務器端的機制,它將數據保存到服務器端。

當程序須要爲某個客戶端的請求建立一個session的時候,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識, 稱爲 sessionid,若是已包含一個sessionid則說明之前已經爲此客戶端建立過session,服務器就按照sessionid把這個 session檢索出來使用(若是檢索不到,可能會新建一個),若是客戶端請求不包含sessionid,則爲此客戶端建立一個session而且生成一個與此session相關聯的sessionid,sessionid的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個 sessionid將被在本次響應中返回給客戶端以cookie的形式保存。

session在大訪問量網站上確實影響系統性能,影響性能的緣由之一由文件系統設計形成,在同一個目錄下超過10000個文件時,文件的定位將很是耗時,另外就是小文件的效率問題,通常咱們的session數據都不會太大(1~2K),若是有大量這樣1~2K的文件在磁盤上,IO效率確定會不好,咱們能夠採用改寫session存儲機制,好比存放到數據庫中。

1.181   在子網掩碼爲255.255.255.248的局域網中可以同時使用的IP有多少個?(億郵)

6個,255.255.255.248換算成二進制就是11111111.11111111.11111111.11111000

後面的三位用來表示主機,前面的29位用來表示網絡。

三位表示主機,就是能夠用來表示2^3=8個,再減去網絡地址和廣播地址,就是6個了。

1.182   簡述TCP協議的三次握手過程。 (億郵)

TCP是主機對主機層的傳輸控制協議,提供可靠的鏈接服務,採用三次握手確認創建一個鏈接:

第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

完成三次握手,客戶端與服務器開始傳送數據。

 

1.183   你會用哪一個函數設置當前內容的Content-Type? (卓望)

header函數

1.184   經過頁面輸入用戶名abc和密碼123登陸到www.10086.cn,請寫出該次請求的HTTP協議報文(包括請求行、消息報頭、請求正文)。 (卓望)

POST www.10086.cn HTTP/1.1

Accept: text/html, application/xhtml+xml, */*

Referer: http://localhost/a.html

Accept-Language: zh-CN

User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; KB974487)

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

Host: localhost

Content-Length: 25

Connection: Keep-Alive

username=abc&password=123

 

---恢復內容結束---

1.1    PHP中判斷變量的相關函數

 

1.2    strlen( )與mb_strlen( )的做用分別是什麼(新浪網技術部)

strlen 和mb_strlen 都是用於獲取字符串長度的,其中strlen只針對單字節編碼字符,也就是說它計算的是字符串的總字節數,若是是多字節編碼,如gbk和utf8,使用strlen獲得的不是字符串的個數,而是該字符串的總字節數,可使用mb_strlen獲取其字符個數,使用mb_strlen要注意兩點,一是要開啓mbstring擴展,二是要指定字符集。

示例:

 

相關題目1:實現中文字串截取無亂碼的方法。

方法一,使用php內置函數 mb_substr()

方法二,自定義函數,以utf8爲例,以下:

 

代碼分析:

//u 表示按unicode(utf-8)匹配(主要針對多字節好比漢字)

join — 別名 implode()表示將一個一維數組的值轉化爲字符串

array_slice() 函數在數組中根據條件取出一段值,並返回

 

 

相關題目2:如何求解字符串「中國2北333京」的字符數(一箇中文一個字符),並找到第四個字符「北」
方法一,使用php內置函數,確保配置中已打開mbstring擴展

 

方法二,自定義函數實現求其長度,截取使用上面定義的substr_utf8

 

代碼分析:

 

 

1.3    下列哪一個函數是用正則表達式將字符串分割到數組中(  )

A. split

B. implode

C. explode

D. join

答案:A

1.4    寫出下列程序的輸出結果(新浪網技術部)

 

答案:1

1.5    注意:PHP的文件名不能有中文

1.6    寫出下列幾個預約義全局變量的做用(新浪網技術部)

$_SERVER['DOCUMENT_ROOT']   //當前運行腳本所在的文檔根目錄$_SERVER['HTTP_HOST ']  //當前請求的 Host: 頭部的內容

$_SERVER['REMOTE_ADDR']  //正在瀏覽當前頁面用戶的 IP 地址

$_SERVER['HTTP_REFERER']  //連接到當前頁面的前一頁面的 URL 地址

$_SERVER['SERVER_NAME']  //當前運行腳本所在服務器主機的名稱

$_FILES  //包含有全部上傳的文件信息,他是預約義超級全局數組中惟一的二維數組。

S_FILES['userfile']['name']  //客戶端機器文件的原名稱

$_FILES['userfile']['type']  //文件MIME 類型,若是瀏覽器提供此信息的話,如「image/gif」。

$_FILES['userfile']['size']   //已上傳文件的大小,單位爲字節

$_FILES['userfile']['tmp_name']  //文件被上傳後在服務端儲存的臨時文件名

$_FILES['userfile']['error']  //和該文件上傳相關的錯誤代碼

1.7    include和require都能把另一個文件包含到當前文件中,他們有什麼區別?Include和include_once又有什麼區別?(新浪網技術部)

兩者區別只有一個,那就是對包含文件的需求程度,include就是包含,若是被包含的文件不存在的話,那麼則會提示一個錯誤,可是程序會繼續執行下去。

而require意思是須要,若是被包含文件不存在或者沒法打開的時候,則會提示錯誤,而且會終止程序的執行。

這兩種結構除了在如何處理失敗以外徹底同樣。

once的意思是一次,那麼include_once和require_once表示只包含一次,避免重複包含。

相關題目1:What is the difference between include & include_once? include & require?(Yahoo

 

相關題目2:語句 include 和 require 都能把另一個文件包含到當前文件中,它們的區別是____;爲了不屢次包含同一文件,能夠用語句____來代替它們。

在如何處理失敗時,include() 產生一個警告而 require() 則致使一個致命錯誤;require_once()/include_once()

相關題目3:What functions can you use to add library code to the currently running script?(Yahoo

include、require

1.8    用最少的代碼寫一個求3值最大值的函數. (51.com筆試題)

 

 

1.9    簡述POST 和GET傳輸的最大容量分別是多少? (51.com筆試題)

POST 根據你php.ini文件配置(默認是8M)   

GET的話大小限制在2KB

 

相關題目:表單中 getpost提交方法的區別?

get是發送請求HTTP協議經過url參數傳遞進行接收,而post是實體數據,能夠經過表單提交大量信息。

1.10 有三個php文件位於同一目錄下,內容以下所示,使用瀏覽器訪問 c.php,請問是否存在問題。若是存在問題,請指出修正方法並寫出瀏覽器查看效果,若是不存在問題,請寫出瀏覽器查看效果(酷訊PHP工程師筆試題)

A.php:-------

 <?php function fa() { echo "in Function A\n"; }?>

B.php:-------

 <?php include 'a.php'; ?>

 <?php function fb() { fa(); echo "in Function B\n"; } ?>

C.php:-------

 <?php include 'a.php'; ?>

 <?php include 'b.php'; ?>

 <?php fa(); fb(); ?>

答案:存在問題,a.php 被包含了兩次,致使fa()函數重複定義,使用include_once 避免重複包含。(此處應首先想到考點可能就是include和include_once)(總結:函數不能重複定義)

 

1.11 echo(),print(),print_r()的區別?(新浪)

echo 是一個語言結構,輸出一個或多個字符串;

print() 實際上不是一個函數(它是一個語言結構),所以你能夠沒必要使用圓括號來括起它的參數列表,它輸出一個字符串;

print_r () 是一個函數,打印變量的信息,基本類型,數組,對象。

 

注意 ,是echo自己支持的一種語法,而. 則是字符串鏈接操做符,使用 , 的效率要高一些。

 

相關題目:What is the difference between "print()" and "echo( )"? (騰訊)

answer: print is a function,echo is a language construct

 

1.12 用PHP打印出前一天的時間格式是2006-5-10 22:21:21。

 

 

相關題目:求兩個日期的差數,例如2009-3-1 ~ 2009-4-4 的日期差數

(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24

1.13 不使用第三個變量交換兩個變量的值

方案一:

 

方案二:

對字符進行編碼,好比base64_encode,要保證編碼是可逆的

 

1.14 請說明php中傳值與傳引用的區別。何時傳值何時傳引用?

變量默認老是傳值賦值。那也就是說,當將一個表達式的值賦予一個變量時,整個原始表達式的值被賦值到目標變量。這意味着,例如,當一個變量的值賦予另一個變量時,改變其中一個變量的值,將不會影響到另一個變量。

PHP 也提供了另一種方式給變量賦值:引用賦值。這意味着新的變量簡單引用(換言之,「成爲其別名」 或者 「指向」)了原始變量。改動新的變量將影響到原始變量,反之亦然。使用引用賦值,簡單地將一個 & 符號加到將要賦值的變量前(源變量)。

對象默認是傳引用。

須要操做原始數據,則引用,不能影響原始數據,則值傳遞。

 

相關題目1:What would the following code print to the browser? Why?

 

輸出 10 (調用函數的題必定要考慮是否有返回值)

相關題目2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo

reference 傳送的是變量的地址而非它的值,因此在函數中改變一個變量的值時,整個應用都見到這個變量的新值。

一個regular variable傳送給函數的是它的值,當函數改變這個變量的值時,只有這個函數才見到新值,應用的其餘部分仍然見到舊值。

 

1.15 將1234567890轉換成1,234,567,890 每3位用逗號隔開的形式。(百度)

 

 

 

相關題目1:如何實現字符串翻轉?

strrev(),不過這種方法都不能解決中文字符串翻轉的問題,會出錯的。

 

 

 

相關題目2:假設如今有一個字符串www.baidu.com如何使用PHP對它進行操做使字符串以moc.udiab.輸出? (億郵)

 

1.16 用PHP寫出顯示客戶端IP與服務器IP的代碼。

客戶端IP:$_SERVER["REMOTE_ADDR"]

服務器端IP:$_SERVER["SERVER_ADDR"]

1.17 簡述如何獲得當前執行腳本路徑,包括所獲得參數。

獲取當前執行腳本路徑使用$_SERVER["SCRIPT_FILENAME"] 或 __FILE__

獲取參數,使用$_SERVER["QUERY_STRING"]

__FILE__ :被稱爲PHP魔術常量,返回當前執行PHP腳本的完整路徑和文件名,包含一個絕對路徑

 

1.18  What is the difference between foo() & @foo()?  (Yahoo)

foo() 會執行這個函式,任何解譯錯誤、語法錯誤、執行錯誤都會在頁面上顯示出來。@foo() 在執行這個函式時,會隱藏全部上述的錯誤訊息。

不少應用程序都使用 @mysql_connect() 和 @mysql_query 來隱藏 mysql 的錯誤信息,這是不對的,由於錯誤不應被隱藏,你必須妥善處理它們,可能的話解決它們。

1.19 下面哪一個選項沒有將 john 添加到users 數組中? ( 百度 )

A. $users[ ] = "john";

B. array_add($users, "john");    //PHP中沒有array_add這個函數

C. array_push($users, "john");

D. $users ||= "john" ;

答案:BD

 

 

1.20 檢測一個變量是否有設置的函數是什麼?是否爲空的函數是什麼?

isset 檢測一個變量是否設置

empty 檢測是否爲空

注意兩者的區別,若是 變量是非空或非零的值,則 empty() 返回 FALSE。換句話說,""0"0"NULLFALSEarray() 以及沒有任何屬性的對象都將被認爲是空的。

1.21 在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預約義變量______中;而連接到當前頁面的的前一頁面URL記錄在預約義變量______中。

當前腳本名稱:$_SERVER["PHP_SELF"]  或者 $_SERVER["SCRIPT_NAME"];

連接到當前頁面的前一頁面的 URL 地址:$_SERVER["HTTP_REFERER"]。

 

1.22 sort()、assort()、和 ksort() 有什麼分別?它們分別在什麼狀況下使用?

sort(),根據數組中元素的值,以英文字母順序排序,索引鍵會由 0 到 n-1 從新編號。主要是當數組索引鍵的值可有可無時用來把數組排序。
       assort(),PHP 沒有 assort() 函式,因此多是 asort() 的筆誤。
       asort(),對數組進行排序,數組的索引保持和單元的關聯。主要用於對那些單元順序很重要的結合數組進行排序。

ksort(),根據數組中索引鍵的值,以英文字母順序排序,特別適合用於但願把索引鍵排序的關聯數組。

 

1.23 在PHP中error_reporting這個函數有什麼做用?

打開或者關閉錯誤報告,如:

error_reporting(0);

error_reporting(E_ALL & ~ E_NOTICE);

error_reporting(E_ALL);

 

相關題目:error_reporting(2047) 什麼做用?(新浪)

2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024

其中,1對應E_ERROR,2對應E_WARNING,4對應E_PARSE,8對應E_NOTICE,16對應E_CORE_ERROR,32對應E_CORE_WARNING,64對應E_COMPILE_ERROR, 128對應E_COMPILE_WARNING,256對應E_USER_ERROR,512對應E_USER_WARNING,1024對應E_USER_NOTICE。error_reporting(2047)意味着上述錯誤都會顯示出來。

 

1.24 寫出如下程序的輸出結果 (CBSI)

 

 

hotdogok

相關題目:什麼是可變變量?

獲取一個普通變量的值做爲這個可變變量的變量名。

1.25 常量如何定義? 如何檢測一個常量是否被定義?

定義常量:define() ,

檢測常量是否認義:defined(),如

define("TEST","happy new year!");

if( defined("TEST")){

       echo TEST;

}

 

1.26 執行程序段<?php echo 8%(-3) ?>將輸出

%爲取模運算,輸出0

$a % $b 其結果的正負取決於 $a 的符號。
       echo ((-8)%3)."<br />";   //輸出 -2

echo (8%(-3))."<br />";   //輸出 2

1.27 數組函數 arsort 的做用是____;語句 error_reporting(2047)的做用是____。

arsort:對數組進行逆向排序並保持索引關係

error_reporting(2047)的做用 report All errors and warnings,見21題中相關題目。

 

1.28 以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句____動態裝載PHP模塊,而後再用語句____使得Apache把全部擴展名爲php的文件都做爲PHP腳本處理。

LoadModule php5_module "c:/php/php5apache2.dll";

AddType application/x-httpd-php .php

1.29 一個函數的參數不能是對變量的引用,除非在php.ini中把____設爲on.

allow_call_time_pass_reference :是否啓用在函數調用時強制參數被按照引用傳遞,默認關閉。

 

1.30 在PHP中,heredoc是一種特殊的字符串,它的結束標誌必須____

頂格寫,而且不能包含任何其它字符除";",如:

$str = <<<SHOW

            my name is Jiang Qihui!

     SHOW;

1.31 echo count("abc"); 輸出什麼?(新浪?)

輸出1

count :計算數組中的單元數目或對象中的屬性個數,一般是一個 array,任何其它類型都只有一個單元。

對於對象,若是安裝了 SPL,能夠經過實現 Countable 接口來調用 count()。該接口只有一個方法 count(),此方法返回 count() 函數的返回值。

若是 var 不是數組類型或者實現了 Countable 接口的對象,將返回 1,有一個例外,若是 var 是 NULL 則結果是 0。

 

相關題目:What will be the output of the following PHP code:  (騰訊)
<?php

echo count(strlen("http://php.net"));

?>

answer: 1

 

1.32 寫個函數用來對二維數組排序(新浪)

 

1.33 寫5個不一樣的本身的函數,來獲取一個全路徑的文件的擴展名,容許封裝php庫中已有的函數。(新浪)

 

1.34 PHP的意思,它能幹些什麼?

PHP( Hypertext Preprocessor,超文本預處理器的字母縮寫)是一種被普遍應用的開放源代碼的多用途腳本語言,它可嵌入到 HTML中,尤爲適合 web 開發。

PHP 能作任何事。PHP 主要是用於服務端的腳本程序,所以能夠用 PHP 來完成任何其它的 CGI 程序可以完成的工做,例如收集表單數據,生成動態網頁,或者發送/接收 Cookies。但 PHP 的功能遠不侷限於此。

PHP 腳本主要用於如下三個領域:

1)        服務端腳本。這是 PHP 最傳統,也是最主要的目標領域。

2)        命令行腳本。能夠編寫一段 PHP 腳本,而且不須要任何服務器或者瀏覽器來運行它。經過這種方式,僅僅只須要 PHP 解析器來執行。

3)        編寫桌面應用程序。

 

1.35 Name a few ways to output (print) a block of HTML code in PHP?(Yahoo)

你可使用 PHP 中任何一種輸出語句,包括echo、print、printf,大部分人都使用以下例的 echo:

 echo "My string $variable";

你也可使用這種方法:

 echo <<<END

This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of its own, and can't contain any extra white space.

END;

1.36 寫出如下程序的輸出結果 (CBSI)

 

輸出結果爲 4

1.37 $arr = array('james', 'tom', 'symfony'); 請打印出第一個元素的值,並請將數組的值用','號分隔併合併成字串輸出。

打印第一個元素:echo $arr[0];

以’,’合併成字符串:echo implode(',',$arr);

1.38 $a = 'abcdef'; 請取出$a的值並打印出第一個字母

echo $a{0} 或 echo $a[0]

相關題目:$string="abcdefg",那麼$string{4}的值是? (卓望)

值是 e

1.39 What does === do? What's an example of something that will give true for '==', but not '==='? (Yahoo)

=== 表示全等,是指的兩個變量的值和類型都相等。

如 if (strpos('abc','a') == false) 和 if (strpos('abc','a') === false)

1.40 Which of the following snippets prints a representation of 42 with two decimal places? (騰訊)

A. printf("%.2d\n", 42);
B. printf("%1.2f\n", 42);
C. printf("%1.2u\n", 42);

answer:B

1.41 Given $text = 'Content-Type:text/xml'; Which of the following prints 'text/xml'? (騰訊)

A. print substr($text, strchr($text, ':'));
B. print substr($text, strchr($text, ':') + 1);
C. print substr($text, strpos($text, ':') + 1);
D. print substr($text, strpos($text, ':') + 2);
E. print substr($text, 0, strchr($text, ':'));

answer:C

 

1.42 What is the value of $a?  (騰訊)

A. True
B. False

answer:A

1.43 What is the value of $result in the following PHP code? (騰訊)

answer: NULL

1.44 What is the best all-purpose way of comparing two strings? (騰訊)
A. Using the strpos function
B. Using the == operator
C. Using strcasecmp()
D. Using strcmp()

answer:C

1.45 運行如下程序,$a的值是多少?

 

hello

1.46 運行如下程序,$b的值是多少?

 

1

1.47 運行如下程序,$x的值是多少?

 

ture

1.48 將字符09轉換成十進制數字。(百度)

使用intval函數,echo intval("09"),或者使用int強制類型轉換。

1.49 請寫一個函數,實現如下功能: 字符串"open_door" 轉換成 "OpenDoor"、"make_by_id" 轉換成 "MakeById"。

 

 

1.50 要求寫一段程序,實現如下數組$arr1轉換成數組$arr2:

 

 

參考代碼:

 

1.51 如何將一個數組元素的排列順序反轉過來(例如如下代碼反轉之後的順序是: array ('d', 'c', 'b', 'a'))? (選擇2個答案)

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

?>

A. array_flip()

B. array_reverse()

C. sort()

D. rsort()

答案:BD

 

1.52 $val = max('string', array(2, 5, 7), 42);   $val值爲

array(2,5,7)

max用法示例以下:

 

 

1.53 定義常量MYPI=3.14_________________________;
    define("MYPI",3.14);

 

1.54 簡述單引號和雙引號的用法

雙引號串中的內容能夠被解釋並且替換,而單引號串中的內容總被認爲是普通字符。

1.55 Switch完整語法和注意事項

使用 Switch 語句能夠避免冗長的 if..elseif..else 代碼塊,case只能處理整數,或者能像整數同樣運算的類型,好比char,使用時case 後用'',注意 break不能少,default是爲了處理一些以前沒有包含到的狀況,這樣更爲安全。

1.56 用PHP編寫代碼在頁面輸出當前的北京時間,格式爲「2007-01-18 09:22:03」
    date_default_timezone_set('PRC');
    echo date("Y-m-d H:i:s",time());

1.57 簡述GBK、GB23十二、BIG5 、GB18030

GB2312支持的漢字較少,GBK是相比GB2312漢字更爲豐富,包括所有中日韓漢字,GB18030相比GBK增長了一些少數名族漢字漢字庫更爲多樣,可是常人很難用到,通常簡體中文使用GBK而繁體中文使用BIG5。

1.58 計算某段字符串中某個字符出現的次數(例如: gdfgfdgd59gmkblg中g的次數)
    $text = 'gdfgfdgd59gmkblg';

echo substr_count ( $text,'g');

1.59 如下語句可能存在錯誤,若是存在錯誤請指出什麼錯誤(每一個語句單獨考慮)
    print_r $val = 333;   // error,print_r是一個函數,需加上括號,若是是print則能夠

      print_r($val = 333);  // 正確

      $a += ($b = 4) + 5;   // notice,$a未定義,但能夠正確運行

$foo[bar] = 'enemy';  // notice,最好bar加上引號

function x($a = "1", $b){}  // 無,但給參數默認值應儘可能從右向左

 

1.60 寫出以下程序的輸出結果(小米)

 

相等

 

相等

 

不相等

1.61 寫出以下程序的輸出結果

 

true  true  true  true  true  false  true  false

1.62 寫出以下程序的輸出結果

 

aaaaaa

1.63 寫出以下程序的輸出結果

 

5 0 1 

在PHP中,做用域是不重疊的,函數以外的是全局變量,函數內部定義的則是局部變量,兩者是兩個不一樣的變量,除非在函數內使用global顯式聲明使用全局變量或直接用$_GLOBALS來引用。

 

1.64 寫出以下程序的輸出結果

 

5 2

 

1.65 寫出以下程序的輸出結果

 

1 2

 

1.66 $arr = array('james', 'tom', 'symfony'); 請將’jack’添加到$arr數組的開頭,並把jack打印出來。

array_unshift($arr,’jack’);

echo $arr[0];

1.67 $arr = array('james', 'tom', 'symfony');請將$arr數組的值用’,’分割併合併成字符串輸出?

echo implode(‘,’,$arr);

1.68 $str = ‘jack,james,tom,symfony’; 請將$str用’,’分割,並把分割後的值放到$arr數組中?

$arr = explode(‘,’,$str);

 

1.69 $arr = array(3,7,2,1,’d’,’abc’);請將$arr按照從大到小的順序排序,並保持其鍵值不變?

arsort($arr);

print_r($arr);

 

1.70 $mail = 「gaofei@163.com」;     請將此郵箱的域(163.com)取出來並打印,看最多能寫出幾種方法?

echo strstr($mail,'163');

echo substr($mail,7);

echo substr($mail, strpos($mail, '@')+1);

$arr = explode("@",$mail); echo $arr[1];

1.71 PHP中的註釋的寫法,要列出三種?

// 註釋內容  C風格的單行註釋

# 註釋內容 unix風格的單行註釋

/* 註釋內容 */  C風格的多行註釋

 

1.72 如何在一個php函數中使用具備全局屬性的變量,說出兩種方式?

global $a 或者 $GLOBALS['a']

 

1.73 若$aa='aa';則print('aa is \'aa\''."<br/>")會輸出什麼?

aa is 'aa'

 

1.74 如何把$a = ‘123’轉化成123,列出兩種方式?

 

相關題目:字符串怎麼轉成整數,有幾種方法?怎麼實現?

1)        強制類型轉換: (整型)字符串變量名;

2)        直接轉換:settype(字符串變量,整型);

3)        intval(字符串變量);

 

1.75 說說break和continue能夠用在哪些語句裏,而且列出兩者的區別?

break 和 continue 能夠用在 switch 語句中,或是循環結構中

它們的區別主要是體如今循環語句中,break 表示 跳出整個循環,再也不執行,循環將終止,而continue則表示跳出本次循環,繼續下一次的循環,不會終止循環。

1.76 函數中的默認參數位置如何放置?

當使用默認參數時,任何默認參數必須放在任何非默認參數的右側;不然,函數將不會按照預期的狀況工做。

1.77 如何往一個數組後面添加一個值?列出兩種方式?

$arr[ ] = $value;

array_push($arr, $value);

1.78 說出數組涉及到的經常使用函數。

array --  聲明一個數組

count -- 計算數組中的單元數目或對象中的屬性個數

foreach -- 遍歷數組

list -- 遍歷數組

explode -- 將字符串轉成數組

implode -- 將數組轉成一個新字符串

array_merge -- 合併一個或多個數組

is_array -- 檢查是不是數組       

print_r -- 輸出數組

sort -- 數組排序

array_keys -- 返回數組中全部的鍵名

array_values -- 返回數組中全部的值

key -- 從關聯數組中取得鍵名

 

1.79 字符串的經常使用函數?

trim()  -- 去除字符串首尾處的空白字符(或者其餘字符)

strlen()  -- 字符串長度

substr()  -- 截取字符串

str_replace()  -- 替換字符串函數

substr_replace()  -- 對指定字符串中的部分字符串進行替換

strstr()  -- 檢索字符串函數

explode()  -- 分割字符串函數

implode()  -- 將數組合併成字符串

str_repeat() -- 重複一個字符串

addslashes(); -- 轉義字符串

htmlspecialchars() -- THML實體轉義

 

1.80 如下代碼的執行後是,$result值爲:(奇矩互動)

 

A. a

B. false

C. true

D. b

E. c

答案:B

mixed array_rand( array $input [, int $num_req ] )

從數組中隨機取出一個或多個單元,它接受 input 做爲輸入數組和一個可選的參數 num_req,指明瞭你想取出多少個單元 - 若是沒有指定,默認爲 1。

若是你只取出一個,array_rand() 返回一個隨機單元的鍵名,不然就返回一個包含隨機鍵名的數組。

因此使用array_rand函數,返回結果要麼是鍵名,有麼是數組,在這個例子中,數組是索引數組,因此返回的是整型。

 

1.81 如下代碼的執行後是,$result值爲: (奇矩互動)

 

A. 1

B. 2

C. 3

D. 4

E. 5

答案:B

1.82 php函數名是否區分大小寫? (奇矩互動)

A. 不區分

B. 區分

答案:A

函數名是大小寫無關的,不過在調用函數的時候,一般使用其在定義時相同的形式。

1.83 下代碼的執行後是,$result值爲:(奇矩互動)

 

A. null

B. true

C. false

D. 1

答案:C

is_null -- 檢測變量是否爲 NULL,若是變量是 null 則返回 TRUE,不然返回 FALSE。

在下列狀況下一個變量被認爲是 NULL:

1)        被賦值爲 NULL

2)        還沒有被賦值

3)        被unset()

 

1.84 翻轉字符串中的單詞,字符串僅包含大小寫字母和空格,單詞間使用空格分隔。如:輸入"This is PHP",輸出"PHP is This"(非必要請不要使用PHP自帶函數) (小米)

 

1.85 請列舉出你所知道的全局環境變量 (億郵)

$_ENV;

$_SERVER;

$_REQUEST;

$_FILES;

$_SESSION;

$_COOKIE;

$_GET;

$_POST;

$GLOBALS;

1.86 設有這樣一個數組$a=array(array(id=>0),array(id=>1),array(id=>2)......)id=>0-10000,請問你如何使用PHP判斷id=>500是否在這個數組內? (億郵)

使用in_array 函數,代碼以下:

 

1.87 在PHP中兩個數組怎麼鏈接合併在一塊兒 (億郵)

使用array_merge()函數

1.88 運行以上代碼後$a $b $c分別是? (卓望)

 

$a 爲false,$b = $c = 0
 

1.89 寫出php的public、protected、private三種訪問控制模式的區別(新浪網技術部)

public:公有,任何地方均可以訪問

protected:繼承,只能在本類或子類中訪問,在其它地方不容許訪問

private:私有,只能在本類中訪問,在其餘地方不容許訪問

相關題目:請寫出PHP5權限控制修飾符

private  protected   public

1.90 設計模式考察:請用單態設計模式方法設計類知足以下需求

請用PHP5代碼編寫類實如今每次對數據庫鏈接的訪問中都只能得到惟一的一個數據庫鏈接,具體鏈接數據庫的詳細代碼忽略,請寫出主要邏輯代碼(新浪網技術部)

 

1.91 寫出下列程序的輸出結果(新浪網技術部)

 

輸出結果 10

1.92 PHP5中魔術方法函數有哪幾個,請舉例說明各自的用法 (騰訊PHP工程師筆試題)

__sleep    serialize以前被調用

__wakeup  unserialize時被調用

__toString 打印一個對象時被調用

__set_state 調用var_export時被調用,用__set_state的返回值做爲var_export的返回值

__construct 構造函數,實例化對象時被調用  

__destruct  析構函數,當對象銷燬時被調用

__call 對象調用某個方法,若存在該方法,則直接調用,若不存在,則調用__call 函數

__get 讀取一個對象屬性時,若屬性存在,則直接返回,若不存在,則調用__get 函數

__set 設置一個對象的屬性時,若屬性存在,則直接賦值,若不存在,則調用__set函數

__isset 檢測一個對象的屬性是否存在時被調用

__unset unset一個對象的屬性時被調用

__clone 克隆對象時被調用

__autoload 實例化一個對象時,若是對應的類不存在,則該方法被調用

相關題目:請寫出php5的構造函數和析構函數

構造函數:__construct

      析構函數:__destruct

1.93 如何使用下面的類,並解釋下面什麼意思?

 

雙重md5加密

$testObject = new test();

$encryption = $testObject->Get_test("itcast");

1.94 How would you declare a class named 「myclass」 with no methods or properties? (Yahoo)

class myclass{};

相關題目:如何聲明一個名爲「myclass」的沒有方法和屬性的類?

 

1.95 How would you create an object, which is an instance of 「myclass」? (Yahoo)

$obj= new myclass();

相關題目:如何實例化一個名爲「myclass」的對象?

 

1.96 How do you access and set properties of a class from within the class?(Yahoo)

使用語句:$this->propertyName,例如:

 

1.97 The code below ___________ because ____________.   (騰訊)


A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and multiple PHP blocks.

答案: B

1.98 類的屬性能夠序列化後保存到 session 中,從而之後能夠恢復整個類,這要用到的函數是____。

serialize() 和 unserialize()

 

1.99 在PHP中,若是派生類與父類有相同名字的函數,則派生類的函數會替換父類的函數,程序結果爲


A. tmp

B. Picachu

C. disName

D. Doraemon

E. 無輸出

答案:D

1.100   接口和抽象類的區別是什麼?

抽象類是一種不能被實例化的類,只能做爲其餘類的父類來使用。抽象類是經過關鍵字 abstract 來聲明的。

抽象類與普通類類似,都包含成員變量和成員方法,二者的區別在於,抽象類中至少要包含一個抽象方法,

抽象方法沒有方法體,該方法天生就是要被子類重寫的。

抽象方法的格式爲:abstract function abstractMethod();

接口是經過interface關鍵字來聲明的,接口中的成員常量和方法都是public的,方法能夠不寫關鍵字public,

接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。

抽象類和接口實現的功能十分類似,最大的不一樣是接口能實現多繼承。在應用中選擇抽象類仍是接口要看具體實現。

子類繼承抽象類使用extends,子類實現接口使用implements。

1.101   類中如何定義常量、如何類中調用常量、如何在類外調用常量。

類中的常量也就是成員常量,常量就是不會改變的量,是一個恆值。定義常量使用關鍵字const,例如:const PI = 3.1415326;

不管是類內仍是類外,常量的訪問和變量是不同的,常量不須要實例化對象,

訪問常量的格式都是類名加做用域操做符號(雙冒號)來調用,即:類名:: 類常量名。

 

1.102   autoload()函數是如何運做的?

使用這個魔術函數的基本條件是類文件的文件名要和類的名字保持一致。

當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()函數。

這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。

 

1.103   哪一種OOP設置模式能讓類在整個腳本里只實例化一次?(奇矩互動)

A. MVC

B. 代理模式

C. 狀態模式

D. 抽象工廠模式

E. 單件模式

答案:E

1.104   藉助繼承,咱們能夠建立其餘類的派生類。在PHP中,子類最多能夠繼承幾個父類?(奇矩互動)

A. 1個

B. 2個

C. 取決於系統資源

D. 3個

E. 想要幾個有幾個

答案:A

 

1.105   執行如下代碼,輸出結果是(奇矩互動)

 

A. a

B. 一個錯誤警告

C. 一個致命性的報錯

答案:C  由於類a是抽象類,不能被實例化

1.106   執行如下代碼,輸出結果是

 

A. echo class a something echo class b something

B. echo class b something echo class a something

C. echo class a something

D. echo class b something

答案:D

類b繼承自類a,兩個類都定義了構造函數,因爲兩者名字相同,因此子類中的構造函數覆蓋了父類的構造函數,要想子類對象實例化時也執行父類的構造函數,須要在子類構造函數中使用parent::__construct()來顯示調用父類構造函數。

 

1.107   請定義一個名爲MyClass的類,這個類只有一個靜態方法justDoIt。(卓望)

 

1.108   只有該類才能訪問該類的私有變量嗎?(卓望)

是的

1.109   寫出你知道的幾種設計模式,並用php代碼實現其中一種。(卓望)

單例模式,工廠模式

單例模式 實現代碼 見 第二題

 

1.110   寫出一個能建立多級目錄的PHP函數(新浪網技術部)

 

1.111   寫出smarty模板的特色(新浪網技術部)

速度快,編譯型,緩存技術,插件機制,強大的表現邏輯

1.112   打開php.ini中的safe_mode,會影響哪些函數?至少說出6個。(新浪)

safe_mode,php安全模式,它提供一個基本安全的共享環境,在一個有多個用戶帳戶存在的php開發的web服務器上。當安全模式打開的時候,一些函數將被徹底的禁止,而另外一些函數的功能將會受到限制,如:chdir, move_uploaded_file,chgrp,parse_ini_file, chown, rmdir, copy, rename, fopen, require,mkdir, unlink等。

注意,在php5.3以上版本,safe_mode被棄用,在php5.4以上版本,則將此特性徹底去除了。

 

1.113   抓取遠程圖片到本地,你會用什麼函數?  (51.com筆試題)

1.114   file_get_contents 或者 curl PHP的垃圾收集機制是怎樣的(騰訊)

PHP 能夠自動進行內存管理,清除再也不須要的對象。PHP使用了引用計數(reference counting)這種單純的垃圾回收(garbage collection)機制。每一個對象都內含一個引用計數器,每一個reference鏈接到對象,計數器加1。當reference離開生存空間或被設爲 NULL,計數器減1。當某個對象的引用計數器爲零時,PHP知道你將再也不須要使用這個對象,釋放其所佔的內存空間。

1.115   請寫一段PHP代碼,確保多個進程同時寫入同一個文件成功(騰訊)

核心思路:加鎖

 

 

1.116   寫一個函數,儘量高效的,從一個標準 url 裏取出文件的擴展名,例如: http://www.sina.com.cn/abc/de/fg.php?id=1 須要取出 php 或 .php  (新浪)

參考方案1:

 

參考方案2:

 

相關題目:使用五種以上方式獲取一個文件的擴展名,要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必須使用PHP自帶的處理函數進行處理,方法不能明顯重複,能夠封裝成函數,好比 get_ext1($file_name), get_ext2($file_name)

 

1.117   寫一個函數,可以遍歷一個文件夾下的全部文件和子文件夾。(新浪)

 

1.118   簡述論壇中無限分類的實現原理。(新浪)

建立類別表以下:

CREATE TABLE category(

              cat_id smallint unsigned not null auto_increment primary key comment '類別ID',

              cat_name VARCHAR(30) NOT NULL DEFAULT '' COMMENT '類別名稱',

              parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '類別父ID'

)engine=MyISAM charset=utf8;

 

編寫一個函數,遞歸遍歷,實現無限分類

 

1.119   寫一個函數,算出兩個文件的相對路徑,如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php';計算出 $b 相對於 $a 的相對路徑應該是 ../../c/d (新浪)

 

1.120   mysql_fetch_row() 和 mysql_fetch_array() 有什麼分別?

 mysql_fetch_row() 把數據庫的一列儲存在一個以零爲基數的數組中,第一欄在數組的索引 0,第二欄在索引 1,依此類推。

mysql_fetch_assoc() 把數據庫的一列儲存在一個關聯數組中,數組的索引就是字段名稱,例如個人數據庫查詢送回「first_name」、「last_name」、 「email」三個字段,數組的索引即是「first_name」、「last_name」和「email」。mysql_fetch_array() 能夠同時送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。

 

1.121   有一個網頁地址, 好比PHP開發資源網主頁: http://www.phpres.com/index.html,如何獲得它的內容?

方法1(對於PHP5及更高版本):

$readcontents = fopen("http://www.phpres.com/index.html", "rb");

$contents = stream_get_contents($readcontents);

fclose($readcontents);

echo $contents;

方法2:

echo file_get_contents("http://www.phpres.com/index.html");

1.122   談談對mvc的認識

由模型(model),視圖(view),控制器(controller)完成的應用程序,model層負責提供數據,和數據庫有關的操做都交給模型層來處理,view層則提供交互的界面,並輸出數據,而controller層則負責接收請求,並分發給相應的model來處理,而後調用view層來顯示。

1.123   What does the GD library do?  (Yahoo)

GD庫提供了一系列用來處理圖片的API,使用GD庫能夠處理圖片,或者生成圖片。 在網站上GD庫一般用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。自從 PHP 4.3.0 版本後 GD 便內建在 PHP 系統中。

 

1.124   What function can you use to open a file for reading and writing? (Yahoo)

A. fget();

B. file_open();

C. fopen();

D. open_file();

答案:C

fget() 這不是一個 PHP 函數,會引致執行錯誤。

file_open() 這不是一個 PHP 函數,會引致執行錯誤。

fopen()這是正確答案,fopen() 能夠用來開啓檔案以便讀寫。

open_file() 這不是一個 PHP 函數,會引致執行錯誤。

1.125   Smarty的原理

smarty是一個模板引擎,使用smarty主要是爲了實現邏輯和外在內容的分離,若是不使用模板的話,一般的作法就是php代碼和html代碼混編。使用了模板以後,則能夠將業務邏輯都放到php文件中,而負責顯示內容的模板則放到html文件中。Smarty在執行display方法的時候,讀取模板文件,並進行數據替換,生成編譯文件,以後每次訪問都會直接訪問編譯文件,讀取編譯文件省去了讀取模板文件,和字符串替換的時間,因此能夠更快,編譯文件裏時間戳記錄模板文件修改時間,若是模板被修改過就能夠檢測到,而後從新編譯(編譯是把靜態內容保存起來,動態內容根據傳入的參數不一樣而不一樣)。 若是啓用了緩存,則會根據編譯文件生成緩存文件,在訪問的時候若是有緩存文件而且緩存文件沒有過時,則直接訪問緩存文件。

 

相關題目1:可以使HTML和PHP分離開使用的模板

smarty,phplib等

相關題目2:您是否用過模板引擎? 若是有您用的模板引擎的名字是?

Smarty

1.126   PHP如何實現頁面跳轉

方法一:php函數跳轉,缺點,header頭以前不能有輸出,跳轉後的程序繼續執行,可用exit中斷執行後面的程序。

header("Location: 網址");    //直接跳轉

header("refresh:3;url=http://axgle.za.net");   //三秒後跳轉

方法二:利用meta

echo "<meta http-equiv=refresh content='0; url=網址'>";

1.127   PHP能夠和sql server/oracle等數據庫鏈接嗎?

能夠

1.128   使用哪些工具進行版本控制?

SVN 或者 CVS

相關題目:您是否用過版本控制軟件? 若是有您用的版本控制軟件的名字是?

TortoiseSVN-1.2.6

1.129   寫出一個正則表達式,過慮網頁上的全部JS/VBS腳本(即把script標記及其內容都去掉):

過濾javascript腳本參考:

 

 

1.130   Given a line of text $string, how would you write a regular expression to strip all the HTML tags from it?(Yahoo)

方案一,使用PHP 內建函數 strip_tags() 除去 HTML 標籤

方案二,自定義函數,以下:

 

1.131   請寫一個函數驗證電子郵件的格式是否正確(要求使用正則)(新浪)

preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/', $email);

 

相關題目:請用正則表達式寫一個函數,驗證電子郵件的格式是否正確。 (鑫衆人云)

 

1.132   請對POSIX風格和兼容Perl風格兩種正則表達式的主要函數進行類比說明 (騰訊)

主要區別有如下三種:

1)        preg_replace()裏面的正則能夠寫成型如:"/.xxx/"而ereg_replace()裏面的正則需寫成型如"xxx"

2)        preg_replace()能操做數組,而ereg_replace()不能夠

3)        在逆向引用用preg_replace()可以使用0-99個,而ereg_replace()最多爲9個

使用 Perl 兼容正則表達式語法的 preg_match() 函數一般是比 ereg() 更快的替代方案。

 

1.133   請寫出並說明如何在命令行下運行PHP腳本(寫出兩種方式)同時向PHP腳本傳遞參數?(騰訊)

首先進入php安裝目錄

php -f d:/wamp/www/1.php     其中-f參數指定要執行的php文件

php -r phpinfo();              其中-r表示直接執行php代碼,無需寫開始結束標記

 

1.134   使用正則表達式提取一段標識語言(html或xml)代碼段中指定標籤的指定屬性值(需考慮屬性值對不規則的狀況,如大小寫不敏感,屬性名值與等號間有空格等)。此處假設需提取test標籤的attr屬性值,請自行構建包含該標籤的串 (騰訊)

編寫以下函數:

function getAttrValue($str, $tagName, $attrName){

       $pattern1 = "/<" . $tagName . "(\\s+\\w+\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)

                     (\\2))*\\s+" . $attrName . "\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\5)

                     (\\s+\\w+\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\9))*\\s*>/i";

       $arr = array();

       $re = preg_match($pattern1, $str, $arr);

       if($re){

              echo "<br />\$arr[6]={$arr[6]}";

       }

       else{

              echo "<br />沒找到。";

       }

}

 

測試:

$str1 = "<test attr='ddd'>";

getAttrValue($str1,"test","attr");   //找test標籤中attr屬性的值,結果爲ddd

$str2 = "<test2 attr='ddd' attr2='ddd2' t1=\"t1 value\" t2 = 't2 value'>";

getAttrValue($str2,"test2","t1");   //找test2標籤中t1屬性的值,結果爲t1 value

 

1.135   What does the following code do? Explain what's going on there. $date='08/26/2003'; print ereg_replace(「([0-9]+)/([0-9]+)/([0-9]+)」,\\2/\\1/\\3,$date); (Yahoo)

這是把一個日期從 MM/DD/YYYY 的格式轉爲 DD/MM/YYYY 格式。

輸出26/08/2003

 

1.136   What function would you use to redirect the browser to a new page?(Yahoo)
A. redir()
B. header()
C. location()
D. redirect()

答案:B

redir() 這不是一個 PHP 函數,會引致執行錯誤。

header() 這個是正確答案,header()函數發送頭信息,能夠用來使瀏覽器轉向到另外一個頁面,例如:header("Location: http://www.search-this.com/")。

location() 這不是一個 PHP 函數,會引致執行錯誤。

redirect() 這不是一個 PHP 函數,會引致執行錯誤。

1.137   When turned on ____________ will _________ your script with different variables from HTML forms and cookies. (騰訊)

A. show_errors, enable

B. show_errors, show

C. register_globals, enhance

D. register_globals, inject

答案:C

1.138   一個函數的參數不能是對變量的引用,除非在php.ini中把____設爲on。

allow_call_time_pass_reference

是否啓用在函數調用時強制參數被按照引用傳遞

 

1.139   在 HTML 語言中,頁面頭部的 meta 標記能夠用來輸出文件的編碼格式,如下是一個標準的 meta 語句<META http-equiv='Content-Type' content='text/html; charset=gbk'>,請使用 PHP 語言寫一個函數,把一個標準 HTML 頁面中的相似 meta 標記中的 charset 部分值改成 big5。(新浪)

請注意:

4)        須要處理完整的 html 頁面,即不光此 meta 語句

(2) 忽略大小寫

11. ' 和 " 在此處是能夠互換的

12. 'Content-Type' 兩側的引號是能夠忽略的,但 'text/html; charset=gbk' 兩側的不行

13. 注意處理多餘空格

編寫正則表達式以下:

$reg1 = "/(<meta\\s*http-equiv\\s*=\\s*(['\"]?)Content-Type(\\2)\\s*content\\s*=\\s*(['\"])

text\/html;charset=)(UTF-8)(\\4)(\\s*\/?>)/i";

 

1.140   PHP中如何判斷一個字符串是不是合法的日期模式:2007-03-13 13:13:13 。要求代碼不超過5行。 (酷訊)

 

1.141   PHP中,如何得到一個數組的鍵值?(酷訊 )

使用 key() 能夠得到數組中當前元素的鍵名,使用current()則能夠返回當前元素的值。使用array_keys()則能夠獲得數組中全部的鍵名。使用foreach結構foreach($arr as $key=>$value) 能夠經過$key 和 $value分別獲取鍵名和值。

1.142   若是模板是用smarty模板。怎樣用section語句來顯示一個名爲$data的組。好比:

$data = array(

       0 => array('id' => 8, 'name' => 'name1'),

       1 => array('id' => 10, 'name' => 'name2'),

       2 => array('id' => 15, 'name' => 'name3')

);

寫出在模板頁的代碼?若用foreach語句又要怎樣顯示呢?

用section語句:

<{section name=test loop=$data start=0 step=1}>

id:<{$data[test].id}><br />

name:<{$data[test].name}><br /><br />

<{sectionelse}>
       數組爲空

<{/section}>

 

用foreach語句:

<{foreach from=$data item=test}>

id:<{$test.id}><br />

name:<{$test.name}><br /><br />

<{foreachelse}>

數組爲空

<{/foreach}>

 

1.143   哪一個選項會匹配下邊的這個正則表達式? (/.*\*xyz\d/)

A. ******xyz       

B. *****_xyz1     

C. ******xyz2     

D. _*xyz
答案:C

 

1.144   如下哪一個錯誤沒法被標準的錯誤控制器獲取?

A. E_WARNING     

B. E_USER_ERROR  

C. E_PARSE      

D. E_NOTICE

答案:B

 

1.145   如下哪一種錯誤類型沒法被自定義的錯誤處理器捕捉到? (奇矩互動)

A. E_WARNING

B. E_USER_ERROR

C. E_PARSE

D. E_NOTICE

答案:C

1.146   (^\s*)|(\s*$)這個正則表達式做用是:__________;

匹配以0個或多個空白符開頭或者0個或多個空白符結尾的字符串

1.147   編寫函數取得上一月的最後一天

 

1.148   在不少時候,咱們能夠經過apache的主配置文件來設置對test目錄的訪問權限控制,如http://IP/test請問若是需設置test下的一個子目錄的訪問控制權限,是否能夠在主配置文件中修改,若是不能夠應如何解決。

能夠,還能夠在須要控制的子目錄下建立.htaccess文件,寫入訪問控制。

1.149   若是個人網站用的utf-8編碼,爲防止亂碼出現,都須要注意哪些地方?

從如下幾個方面考慮:

1)        數據庫中庫和表都用utf8編碼

2)        php鏈接mysql,指定數據庫編碼爲utf8 mysql_query(「set names utf8」);

3)        php文件指定頭部編碼爲utf-8 header(「content-type:text/html;charset=utf-8」);

4)        網站下全部文件的編碼爲utf8

5)        html文件指定編碼爲utf-8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

1.150   在url中用get傳值的時候,若中文出現亂碼,應該用哪一個函數對中文進行編碼?     urlencode()

1.151   寫出兩種對變量加密的函數?

md5($str);

sha1($str);

1.152   如何把2009-9-2 10:30:25變成unix時間戳?

 

1.153   如何把一個GB2312格式的字符串裝換成UTF-8格式?

 

 

1.154   若是須要原樣輸出用戶輸入的內容,在數據入庫前,要用哪一個函數處理?

htmlspecialchars 或者 htmlentities

1.155   寫出五種以上你使用過的PHP的擴展的名稱(提示:經常使用的PHP擴展)

mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO 等

1.156   瞭解MVC模式嗎?請寫出三種以上目前PHP流行的MVC框架名稱(不區分大小寫)

FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等

1.157   php中WEB上傳文件的原理是什麼,如何限制上傳文件的大小?

上傳文件的表單使用post方式,而且要在form中添加enctype='multipart/form-data'。

通常能夠加上隱藏域:<input type=hidden name='MAX_FILE_SIZE' value=dddddd>,位置在file域前面。value的值是上傳文件的客戶端字節限制。能夠避免用戶在花時間等待上傳大文件以後才發現文件過大上傳失敗的麻煩。

使用file文件域來選擇要上傳的文件,當點擊提交按鈕以後,文件會被上傳到服務器中的臨時目錄,在腳本運行結束時會被銷燬,因此應該在腳本結束以前,將其移動到服務器上的某個目錄下,能夠經過函數move_uploaded_file()來移動臨時文件,要獲取臨時文件的信息,使用$_FILES。

限制上傳文件大小的因素有:

1)        客戶端的隱藏域MAX_FILE_SIZE的數值(能夠被繞開)。

2)        服務器端的upload_max_filesize,post_max_size和memory_limit。這幾項不可以用腳原本設置。

3)        自定義文件大小限制邏輯。即便服務器的限制是能本身決定,也會有須要個別考慮的狀況。因此這個限制方式常常是必要的。

 

1.158   簡述UBB code 的實現原理。(YG)

UBB代碼是HTML的一個變種,經過程序自定義咱們的標籤,好比「[a]PHP中UBB的使用[/a]」這樣的標籤,其實質就是查找[a][/a]標籤,將其替換成<a></a>的標準html,說白了,就是將標準的html標記經過技術手段使其簡化,其輸出出來的結果仍是標準的 html。

明白了ubb的原理,那麼再製做一個簡單的 ubb 編輯器就不難了,和 fck 之類的編輯器比較起來,ubb 代碼最大的優勢就是代碼簡單,功能不多,簡單的ubb只須要一個文件,並且 ubb 標籤能夠本身來定義,更改起來很方便,在 php 中就是利用替換函數就能夠將 html 進行標籤化,輸出時進行標籤的轉化。

1.159   怎麼把文件保存到指定目錄?怎麼避免上傳文件重名問題?

能夠本身設置上傳文件的保存目錄,與文件名拼湊造成一個文件路徑,使用move_uploaded_file(),就能夠完成將文件保存到指定目錄。能夠經過上傳的文件名獲取到文件後綴,而後使用時間戳+隨機數+文件後綴的方式爲文件從新命名,這樣就避免了重名。

1.160   _____函數能返回腳本里的任意行中調用的函數的名稱。該函數同時還常常被用在調試

中,用來判斷錯誤是如何發生的。 (奇矩互動)

debug_print_backtrace()

1.161   在Smarty模板語法中怎麼能遍歷數組$a = array(array('id' => 0),array('id' =>

1),array('id' => 2),……) id=>0-10000 ,怎麼判斷當id=>500,讓輸出的值在HTML裏變爲紅色? (億郵)

設數組分配過來的數組名爲 $ids

{section name = temp loop = $ids}

{if $ids[temp].id == 500}

<span style = ‘color: #f00;’>{$ids[temp].id}</span>

{esle}

{$ids[temp].id}

{/if}

{/section}

1.162   在Smarty模板語法中如何獲取當前時間,而且使用Y-m-d H:i:s的格式輸出?(億郵)

使用{$smarty.now} 來獲取當前時間,獲得的是unix系統時間戳

使用變量調節器進行格式化,以下:

{$smarty.now | date_format : 「%Y-%m-%d %H:%M:%S」 }

1.163   在Smarty模板語法中如何獲取php的全局環境變量 (億郵)

$smarty.get.變量  #顯示經過get方式傳過來的指定變量的值

$smarty.post.變量  #顯示經過post方式傳過來的指定變量的值

$smarty.cookies.變量  #顯示經過cookie中指定變量的值

$smarty.server.SERVER_NAME  #顯示server變量值,$_SERVER系列變量

$smarty.env.PATH  #顯示系統環境變量值,$_ENV系列變量

$smarty.session.變量  #顯示session中指定變量的值

$smarty.request.變量  #顯示經過post、get、cookie中指定變量的值

1.164   在Smarty模板中如何用自定義函數 (億郵)

使用模板分隔符包含,傳遞參數則使用HTML屬性的方式,例如:

{html_image file="pumpkin.jpg"}

1.165   列舉出你所知道的php系統函數庫例如,數學函數庫 (億郵)

mysql,gd,pdo,XML,zip,filesystem,mail等

1.166   假如讓你來寫一個函數實現Utf-8轉gb2312,那麼函數的名稱應該怎麼命名?(億郵)

utf8_to_gb2312 或者 utf8togb2312

1.167   請描述以下URL重寫規則的用意。(卓望)

<IfModulemod_rewrite.c>

RewriteEngineon

RewriteCond%{REQUEST_FILENAME}!-f

RewriteCond%{REQUEST_FILENAME}!-d

RewriteBase/

RewriteRule./index.php[L]

</IfModule>

若是REQUEST_FILENAME文件存在,就直接訪問文件,不進行下面的rewrite規則,若是REQUEST_FILENAME目錄存在,就直接訪問目錄,不進行下面的rewrite規則,RewriteRule./index.php[L]的意思是把全部的請求都給index.php處理。

 

1.168   Warning:Cannot modify header information-headers already sent by (output started at

D:\src\init.php:7) in D:\src\init.php on line10一般什麼狀況下php會報該警告信息?(卓望)

通常是在header、set_cookie以及session_start函數前面有輸出(包括空格)的狀況下,會報該警告信息

1.169   禁用COOKIE 後 SEESION 還能用嗎? (51.com筆試題)

能夠,COOKIE和SESSION都是用來實現會話機制的,因爲http協議是無狀態的,因此要想跟蹤一個用戶在同一個網站之間不一樣頁面的 狀態,須要有這麼一個機制----會話機制。

COOKIE:將會話信息的保存到瀏覽器端。

SESSION:將會話信息保存到服務器端。

SESSION默認狀況下是基於COOKIE的,對於SESSION來講,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到cookie當中。

若是禁用了COOKIE,則基於COOKIE的SESSION很差使了,咱們可使用get,傳遞SID,或者直接開啓透明的SID(此時須要關閉基於cookie的SESSION配置項)。

相關題目:SESSIONCOOKIE的區別?

COOKIE保存在客戶端,而SESSION則保存服務器端。

從安全性的角度來說,SESSION的安全性要高。

從保存內容的類型的角度來說,COOKIE只保存字符串(及可以自動轉換成字符串),而session則能夠保存全部的數據類型。

從保存內容的大小的角度來說,COOKIE保存的內容是有限制的,比較小,而SESSION基本上沒有這個限制。

從性能的角度來說,用SESSION的話,對服務器的壓力會更大一些。

1.170   請使用socket相關函數(非curl)實現以下功能:構造一個post請求,發送到指定http server的指定端口的指定請求路徑(如http://www.example.com:8080/test)。請求中包含如下變量:

用戶名(username):溫柔一刀

密碼(pwd):&123=321&321=123&

我的簡介(intro):Hello world!

且該http server須要如下cookie來進行簡單的用戶動做跟蹤:

cur_query:you&me

last_tm:...(上次請求的unix時間戳,定爲當前請求時間前10分鐘)

cur_tm:...(當前請求的unix時間戳)

設置超時爲10秒,發出請求後,將http server的響應內容輸出 (騰訊)

參考代碼:

if($fp = fsockopen('localhost', '80')) {

    //鏈接成功

    $request_data = "POST /2.php HTTP/1.1" . "\r\n";  //請求行

    $request_data .= "Host: localhost" . "\r\n";  //host頭信息

    $request_data .= "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" . "\r\n";//host頭信息

    $request_content = "username=".urlencode('溫柔一刀')."&pwd=".urlencode('&123=321&321=123&')."&intro=".urlencode("Hello world!");

    $request_data .= "Content-Type: application/x-www-form-urlencoded" . "\r\n";

    $request_data .= "Content-Length: " . strlen($request_content) . "\r\n";

    $cur_query = urlencode("you&me");

       $last_tm = time()-10*60;

       $cur_tm = time();

       $request_data .= "Cookie:cur_query=$cur_query;last_tm=$last_tm;cur_tm=$cur_tm" . "\r\n";

    $request_data .= "\r\n"; //請求頭信息結束時的空行    

    //請求主體數據部分

    $request_data .= $request_content;

    //利用創建好的通道,將數據發送過去

    fwrite($fp, $request_data); //寫入數據(發送數據)

    //讀取數據

    while(!feof($fp)) { //判斷是否沒有到文件末尾

        $resp_data = fgets($fp);

        echo $resp_data . '<br>';

    }

}

 

1.171   在HTTP 1.0中,狀態碼401的含義是________;若是返回「找不到文件」的提示,則可用 header 函數,其語句爲__________;

未經受權:訪問因爲憑據無效被拒絕

header("HTTP/1.0 404 Not Found")

 

1.172   如何修改SESSION的生存時間?

要注意這裏的生存時間指的是什麼? 因爲session默認是基於cookie的,也就是說使用session會話技術,首先是將session數據保存到服務器端,其次會將sessionID 保存到瀏覽器端,保存在服務器端的session文件生命週期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor來決定,而保存在客戶端的sessionID由客戶端cookie來決定,默認其生存週期直到瀏覽器關閉,它也能夠經過php.ini中的設置session.cookie_lifetime 來控制,兩者共同來決定session 的生存時間,兩者中的其中任意一個失效了,就會形成session失效,要根據本身的需求來決定是要從哪方面來修改其生存時間。

參考1:將php.ini中的session.gc_maxlifetime設置爲9999重啓apache

參考2:

$savePath = "./session_save_dir/";

      $lifeTime = 小時 * 秒;

     session_save_path($savePath);

     session_set_cookie_params($lifeTime);

     session_start();

參考3:

session_start();

       $lifeTime = 24 * 3600; // 保存一天

       setcookie(session_name(), session_id(), time() + $lifeTime, "/");

 

1.173   How can you get round the stateless nature of HTTP using PHP? (Yahoo)

最主要的兩個選擇是SESSION和COOKIE。使用SESSION的方法是在每一頁的開始加session_start(),而後利用$_SESSION來存取 SESSION變量。至於 COOKIE你只需記着一個原則:在輸出任何文字以前調用 set_cookie() 函數設置COOKIE,使用 $_COOKIE 獲取COOKIE變量。

6. PHP程序中如何設置當前頁面的編碼爲utf-8?

header(「content-type:text/html;charset=utf-8」);

 

1.174   如何設置一個cookie的名字爲username,值爲jack,而且讓此cookie一週後失效?

      setcookie(‘username’,’jack’,time()+7*24*3600);

1.175   一個瀏覽器最多能夠產生多少個cookie,每一個cookie文件最大不能超過多少?

cookie的總數量沒有限制,可是每一個域名的COOKIE數量和每一個COOKIE的大小是有限制的!

IE每一個域名限制爲50個。

Firefox每一個域名cookie限制爲50個。

Opera每一個域名cookie限制爲30個。

Safari/webkit貌似沒有cookie限制。可是假如cookie不少,則會使header大小超過服務器的處理的限制,會致使錯誤發生。

不一樣瀏覽器間每一個cookie文件大小也不一樣

Firefox和safari是4097個字節,包括名(name)、值(value)和等號。

Opera是4096個字節,包括:名(name)、值(value)和等號。

IE是4095個字節,包括:名(name)、值(value)和等號。

1.176   設置或讀取session以前,須要作什麼?

session_start()前面不能有任何輸出,包括空行。

相關題目:使用setcookie函數前,須要注意什麼?

前面不能有任何輸出,包括空行。

1.177   請描述出七層網絡模型的名稱,由下到上(可使用中文描述)

物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層

11. 說說下面這些這些協議的全稱和中文解釋(提示:都是工做在應用層)SMTP、POP3HTTP、FTP、DNS (小米)

SMTP (Simple Mail Transfer Protocol) 簡單郵件傳輸協議

POP3 (Post Office Protocol 3) 郵局協議第3版

HTTP (Hypertext Transfer Protocol) 超文本傳輸協議

FTP (File Transfer Protocol)文件傳輸協議

DNS (Domain Name System and Domain Name Service protocol) 域名系統(服務)協議

1.178   COOKIE、SESSION的聯繫和區別,多臺web服務器如何共享 SESSION?

COOKIE和SESSION都是用於會話機制,COOKIE保存在客戶端,而SESSION則保存在服務器端。在默認狀況下,SESSION機制是基於COOKIE的,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到COOKIE當中,在下次請求的時候,由瀏覽器攜帶這個COOKIE。

要想多臺web服務器共享SESSION,能夠利用MySQL數據庫存儲SESSION數據。

1.179   HTTP/1.0中,狀態碼200 301 304 403 404 500的含義 (小米)

200 OK 服務器成功處理了請求

301 Moved Permanently(重定向)請求的URL已移走

304 Not Modified(未修改)客戶的緩存資源是最新的, 要客戶端使用緩存

403  Forbidden(禁止)請求被服務器拒絕了

404 Not Found 未找到資源

Internal Server Error(內部服務器錯誤) 服務器遇到一個錯誤,使其沒法爲請求提供服務

 

1.180   請描述PHP(或其餘語言)Session的運行機制,大型網站中Session方面應注意什麼?(小米)

session機制是一種服務器端的機制,它將數據保存到服務器端。

當程序須要爲某個客戶端的請求建立一個session的時候,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識, 稱爲 sessionid,若是已包含一個sessionid則說明之前已經爲此客戶端建立過session,服務器就按照sessionid把這個 session檢索出來使用(若是檢索不到,可能會新建一個),若是客戶端請求不包含sessionid,則爲此客戶端建立一個session而且生成一個與此session相關聯的sessionid,sessionid的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個 sessionid將被在本次響應中返回給客戶端以cookie的形式保存。

session在大訪問量網站上確實影響系統性能,影響性能的緣由之一由文件系統設計形成,在同一個目錄下超過10000個文件時,文件的定位將很是耗時,另外就是小文件的效率問題,通常咱們的session數據都不會太大(1~2K),若是有大量這樣1~2K的文件在磁盤上,IO效率確定會不好,咱們能夠採用改寫session存儲機制,好比存放到數據庫中。

1.181   在子網掩碼爲255.255.255.248的局域網中可以同時使用的IP有多少個?(億郵)

6個,255.255.255.248換算成二進制就是11111111.11111111.11111111.11111000

後面的三位用來表示主機,前面的29位用來表示網絡。

三位表示主機,就是能夠用來表示2^3=8個,再減去網絡地址和廣播地址,就是6個了。

1.182   簡述TCP協議的三次握手過程。 (億郵)

TCP是主機對主機層的傳輸控制協議,提供可靠的鏈接服務,採用三次握手確認創建一個鏈接:

第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

完成三次握手,客戶端與服務器開始傳送數據。

 

1.183   你會用哪一個函數設置當前內容的Content-Type? (卓望)

header函數

1.184   經過頁面輸入用戶名abc和密碼123登陸到www.10086.cn,請寫出該次請求的HTTP協議報文(包括請求行、消息報頭、請求正文)。 (卓望)

POST www.10086.cn HTTP/1.1

Accept: text/html, application/xhtml+xml, */*

Referer: http://localhost/a.html

Accept-Language: zh-CN

User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; KB974487)

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

Host: localhost

Content-Length: 25

Connection: Keep-Alive

username=abc&password=123

相關文章
相關標籤/搜索