程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP 面試題

PHP 面試題

編輯:PHP綜合

1.求1+3+5+...+9999的和
<?PHP
for($i=1;$i<=9999;$i++){
 $i++;
 $sum = $sum + $i; echo $sum;//25005000
?>
2.$a = "abcd",求$a字符串的倒序,請自定義一個函數實現,不能使用已存在的函數
<?PHP
$a = "abcd";
function str($a){
 for($j=strlen($a)-1;$j>=0;$j--){
  $b .= substr($a,$j,1);  return $b; echo str($a);//dcba
?>
3. 有一個數組$a = array('3','8','1','4','11','7');請把數組中的各元素進行有序的排序

方法一(升序排序)
<?PHP
$a = array('3','8','1','4','11','7');
$len = count($a);
for($k = 1;$k < $len;$k++){//$k就是第幾步
 for($i = 1,$j = $len -1;$i <= $len - $k;$i++,$j--){//$i就是比較的次數
  if($a[$j] < $a[$j-1]){//升序排序
   $x = $a[$j];
   $a[$j] = $a[$j-1];
   $a[$j-1] = $x;  } print_r($a);//Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 7 [4] => 8 [5] => 11 )
?>
方法二(降序排序)
<?PHP
$a = array('3','8','1','4','11','7');
$len = count($a);
for($k = 1;$k < $len;$k++){//$k就是第幾步
 for($i = 1,$j = $len -1;$i <= $len - $k;$i++,$j--){//$i就是比較的次數
  if($a[$j] > $a[$j-1]){//降序排序
   $x = $a[$j];
   $a[$j] = $a[$j-1];
   $a[$j-1] = $x;  } print_r($a);//Array ( [0] => 11 [1] => 8 [2] => 7 [3] => 4 [4] => 3 [5] => 1 )
?>
4.$a = "33^27^5^40^";求33+27+5+40的和
<?PHP
$a = "33^27^5^40^";
$b = (explode("^",$a));
for($i=0;$i<=count($b);$i++){
 $sumc = $sumc + $b[$i]; echo $sumc;//105
?>

填空題:

1.在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量 $_SERVER['PHP_SELF']中;

而鏈接到當前頁面的URL記錄在預定義變量 $_SERVER['HTTP_REFERER'] 中

當前執行腳本的絕對路徑名 $_SERVER["SCRIPT_FILENAME"]

正在浏覽當前頁面用戶的 IP 地址 $_SERVER["REMOTE_ADDR"]

查詢(query)的字符串(URL 中第一個問號 ? 之後的內容):id=1&bi=2 $_SERVER["QUERY_STRING"]

2.執行程序段<?PHP echo 8%(-2) ?>將輸出 0

 -8%3 = -2  8%-3 = 2                       

3.在HTTP 1.0中,狀態碼 401 的含義是 狀態401代表未被授權 ;如果返回“找不到文件”的提示,則可用 header 函數,其語句為 header("HTTP/1.0 404 Not Found") ;。

  • 200 - 服務器成功返回網頁
  • 401- 未被授權
  • 404 - 請求的網頁不存在
  • 503 - 服務器暫時不可用

4.數組函數arsort 的作用是 對數組進行逆向排序並保持索引關系 ;語句 error_reporting(2047)的作用是報告所有錯誤和警告    設定錯誤訊息回報的等級     Reporting  All errors and warnings

5.PEAR中的數據庫連接字符串格式是____。

6.寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把scrīpt標記及其內容都去掉):

<?PHP
$script="以下內容不顯示:<script language='Javascript'>alert('cc');</script>";
echo preg_replace("/<script[^>].*?>.*?<\/script>/si", "替換內容", $script);
?>

7.以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句 LoadModule php5_module “D:/php5/php5apache2.dll” 動態裝載PHP模塊,然後再用語句 AddType application/x-httpd-php .php 使得apache把所有擴展名為php的文件都作為PHP腳本處理。

 LoadModule php5_module "D:/php5/PHP5apache2.dll" ,

 AddType application/x-httpd-php .PHP,

8.語句 include 和 require 都能把另外一個文件包含到當前文件中,它們的區別是發生異常時include產生警告,require產生致命的錯誤;為了避免多次包含同一文件,可以用語句 include_once() 或者require_once() 來代替它們。

9.類的屬性可以序列化後保存到 session 中,從而以後可以恢復整個類,這要用到的函數是__ serialize() /unserialize()

10.一個函數的參數不能是對變量的引用,除非在PHP.ini中把 allow_call_time_pass_reference設為on.

11.SQL中LEFT JOIN的含義是__自然左外鏈接__ 如果 tbl_user記錄了學生的姓名(name)和學號(ID),tbl_score記錄了學生(有的學生考試以後被開除了,沒有其記錄)的學號(ID)

和考試成績(score)以及考試科目(subject),要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句 __select A.name,sum(B.score) as sumscore from tbl_user A left join tbl_score B on A.ID=B.ID group by A.ID__

12.在PHP中,heredoc是一種特殊的字符串,它的結束標志必須__結束標記必須頂到寫,不能有任何的縮進和空格,且在結束標記末尾要有分號__。

1. 用PHP打印出前一天的時間,打印格式是2007年5月10日 22:21:21

三種方法:

(1).echo date('Y年n月d日 H:i:s',strtotime('-1 day'));

(2).echo date("Y年n 月d 日H:i:s",time()-3600*24);

(3)echo date("Y年n月d日 H:i:s",mktime(date("H"),date("i"),date("s"),date("n"),

date("d")-1,date("Y")));

2. PHP代碼如下:

$a="hello";

$b=&$a;

unset($b);

$b="world";

echo $a;

其結果是? hello

3. PHP代碼如下:

$str="cd";

$$str="landog"; 

$$str.="ok";

echo $cd;

其結果是? landongok

4. 用PHP寫一段代碼,實現不使用第3個變量,交換$a、$b的值,$a、$b的初始值自己定。

$a = "abc";

$b = "1234";

echo "初始化時 a=$a,b=$b<br>";

$a = $a . $b;

$b = strlen( $b );//4

$b = substr($a,0,strlen($a)-$b);//abc

$a = substr($a,strlen($b));                          

echo "交換後 a=$a,b=$b<br>";

6. Javascript能否定義二維數組,如果不能你如何解決?

Javascript不能定義二維數組,可以用arr[0] = new array()來解決

var array = [‘a’,’b’,’c’];

array[0] = [1,2,3];                 

7. 假設a.html和b.Html在同一個文件夾下面,用Javascript實現當打開a.html五秒鐘後,自動跳轉到b.Html。

function go()

   window.location.href='b.Html';

}             

settimeout('go()',5000);

10. 利用CSS樣式表定義已訪問的超鏈接字體大小為14pt,顏色為red。

a:visited{font-size:14pt; color:red;}

12. 規律題,3、1、4、1、5、9、2、( 6 ), 請按照規律在括號內寫出下一表達式。

規律 3.1415926

1.以下哪一句不會把 John 新增到 users 陣列?

$users[] = 'john';  成功把 John 新增到陣列 users。

array_add($users,’john’);  函式 array_add() 無定義。

array_push($users,‘john’);  成功把 John 新增到陣列 users。

$users ||= 'john';   語法錯誤。

16.下面的代碼用來做什麼?請解釋。

$date='08/26/2003';print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","[url=file://2///1///3%22,$date]\\2/\\1/\\3[/url]",$date);

這是把一個日期從 MM/DD/YYYY 的格式轉為 DD/MM/YYYY 格式。我的一個好朋友告訴我可以把這個正規表達式拆解為以下的語句,對於如此簡單的表示是來說其實無須拆解,純粹為了解說的方便:

// 對應一個或更多 0-9,後面緊隨一個斜號$regExpression = "([0-9]+)/";// 應一個或更多 0-9,後面緊隨另一個斜號$regExpression .= "([0-9]+)/";// 再次對應一個或更多 0-9$regExpression .= "([0-9]+)";至於 [url=file://2///1///3]\\2/\\1/\\3[/url] 則是用來對應括號,第一個括號對的是月份,第二個括號對應的是日期,第三個括號對應的是年份。

17.給你一行文字 $string,你會如何編寫一個正則表達式,把 $string 內的 Html 標簽除去?

$stringOfText = "<p>This is a test</p>";

$expression = "/<(.*)>(.*)<\/(.*)>/";

echo preg_replace($expression, "\\2", $stringOfText);

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

"http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];

簡答題:

1.       表單中 get與post提交方法的區別?

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

1. get是從服務器上獲取數據,post是向服務器傳送數據。

2. GET是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。POST是通過HTTP POST機制,將表單內各個字段與其內容放置在Html HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。

3. 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。

4. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,不過也有字節限制,這是為了避免對服務器用大量數據進行惡意攻擊。可在PHP.in中對 post_max_size 進行設置

5. get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。

6. Get是Form的默認方法。

2.PHP中session與cookIE的區別

1、從安全方面比較

session保存在服務器,客戶端不知道其中的信息;cookIE保存在客戶端,服務器能夠知道其中的信息。cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,

考慮到安全應當使用session      

2、從存取方式上比較

session中保存的是對象,cookIE中保存的是字符串。    

3、是否區分路徑上比較

session不能區分路徑,同一個用戶在訪問一個網站期間,所有的session在任何一個地方都可以訪問到。而cookie中如果設置了路徑參數,那麼同一個網站中不同路徑下的cookIE互相是訪問不到的。

4、從工作方式上比較

session需要借助cookie才能正常工作。如果客戶端完全禁止cookIE,session將失效。

5,從服務器性能方面比較

session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能

考慮到減輕服務器性能方面,應當使用COOKIE

3.數據庫中的事務是什麼?

答:事務(transaction)是作為一個單元的一組有序的數據庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,事務則提交,其修改將作用於所有其他數據庫進程。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。

4.echo(),print(),print_r(),printf()的區別

echo是PHP語句, print和print_r是函數,語句沒有返回值,函數可以有返回值

echo() :用於輸出一個或多個字符串,它是PHP的語言結構也就是PHP的語句(語句沒有返回值)

print():該函數功能和echo()一樣,不同的是print()有返回值, 成功返回 1 ,失敗則返回 0

print_r(): 可以打印出復雜類型變量的值 (如數組,對象) 

printf():輸出一個格式化的字符串

sprintf():返回一個格式化的字符串 ,將格式化的字符串以返回值的形式寫入到一個變量中

5.如何實現字符串翻轉?

echo strrev($a);

6.PHP的意思?

PHP是一個基於服務端來創建動態網站的腳本語言,可以用PHP和Html生成網站主頁

7.MySQL取得當前時間的函數是?,格式化日期的函數是?

now(),date()

8.使用哪些工具進行版本控制?(1分)

cvs,svn

9.對於大流量的網站,您采用什麼樣的方法來解決訪問量問題?(4分)

答:確認服務器硬件是否足夠支持當前的流量,數據庫讀寫分離,優化數據表,

   程序功能規則,禁止外部的盜鏈,控制大文件的下載,使用不同主機分流主要流量

10.用PHP寫出顯示客戶端IP與服務器IP的代碼1分)

答:打印客戶端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: echo getenv('REMOTE_ADDR');

打印服務器IP:echo gethostbyname("www.xiaoyan.com") ; 或則 echo

 $_SERVER[‘SERVER_ADDR’];

11.語句include和require的區別是什麼

包含文件不存在或者語法錯誤的時候

include() 產生一個警告,,腳本會繼續運行 而 require() 則導致一個致命錯誤

如何修改SESSION的生存時間(1分).

答:方法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:setcookie() and session_set_cookIE_params($lifeTime);

12.include_once()與include的區別

如果該文件中的代碼已經被包含了,則不會再次包含

13.有一個網頁地址, 比如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");

15.談談對mvc的認識

由模型(model),視圖(vIEw),控制器(controller)完成的應用程序

由模型發出要實現的功能到控制器,控制器接收組織功能傳遞給視圖;

16.請說明PHP中傳值與傳引用的區別。什麼時候傳值什麼時候傳引用?

按值傳遞:函數范圍內對值的任何改變在函數外部都會被忽略

   按引用傳遞:函數范圍內對值的任何改變在函數外部也能反映出這些修改

   優缺點:按值傳遞時,PHP必須復制值。特別是對於大型的字符串和對象來說,這將會是一個代價很大的操作。

   按引用傳遞則不需要復制值,對於性能提高很有好處。

答: 傳值只是把某一個變量的值傳給了另一個變量,而引用則說明兩者指向了同一個地方。

17.在PHP中error_reporting這個函數有什麼作用?

報告所有錯誤和警告  Reporting  All errors and warnings  設置報錯級別並返回當前級別。

18.請寫一個函數驗證電子郵件的格式是否正確

<script>

function checkEmail(strEmail){

    if(strEmail.search(/^\w+((-\w+)(.\w+))*@\w+(-\w+)*\.[a-zA-Z0-9_]+/) != -1){

       return true;

    }else{

       alert("false");

    }

</script>

<input type="text" onblur="checkEmail(this.value)";>

或則

<?PHP

function checkEmail($email){   

    if(preg_match("/^\w+((-\w+)(.\w+))*@[a-zA-Z0-9_]+(-)*\.[a-zA-Z0-9_]+$/",$email)){

       echo "格式正確";

    }else{

       echo "格式錯誤";

    }

checkEmail('[email protected]');

?>

19. 簡述如何得到當前執行腳本路徑,包括所得到參數

(1).echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];

(2).echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];

(3).echo "http://".getenv('SERVER_NAME').getenv('REQUEST_URI');

20.JS表單彈出對話框函數是? 獲得輸入焦點函數是?

答:彈出對話框: alert(),prompt(),confirm()

   獲得輸入焦點 focus()

21.JS的轉向函數是? 怎麼引入一個外部JS文件?

答:window.location.href,<script type="text/Javascript" src="js/js_function.JS"></script>

22.foo()和@foo()之間有什麼區別?

答:@foo()屏蔽錯誤輸出

23.如何聲明一個名為”myclass”的沒有方法和屬性的類?

答:class myclass{ }

24.如何實例化一個名為”myclass”的對象?

答:$newclass = new myclass();      

25.你如何訪問和設置一個類的屬性? (2分)

答:$object = new myclass();

   $testvar = $object->test;

   $object->test = "my string";                                       

26.mysql_fetch_row() 和MySQL_fetch_array之間有什麼區別? (1分)

MySQL_fetch_row是從結果集取得一行作為枚舉

   MySQL_fetch_array是從結果集取出一行數組作為關聯數組,或索引數組,兩者兼得

27.GD庫是做什麼用的? (1分)

答:GD庫主要是做圖片處理用的。                                                            

28.指出一些在PHP輸入一段Html代碼的辦法。(1分)                                            

答:echo "<a href='index.PHP'>aaa</a>";

29.下面哪個函數可以打開一個文件,以對文件進行讀和寫操作?(1分)

    (a) fget() (b) file_open() (c) fopen() (d) open_file()  [  c  ]

31.下面的程序會輸入是否?(1分)

  $num = 10;

  function multiply(){

  $num = $num * 10;

  }

  multiply();

  echo $num;

  ?>

    輸出:10

32.請寫出數據類型(int char varchar datetime text)的意思; 請問varchar和char有什麼區別(2分)

答:int是數字類型,char固定長度字符串,varchar實際長度字符串,datetime日期和時間的組合,text文本字符串

char是一種固定長度的類型,varchar則是一種可變長度的類型

33.寫出以下程序的輸出結果 (1分)

  $b=201;

  $c=40;

    $a=$b>$c?4:5;

  echo $a;

  ?>

答:4

34.檢測一個變量是否有設置的函數是否?是否為空的函數是?(2分)          

答:isset(),empty();

35.取得查詢結果集總數的函數是?(1分)

答:MySQL_num_rows($result);

36.$arr = array('james', 'tom', 'symfony'); 請打印出第一個元素的值 (1分)

答:echo $array[0];

37.請將36題的數組的值用','號分隔並合並成字串輸出(1分)

<?PHP

$array = array('james', 'tom', 'symfony');

$string = implode(",",$array);

echo $string;

?>

38.$a = 'abcdef'; 請取出$a的值並打印出第一個字母(1分)

答:echo $a{0} 或 echo substr($a,0,1)

39.請寫出PHP5權限控制修飾符(3分)

答:public(公共),private(私用),protected(繼承)

40.請寫出PHP5的構造函數和析構函數(2分)

答:__construct() , __destruct()

請舉例說明在你的開發過程中用什麼方法來加快頁面的加載速度

答:要用到服務器資源時才打開,及時關閉服務器資源,數據庫添加索引,頁面可生成靜態,圖片等大文件單獨服務器。使用代碼優化工具

編程題

1.寫一個函數,盡可能高效的,從一個標准 url 裡取出文件的擴展名

例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .PHP

<?PHP

function getext($url){

    $array = parse_url($url);//解析url

    $path = $array['path'];//路徑

    $file = basename($path);//basename()返回路徑中文件名部分

    $arr = explode(".",$file);//以.分割文件名,生成數組

    return $arr[1];

echo getext("http://www.xiaoyan.com/aa/uu.PHP?id=666");

?>

2.實現中文字串截取無亂碼的方法。(3分)****************

答: function GBsubstr($string, $start, $length) {

    if(strlen($string)>$length){

    $str=null;

    $len=$start+$length;

    for($i=$start;$i<$len;$i++){

        if(ord(substr($string,$i,1))>0xa0){

            //ord()函數返回字符的 ASCII (美國國家標准交換碼) 序數值。本函數和 chr() 函數相反。

            $str.=substr($string,$i,2);

               $i++;

        }else{

               $str.=substr($string,$i,1);

            }

    }

       return $str.'...';

    }else{

    return $string;

   }

3.寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。

function bianli($dir){

    if(is_dir($dir)){//判斷給定文件名是否是一個目錄   

       $files = array();

       if($handle = opendir($dir)){//opendir -- 打開目錄句柄

           while(false !== ($file = readdir($handle))){////readdir -- 從目錄句柄中讀取條目

              if($file != '.' && $file != ".."){//去除(.)和(..)

                  if(is_dir($dir.'/'.$file)){//如果是路徑,說明下面還有文件,遞歸調用

                     $files[$file] = bianli($dir.'/'.$file);

                  }else{

                     $files[] = $file;

                  }

              }

           }

       }

    }

    closedir($handle);//closedir -- 關閉目錄句柄

    return $files;

4.有一個一維數組,裡面存儲整形數據,請寫一個函數,將他們按從大到小的順序排列。要求執行效率高。並說明如何改善執行效率。(該函數必須自己實現,不能使用PHP函數)

即寫一個冒泡排序

 <?PHP

function maopao($arr){

    $len = count($arr);

    for($i = 1;$i < $len;$i++){//最多做$len-1次排序

       $flag = 0;        //本趟排序開始前,交換標志應為0

       for($j = $len - 1;$j >= $i;$j--){//$j就是比較的次數

           if($arr[$j] < $arr[$j-1]){

              //如果是從大到小的話,只要在改為$arr[$j]>$arr[$j-1]就可以了

              $x = $arr[$j];

              $arr[$j] = $arr[$j-1];

              $arr[$j-1] = $x;

              $flag = 1; //發生了交換,故將交換標志置為1     

           }

       }

       if($flag == 0)    return $arr;//本趟排序未發生交換,提前終止算法

    }

$arr = array('3','9','1','4','2');

print_r(maopao($arr));

?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved