php面試題及答案

1       

php面試題及答案(原創)收藏

php面試題及答案(原創)收藏

行動態的、交互的、高性能的WEB服務應用程序。ASP採用腳本語言VB Script(Java script

)作爲自己的開發語言。 

  PHP是一種跨平臺的服務器端的嵌入式腳本語言. 它大量地借用C,Java和Perl語言的語法

, 並耦合PHP自己的特性,使WEB開發者能夠快速地寫出動態生成頁面.它支持目前絕大多數數

據庫。還有一點,PHP是完全免費的,不用花錢,你可以從PHP官方站點(http://www.php.ne

t)自由下載。而且你可以不受限制地獲得源碼,甚至可以從中加進你自己需要的特色。 

  JSP 是Sun公司推出的新一代站點開發語言,他完全解決了目前ASP,PHP的一個通病--

腳本級執行(據說PHP4 也已經在Zend 的支持下,實現編譯運行).Sun 公司藉助自己在Jav

a 上的不凡造詣,將Java 從Java 應用程序 和 Java Applet 之外,又有新的碩果,就是Js

p--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能強大的站點

程序。 

  三者都提供在 HTML 代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。

但JSP代碼被編譯成 Servlet 並由 Java 虛擬機解釋執行,這種編譯操作僅在對 JSP 頁面的

第一次請求時發生。在 ASP 、PHP、JSP 環境下, HTML 代碼主要負責描述信息的顯示樣式

,而程序代碼則用來描述處理邏輯。普通的 HTML 頁面只依賴於 Web 服務器,而 ASP 、PH

P、JSP 頁面需要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被重新嵌入到 

HTML 代碼中,然後一起發送給瀏覽器。 ASP 、PHP、 JSP三者都是面向 Web 服務器的技術

,客戶端瀏覽器不需要任何附加的軟件支持。

 

14、談談對mvc的認識(1分)

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

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

 

15、寫出發貼數最多的十個人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)

答:SELECT * FROM `members` ORDER BY posts DESC limit 0,10;

 

16. 請說明php中傳值與傳引用的區別。什麼時候傳值什麼時候傳引用?(2分)

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

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

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

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

 

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

答:設置錯誤級別與錯誤信息回報

 

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

答:function checkEmail($email)

  {

    $pregEmail = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i";

    return preg_match($pregEmail,$email);  

  }

 

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

答:$script_name = basename(__file__); print_r($script_name);

 

21、JS表單彈出對話框函數是?獲得輸入焦點函數是? (2分)

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

   獲得輸入焦點 focus()

 

22、JS的轉向函數是?怎麼引入一個外部JS文件?(2分)

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

 

23、foo()和@foo()之間有什麼區別?(1分)

答:@foo()控制錯誤輸出

 

24、如何聲明一個名爲”myclass”的沒有方法和屬性的類? (1分)

答:class myclass{ }

 

25、如何實例化一個名爲”myclass”的對象?(1分)

答:new myclass()

 

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

答:$object = new myclass();

   $newstr = $object->test;

   $object->test = "info";

 

27、mysql_fetch_row() 和mysql_fetch_array之間有什麼區別? (1分)

答:mysql_fetch_row是從結果集取出1行數組,作爲枚舉

   mysql_fetch_array是從結果集取出一行數組作爲關聯數組,或數字數組,兩者兼得

 

28、GD庫是做什麼用的? (1分)

答:gd庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。 

   在網站上GD庫通常用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。

 

29、指出一些在PHP輸入一段HTML代碼的辦法。(1分)

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

 

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

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

 

31、下面哪個選項沒有將 john 添加到users 數組中? (1分)

  (a) $users[] = ‘john’;

  (b) array_add($users,’john’);

  (c) array_push($users,‘john’);

  (d) $users ||= ‘john’;  [  a , c  ]

 

32、下面的程序會輸入是否?(1分)

  $num = 10;

  function multiply(){

  $num = $num * 10;

  }

  multiply();

  echo $num;

  ?>

    輸出:10

 

33、使用php寫一段簡單查詢,查出所有姓名爲“張三”的內容並打印出來 (2分)

  表名User

  Name Tel Content Date

  張三 13333663366 大專畢業 2006-10-11

  張三 13612312331 本科畢業 2006-10-15

  張四 021-55665566 中專畢業 2006-10-15

  請根據上面的題目完成代碼:

  $mysql_db=mysql_connect("local","root","pass");

  @mysql_select_db("DB",$mysql_db);

    $result = mysql_query("SELECT * FROM `user` WHERE name='張三'");

    while($rs = mysql_fetch_array($result)){

      echo $rs["tel"].$rs["content"].$rs["date"];

    }    

 

34、如何使用下面的類,並解釋下面什麼意思?(3)

  class test{

     function Get_test($num){

      $num=md5(md5($num)."En");

      return $num;

   }

  }

答:$testnum = "123";

   $object = new test();

   $encrypt = $object->Get_test($testnum);

   echo $encrypt;

   類test裏面包含Get_test方法,實例化類調用方法多字符串加密

 

35、寫出 SQL語句的格式 : 插入 ,更新 ,刪除 (4分)

  表名User

  Name Tel Content Date

  張三 13333663366 大專畢業 2006-10-11

  張三 13612312331 本科畢業 2006-10-15

  張四 021-55665566 中專畢業 2006-10-15

  (a) 有一新記錄(小王 13254748547 高中畢業 2007-05-06)請用SQL語句新增至表中

    mysql_query("INSERT INTO `user` (name,tel,content,date) VALUES 

    ('小王','13254748547','高中畢業','2007-05-06')")

 

  (b) 請用sql語句把張三的時間更新成爲當前系統時間

    $nowDate = date("Ymd");

    mysql_query("UPDATE `user` SET date='".$nowDate."' WHERE name='張山'");

 

  (c) 請寫出刪除名爲張四的全部記錄

    mysql_query("DELETE FROM `user` WHERE name='張四'");

 

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

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

   char的場地固定爲創建表設置的長度,varchar爲可變長度的字符

 

38、寫出以下程序的輸出結果 (1分)

  $b=201;

  $c=40;

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

  echo $a;

  ?>

答:4

 

39、檢測一個變量是否有設置的函數是否?是否爲空的函數是?(2分)

答:isset($str),empty($str);

 

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

答:mysql_num_rows($result);

 

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

答:echo $array[0];

 

42、請將41題的數組的值用','號分隔並合併成字串輸出(1分)

答:for($i=0;$i<count($array);$i++){ echo $array[$i].",";}

 

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

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

 

44、PHP可以和sql server/oracle等數據庫連接嗎?(1分)

答:當然可以

 

45、請寫出PHP5權限控制修飾符(3分)

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

 

46、請寫出php5的構造函數和析構函數(2分)

答:__construct , __destruct

 

47、完成以下:

   (一)創建新聞發佈系統,表名爲message有如下字段 (3分)

  id 文章id

  title 文章標題

  content 文章內容

  category_id 文章分類id

    hits 點擊量

答:CREATE TABLE 'message'(

   'id' int(10) NOT NULL auto_increment,

   'title' varchar(200) default NULL,

   'content' text,

   'category_id' int(10) NOT NULL,

   'hits' int(20),

   PRIMARY KEY('id');

   )ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

    (二)同樣上述新聞發佈系統:表comment記錄用戶回覆內容,字段如下 (4分)

  comment_id 回覆id

  id 文章id,關聯message表中的id

  comment_content 回覆內容

  現通過查詢數據庫需要得到以下格式的文章標題列表,並按照回覆數量排序,回覆最高的排在最前面

  文章id 文章標題 點擊量 回覆數量

  用一個SQL語句完成上述查詢,如果文章沒有回覆則回覆數量顯示爲0

答:SELECT message.id id,message.title title,IF(message.`hits` IS NULL,0,message.`hits`) hits,

   IF(comment.`id` is NULL,0,count(*)) number FROM message LEFT JOIN 

   comment ON message.id=comment.id GROUP BY message.`id`;

 

  (三)上述內容管理系統,表category保存分類信息,字段如下 (3分)

  category_id int(4) not null auto_increment;

  categroy_name varchar(40) not null;

  用戶輸入文章時,通過選擇下拉菜單選定文章分類

  寫出如何實現這個下拉菜單

答:function categoryList()

{

    $result=mysql_query("select category_id,categroy_name from category")

            or die("Invalid query: " . mysql_error());

    print("<select name='category' value=''>\n");

    while($rowArray=mysql_fetch_array($result))

    {

       print("<option value='".$rowArray['category_id']."'>".$rowArray['categroy_name']."</option>\n");

    }

    print("</select>");

}

 

編程題:

1. 寫一個函數,儘可能高效的,從一個標準 url 裏取出文件的擴展名

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

答案1:

   function getExt($url){

   $arr = parse_url($url);

   

   $file = basename($arr['path']);

   $ext = explode(".",$file);

   return $ext[1];

}

答案2:

    function getExt($url) {

    $url = basename($url);

    $pos1 = strpos($url,".");

    $pos2 = strpos($url,"?");

    if(strstr($url,"?")){

         return substr($url,$pos1 + 1,$pos2 - $pos1 - 1);

    } else {

      return substr($url,$pos1);

    }

}

 

 

2. 在 HTML 語言中,頁面頭部的 meta 標記可以用來輸出文件的編碼格式,以下是一個標準的 meta 語句

  請使用 PHP 語言寫一個函數,把一個標準 HTML 頁面中的類似 meta 標記中的 charset 部分值改爲 big5

  請注意:

  1. 需要處理完整的 html 頁面,即不光此 meta 語句

  2. 忽略大小寫

    3. ' 和 " 在此處是可以互換的

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

  5. 注意處理多餘空格

 

3. 寫一個函數,算出兩個文件的相對路徑

  如 $a = '/a/b/c/d/e.php';

  $b = '/a/b/12/34/c.php';

  計算出 $b 相對於 $a 的相對路徑應該是 ../../c/d將()添上

答:function getRelativePath($a, $b) {   

    $returnPath = array(dirname($b));   

    $arrA = explode('/', $a);   

    $arrB = explode('/', $returnPath[0]);   

    for ($n = 1, $len = count($arrB); $n < $len; $n++) {   

        if ($arrA[$n] != $arrB[$n]) {   

            break;   

        }    

    }   

    if ($len - $n > 0) {   

        $returnPath = array_merge($returnPath, array_fill(1, $len - $n, '..'));   

    }   

       

    $returnPath = array_merge($returnPath, array_slice($arrA, $n));   

    return implode('/', $returnPath);   

   }   

   echo getRelativePath($a, $b);  

 

填空題:

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

 

 

2.執行程序段<?php echo 8%(-2) ?>將輸出__0__。

 

3.在HTTP 1.0中,狀態碼 401 的含義是____;如果返回“找不到文件”的提示,則可用 header 函數,其語句爲____。

 

4.數組函數 arsort 的作用是__對數組進行逆向排序並保持索引關係__;語句 error_reporting(2047)的作用是__報告所有錯誤和警告__。

 

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

 

6.寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把scrīpt標記及其內容都去掉):preg_replace("/<script[^>].*?>.*?</script>/si", "newinfo", $script);

 

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

  LoadModule php5_module "c:/php/php5apache2.dll" , AddType application/x-httpd-php .php,

 

8.語句 include 和 require 都能把另外一個文件包含到當前文件中,它們的區別是____;爲了避免多次包含同一文件,可以用語句__require_once||include_once__來代替它們。

 

9.類的屬性可以序列化後保存到 session 中,從而以後可以恢復整個類,這要用到的函數是____。

 

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

 

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

 

和考試成績(score)以及考試科目(subject),要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句____。

 

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

 

編程題:

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

答:

function my_scandir($dir)

{

     $files = array();

     if ( $handle = opendir($dir) ) {

         while ( ($file = readdir($handle)) !== false ) {

             if ( $file != ".." && $file != "." ) {

                 if ( is_dir($dir . "/" . $file) ) {

                     $files[$file] = scandir($dir . "/" . $file);

                 }else {

                     $files[] = $file;

                 }

             }

         }

         closedir($handle);

         return $files;

     }

}

 

14.簡述論壇中無限分類的實現原理。

答:

<?php

/*

數據表結構如下:

CREATE TABLE `category` (

 `categoryID` smallint(5) unsigned NOT NULL auto_increment,

 `categoryParentID` smallint(5) unsigned NOT NULL default '0',

 `categoryName` varchar(50) NOT NULL default '',

 PRIMARY KEY (`categoryID`)

) ENGINE=MyISAM DEFAULT CHARSET=gbk;

 

INSERT INTO `category` ( `categoryParentID`, `categoryName`) VALUES 

(0, '一級類別'),

(1, '二級類別'),

(1, '二級類別'),

(1, '二級類別'),

(2, '三級類別'),

(2, '333332'),

(2, '234234'),

(3, 'aqqqqqd'),

(4, '哈哈'),

(5, '66333666');

 

*/

 

//指定分類id變量$category_id,然後返回該分類的所有子類

//$default_category爲默認的選中的分類

function Get_Category($category_id = 0,$level = 0, $default_category = 0)

{

 global $DB;

 $sql = "SELECT * FROM category ORDER BY categoryID DESC";

 $result = $DB->query( $sql );

 while ($rows = $DB->fetch_array($result)) 

 {

 $category_array[$rows[categoryParentID]][$rows[categoryID]] = array('id' => $rows[categoryID], 'parent' => $rows[categoryParentID], 'name' => $rows

 

[categoryName]);

 }

 if (!isset($category_array[$category_id]))

 {

 return "";

 }

 foreach($category_array[$category_id] AS $key => $category)

 { 

 if ($category['id'] == $default_category)

 {

 echo "<option selected value=".$category['id']."";

 }else

 {

 echo "<option value=".$category['id']."";

 }

 

 if ($level > 0)

 {

 echo ">" . str_repeat( " ", $level ) . " " . $category['name'] . "</option>\n";

 }

 else

 {

 echo ">" . $category['name'] . "</option>\n";

 }

 Get_Category($key, $level + 1, $default_category);

 }

 unset($category_array[$category_id]);

}

 

/*

函數返回的數組格式如下所示:

Array 

(

 [1] => Array ( [id] => 1 [name] => 一級類別 [level] => 0 [ParentID] => 0 )

 [4] => Array ( [id] => 4 [name] => 二級類別 [level] => 1 [ParentID] => 1 )

 [9] => Array ( [id] => 9 [name] => 哈哈 [level] => 2 [ParentID] => 4 )

 [3] => Array ( [id] => 3 [name] => 二級類別 [level] => 1 [ParentID] => 1 ) 

 [8] => Array ( [id] => 8 [name] => aqqqqqd [level] => 2 [ParentID] => 3 )

 [2] => Array ( [id] => 2 [name] => 二級類別 [level] => 1 [ParentID] => 1 )

 [7] => Array ( [id] => 7 [name] => 234234 [level] => 2 [ParentID] => 2 )

 [6] => Array ( [id] => 6 [name] => 333332 [level] => 2 [ParentID] => 2 ) 

 [5] => Array ( [id] => 5 [name] => 三級類別 [level] => 2 [ParentID] => 2 ) 

 [10] => Array ( [id] => 10 [name] => 66333666 [level] => 3 [ParentID] => 5 ) 

)

*/

//指定分類id,然後返回數組

function Category_array($category_id = 0,$level=0)

{

 global $DB;

 $sql = "SELECT * FROM category ORDER BY categoryID DESC";

 $result = $DB->query($sql);

 while ($rows = $DB->fetch_array($result))

 {

 $category_array[$rows['categoryParentID']][$rows['categoryID']] = $rows;

 }

 

 foreach ($category_array AS $key=>$val)

 {

 if ($key == $category_id)

 {

 foreach ($val AS $k=> $v)

 {

 $options[$k] =

 array(

 'id' => $v['categoryID'], 'name' => $v['categoryName'], 'level' => $level, 'ParentID'=>$v['categoryParentID']

 );

 

 $children = Category_array($k, $level+1);

 

 if (count($children) > 0)

 {

 $options = $options + $children;

 }

 }

 }

 }

 unset($category_array[$category_id]);

 return $options;

}

 

?>

 

 

 

<?php

 

class cate

{

 

        function Get_Category($category_id = 0,$level = 0, $default_category = 0)

        {

             echo $category_id;

             $arr = array(

              '0' => array(

                             '1' => array('id' => 1, 'parent' => 0, 'name' => '1111'),

                             '2' => array('id' => 2, 'parent' => 0, 'name' => '2222'),

                            '4' => array('id' => 4, 'parent' => 0, 'name' => '4444')    

                          ),

              '1' => array(

                              '3' => array('id' => 3, 'parent' => 1, 'name' => '333333'),

                            '5' => array('id' => 5, 'parent' => 1, 'name' => '555555')     

                            ),

                          

              '3' => array(

                            '6' => array('id' => 6, 'parent' => 3, 'name' => '66666'),

                            '7' => array('id' => 7, 'parent' => 3, 'name' => '77777')

                            ),

              '4' => array(

                            '8' => array('id' => 8, 'parent' => 4, 'name' => '8888'),

                            '9' => array('id' => 9, 'parent' => 4, 'name' => '9999')

                            )    

             );

 

             if (!isset($arr[$category_id]))

             {

                return "";

             }

    

             foreach($arr[$category_id] AS $key => $cate)

             {

                 if ($cate['id'] == $default_category)

                 {

                     $txt = "<option selected value=".$cate['id']."";

                 }else{

                     $txt = "<option value=".$cate['id']."";

                 }

            

                 if ($level > 0)

                 {

                    $txt1 = ">" . str_repeat( "-", $level ) . " " . $cate['name'] . "</option>\n";

                 }else{

                     $txt1 = ">" . $cate['name'] . "</option>\n";

                 }

                 $val = $txt.$txt1;

                 echo $val;

                 self::Get_Category($key, $level + 1, $default_category);

             }

            

        }

        

        

        function getFlush($category_id = 0,$level = 0, $default_category = 0)

        {

            

            ob_start();

 

            self::Get_Category($category_id ,$level, $default_category);

 

            $out = ob_get_contents();

 

            ob_end_clean();

            return $out;

        }    

}

$id =$_GET['id'];

echo "<select>";

$c = new cate();

//$c->Get_Category();

$ttt=  $c->getFlush($id,'0','3');

echo $ttt;

echo "</select>";

?>

1、求$a,$b,$c三個數中的最大值和最小值(5分)

echo max($a,$b,$c);

echo min($a,$b,$c);

 

2、echo()、print()、print_r()的區別(5分)

print()    只能打印出簡單類型變量的值(如int,string)  
print_r() 可以打印出複雜類型變量的值(如數組,對象)  
echo      輸出一個或者多個字符串

3、防止SQL注入漏洞可以用哪些函數?(5分)

addslashes()

mysql_escape_string()

正確回答1個即可

 

4、用PHP寫出顯示客戶端IP與服務器IP的代碼(5分)

echo $_SERVER[‘REMOTE_ADDR’];

echo $_SERVER[‘SERVER_ADDR’];

 

5、用PHP打印出前一天的時間,格式例如 2006-5-10 22:21:21(10分)

strftime(“%Y-%m-%d %T”, strtotime(“-1 day”));

date(“Y-m-d H:i:s”, strtotime(“-1 day”));

正確回答1個即可

 

6、寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾(20分)

function dir_recurse($dir) {

    $i = 1;

    if($handle = opendir($dir)) {

        while(false !== ($file = readdir($handle))) {

            if($file != "." && $file != ".." ) {

                if(is_dir($dir."/".$file) == true) {

                    $fullpath = $dir."/".$file;

                    dir_recurse($fullpath);

                    echo "$fullpath\n";

                    $i++;

                }else {

                    $fullpath = $dir."/".$file;

                    echo "$fullpath\n";

                    $i++;

                }

            }

        }

        closedir($handle);

    }

}

 

7、創建文件exer1,設置訪問權限爲rw-r--r--,現要增加所有用戶的執行權限和同組用戶的寫權限,寫出操作過程的命令(10分)

touch exer1

chmod 644  exer1

增加權限

chmod a+x  exer1 

chmod g+w  exer1 

或者

chmod 775 exer1

 

8、字符串“to upper case” 分別用php,shell ,js實現將字符串中的字符全部轉換成大寫並輸出。(5分)

Php實現: echo strtoupper(‘to upper case’)

Shell實現:echo "to upper case" | tr 'a-z' 'A-Z'

Js實現:

<script language="javascript">
var stmp1 = " to upper case ";
alert(stmp1.toLocaleUpperCase());//轉換成大寫
alert(stmp1.toUpperCase())//轉換成大寫
</script>

 

9、用root登陸mysql數據庫,如果mydb不存在,則在mysql中創建數據庫mydb,

給root用戶分配所有權限從192.168.1.1 ip來訪問mysdb數據庫。(root用戶密碼爲空)(10分)

 

CREATE DATABASE IF NOT EXISTS mydb; 

grant all on mydb.* to root@’ 192.168.1.1’ identified by '' ;

 

10、表1 message 字段如下:(15分)

Id

自增id

Title

標題

Content

內容

category_id

分類id

Hits

點擊量

表2 字段如下comment

comment_id

回覆id

Id

關聯message表中的id

comment_content

回覆內容

現通過查詢數據庫需要得到以下格式的列表,並按照回覆數量排序,

回覆最高的排在最前面

“文章id 文章標題 點擊量 回覆數量”

請寫出sql:

 

SELECT 

M.`id`, M.`title`, M.`hits`, COUNT(C.`comment_id`) AS CNT 

FROM 

    `message` AS M LEFT JOIN `comment` AS C ON M.`id` = C.`id` 

GROUP BY M.`id` 

ORDER BY CNT DESC;

12、列舉一下你知道的開源搜索引擎開發包。(5分)

    簡單描述網頁搜索引擎的工作原理(可以簡單畫出流程圖,並加以流程說明)

 

更多互聯網產品文檔 請訪問 

閱微網 開放式PM產品社區 http://www.yuewe.cn  

閱微網 新浪微博 http://t.sina.com.cn/yuewe

閱微網 超級500人QQ羣

①閱微綜合:        【22383617】(已滿)

②Axure學習交流羣: 【118736937】

③閱微項目交流羣:  【83584654】

④移動互聯網:      【32393417】

⑤移動互聯網:      【3973643】

 

 1.在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量(1)中;而鏈接到當前頁面的的前一頁面URL記錄在預定義變量(2)中

<?php
//本頁地址,SCRIPT_NAME也可以:php/test.php
echo $_SERVER['PHP_SELF']."<br />";
//鏈接到當前頁面的前一頁面的 URL 地址:
echo $_SERVER['HTTP_REFERER']."<br />";

//其它的見參考手冊:語言參考》變量》預定義變量
//前執行腳本的絕對路徑名:D:Inetpubwwwrootphp est.php 
echo $_SERVER["SCRIPT_FILENAME"]."<br />";
//正在瀏覽當前頁面用戶的 IP 地址:127.0.0.1
echo $_SERVER["REMOTE_ADDR"]."<br />";
//查詢(query)的字符串(URL 中第一個問號 ? 之後的內容):id=1&bi=2
echo $_SERVER["QUERY_STRING"]."<br />";
//當前運行腳本所在的文檔根目錄:d:inetpubwwwroot
echo $_SERVER["DOCUMENT_ROOT"]."<br />";
?>

2.執行程序段<?php echo 8%(-2) ?>將輸出__。

<?php
//參考手冊》語言參考》運算符》算術運算符》%爲取模運算,輸出0
echo 8%(-2)."<br />";
//取模 $a % $b  $a 爲負值時的結果也是負值。輸出-2
echo ((-8)%3)."<br />";
//輸出2
echo (8%(-3))."<br />";
?>

3.在HTTP 1.0中,狀態碼 401 的含義是____;如果返回“找不到文件”的提示,則可用 header 函數,其語句爲____。

答:401表示未授權;header("HTTP/1.0 404 Not Found");[見參考手冊》函數參考》HTTP函數》header]

4.數組函數 arsort 的作用是____;語句 error_reporting(2047)的作用是____。

答:arsort:對數組進行逆向排序並保持索引關係 error_reporting(2047)的作用是:report All errors and warnings

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

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

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

見參考手冊》目錄》II. 安裝與配置》6. Windows 系統下的安裝Microsoft Windows 下的 Apache 2.0.x

7.語句 include 和 require 都能把另外一個文件包含到當前文件中,它們的區別是____;爲了避免多次包含同一文件,可以用語句____來代替它們。
答:在如何處理失敗時,include() 產生一個警告而 require() 則導致一個致命錯誤;require_once()/include_once()

8.一個函數的參數不能是對變量的引用,除非在php.ini中把____設爲on.
答:allow_call_time_pass_reference boolean :是否啓用在函數調用時強制參數被按照引用傳遞, 見參考手冊》附錄G

9.SQL 中LEFT JOIN的含義是__,如果 tbl_user記錄了學生的姓名(name)和學號(ID),
tbl_score記錄了學生(有的學生考試以後被開除了,沒有其記錄)的學號(ID)和考試成績(score)以及考試科目(subject),要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句____.

答:自然左外連接

create database phpinterview;
use phpinterview
create table tbl_user
(
   ID                             int                            not null,
   name                           varchar(50)                    not null,
   primary key (ID)
);
create table tbl_score
(
   ID                             int                            not null,
   score                          dec(6,2)                       not null,
   subject                        varchar(20)                    not null
);

insert into tbl_user (ID, name) values (1'beimu');
insert into tbl_user (ID, name) values (2'aihui');
insert into tbl_score (ID, score, subject) values (190'語文');
insert into tbl_score (ID, score, subject) values (180'數學');
insert into tbl_score (ID, score, subject) values (286'數學');
insert into tbl_score (ID, score, subject) values (296'語文');

select A.id,sum(B.score) as sumscore
from tbl_user A left join tbl_score B
on A.ID=B.ID
group by A.id

10.  在PHP中,heredoc是一種特殊的字符串,它的結束標誌必須____
答:結束標識符所在的行不能包含任何其它字符除";"

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

<?php
function my_scandir($dir)
{
    $files=array();
    if(is_dir($dir))
    {
        if($handle=opendir($dir))
        {
            while(($file=readdir($handle))!==false)
            {
                if($file!="." && $file!="..")
                {
                    if(is_dir($dir."/".$file))
                    {
                        $files[$file]=my_scandir($dir."/".$file);
                    }
                    else
                    {
                        $files[]=$dir."/".$file;
                    }
                }
            }
            closedir($handle);
            return $files;
        }        
    }    
}
print_r(my_scandir("D:Program FilesInternet ExplorerMUI"));
?>

 

 

 

 

 1.在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量(1)中;而鏈接到當前頁面的URL記錄在預定義變量(2)中。


答:echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"];


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


答:0


3.在HTTP 1.0中,狀態碼 401 的含義是(4);如果返回“找不到文件”的提示,則可用 header 函數,其語句爲(5)。

答:(4)未授權 (5) header("HTTP/1.0 404 Not Found");


4.數組函數 arsort 的作用是(6);語句 error_reporting(2047)的作用是(7)。


答:(6)對數組進行逆向排序並保持索引關係  (7)All errors and warnings


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


答:/<[^>].*?>.*?<\/>/si


6.以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句(10)動態裝載PHP模塊,

然後再用語句(11)使得Apache把所有擴展名爲php的文件都作爲PHP腳本處理。


答:(10) LoadModule    php5_module "D:/xampp/apache/bin/php5apache2.dll"

   (11) AddType application/x-httpd-php-source .phps

        AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml


7.語句 include 和 require 都能把另外一個文件包含到當前文件中,它們的區別是(12);爲了避免多次包含同一文件,可以用語句(13)來代替它們。

答:(12) 發生異常時include產生警告require產生致命錯誤  (13) require_once()/include_once()


8.類的屬性可以序列化後保存到 session 中,從而以後可以恢復整個類,這要用到的函數是(14)。


答:serialize() /unserialize()


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


答:allow_call_time_pass_reference


10.SQL 中LEFT JOIN的含義是(16)。

如果 tbl_user記錄了學生的姓名(name)和學號(ID),

tbl_score記錄了學生(有的學生考試以後被開除了,沒有其記錄)的學號(ID)和考試成績(score)以及考試科目(subject),

要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句(17)。


 


答:(16) 自然左外連接

     (17) select name , count(score) as sum_score from tbl_user left join tbl_score on tbl_user.ID=tbl_score.ID  group by tbl_user.ID


11..在PHP中,heredoc是一種特殊的字符串,它的結束標誌必須(18)。


答:結束標識符所在的行不能包含任何其它字符除";"


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


答:echo date('Y-m-d H:i:s', strtotime('-1 day'));


13.echo(),print(),print_r()的區別


答:echo是語言結構,無返回值;print功能和echo基本相同,不同的是print是函數,有返回值;print_r是遞歸打印,用於輸出數組對象


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


答:.用strrev函數唄,不準用PHP內置的就自己寫:

strrev($str)

{

    $len=strlen($str);

    $newstr = '';

    for($i=$len;$i>=0;$i--)

    {

        $newstr .= $str{$i};

    }

    return $newstr;

}

15.實現中文字串截取無亂碼的方法。


答:mb_substr()


16.使用php寫一段簡單查詢,查出所有姓名爲“張三”的內容並打印出來

表名User

Name          Tel              Content         Date

張三        13333663366        大專畢業       2006-10-11

張三        13612312331        本科畢業       2006-10-15

張四        021-55665566       中專畢業       2006-10-15


答:SELECT Name,Tel,Content,Date FROM User WHERE Name='張三'

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

class test

{

    Get_test($num)

    {

        $num=md5(md5($num)."En");

        return $num;

    }

}

答:用法:

$get_test = new test();

$result = $get_test->Get_test(2);



將$num變量進行兩次md5後返回,第2次的md5中的參數,在第一次md5($num)後多加了En

18.使用五種以上方式獲取一個文件的擴展名

要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,


答:使用五種以上方式獲取一個文件的擴展名



1)

get_ext1($file_name)

{

    return strrchr($file_name, '.');

}



2)

get_ext2($file_name)

{

    return substr($file_name, strrpos($file_name, '.'));

}



3)

get_ext3($file_name)

{

    return array_pop(explode('.', $file_name));

}



4)

get_ext4($file_name)

{

    $p = pathinfo($file_name);

    return $p['extension'];

}



5)

get_ext5($file_name)

{

    return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.')));

}

19.如何修改SESSION的生存時間


這個函式庫讓你處理和顯示各式格式的圖檔,它的另一個常見用途是製作所圖檔。GD 以外的另一個選擇是 ImageMagick,但這個函式庫並不內建於 PHP 之中,必須由系統管理員安裝在伺服器上答:其實 Session 還提供了一個函數 session_set_cookie_params(); 來設置 Session 的生存期的,該函數必須在 session_start() 函數調用之前調用:

<?php 

// 保存一天 

$lifeTime = 24 * 3600; 

session_set_cookie_params($lifeTime); 

session_start();

$_SESSION["admin"] = true; 

?>

20. 請寫一個函數,實現以下功能: 字符串“open_door” 轉換成 “OpenDoor”、”make_by_id” 轉換成 ”MakeById”。30.請舉例說明在你的開發過程中用什麼方法來加快頁面的加載速度

A.生成靜態HTML

B.生成xml

C.可不用數據庫的儘量不用數據庫把變量參數存於文本.

D.用ZEND加速




答:<?
Function test($str){
$arr1=explode('_',$str);
//$arr2=array_walk($arr1,ucwords( ));
 
$str = implode(' ',$arr1);
return ucwords($str);
}
$aa='open_door';
echo test($aa);
?>

21. 如何用php的環境變量得到一個網頁地址的內容?ip地址又要怎樣得到?


答:$_SERVSR[‘REQUEST_URI’]

$_SERVER[‘REMOTE_ADDR’]


22.求兩個日期的差數,例如2007-2-5 ~ 2007-3-6 的日期差數 

答:(strtotime(‘2007-3-6’)-strtotime(‘2007-2-5’))/3600*24


23.表中有A B C三列,用SQL語句實現:當A列大於B列時選擇A列否則選擇B列,當B列大於C列時選擇B列否則選擇C列。


答:select case when A>B then A else B end,

       case when B>C then B else C end

From test


24.請簡述項目中優化sql語句執行效率的方法,從哪些方面,sql語句性能如何分析?


答:(1)選擇最有效率的表名順序

(2)WHERE子句中的連接順序

(3)SELECT子句中避免使用‘*’

(4)用Where子句替換HAVING子句

(5)通過內部函數提高SQL效率

(6)避免在索引列上使用計算。

(7)提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉。


25.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() 的值。


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

$date='08/26/2003';print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)",");

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

// 對應一個或更多 0-9,後面緊隨一個斜號$regExpression = "([0-9]+)/";// 應一個或更多 0-9,後面緊隨另一個斜號$regExpression .= "([0-9]+)/";// 再次對應一個或更多 0-9$regExpression .= "([0-9]+)";至於 則是用來對應括號,第一個括號對的是月份,


27.GD 函式庫用來做什麼?


答:這個函式庫讓你處理和顯示各式格式的圖檔,它的另一個常見用途是製作所圖檔。GD 以外的另一個選擇是 ImageMagick,但這個函式庫並不內建於 PHP 之中,必須由系統管理員安裝在伺服器上


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

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


29.防止SQL注射漏洞一般用__addslashes___函數。


30.PHP中傳值和傳引用、傳地址的區別是什麼?


答:傳值是把實參的值賦值給行參 那麼對行參的修改,不會影響實參的值 

傳地址 是傳值的一種特殊方式,只是他傳遞的是地址,不是普通的如int 那麼傳地址以後,實參和行參都指向同一個對象


31。如何通過javascript判斷一個窗口是否已經被屏蔽

答:獲取open()的返回值,如果是null,就是屏蔽了



33.對於大流量的網站,您採用什麼樣的方法來解決訪問量問題


答:首先,確認服務器硬件是否足夠支持當前的流量

其次,優化數據庫訪問。

第三,禁止外部的盜鏈。

第四,控制大文件的下載。

第五,使用不同主機分流主要流量

第六,使用流量分析統計軟件

 

編程題
   1. 寫一個函數,儘可能高效的,從一個標準 url 裏取出文件的擴展名
  例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
      function getext($url) {

       $w_param = pathinfo($url);

      $str = $w_param['filename'];

      list($type, $vars) = explode('?',$str);

      $kuozhan=explode('.',$type);

       return $kuozhan[1];

}


1、
  2. 在 HTML 語言中,頁面頭部的 meta 標記可以用來輸出文件的編碼格式,以下是一個標準的 meta 語句
  請使用 PHP 語言寫一個函數,把一個標準 HTML 頁面中的類似 meta 標記中的 charset 部分值改爲 big5
  請注意:
  1. 需要處理完整的 html 頁面,即不光此 meta 語句
  2. 忽略大小寫
  3. ' 和 " 在此處是可以互換的
  4. 'Content-Type' 兩側的引號是可以忽略的,但 'text/html; charset=gbk' 兩側的不行
  5. 注意處理多餘空格

  

 

 

 

3. 寫一個函數,算出兩個文件的相對路徑
  如 $a = '/a/b/c/d/e.php';
  $b = '/a/b/12/34/c.php';
  計算出 $b 相對於 $a 的相對路徑應該是 ../../c/d將()添上
    答:function getRelativePath($a, $b) {  
    $returnPath = array(dirname($b));  
    $arrA = explode('/', $a);  
    $arrB = explode('/', $returnPath[0]);  
    for ($n = 1, $len = count($arrB); $n < $len; $n++){  
       if ($arrA[$n] != $arrB[$n]) { 
           break; 
       }    
    }  
    if ($len - $n > 0) {  
       $returnPath =array_merge($returnPath, array_fill(1, $len - $n, '..'));  
    }  
      
    $returnPath = array_merge($returnPath,array_slice($arrA, $n));  
    return implode('/', $returnPath);  
  }  
  echo getRelativePath($a, $b);

 

4.寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。
  function my_scandir($dir)

{

     $files = array();

     if ( $handle = opendir($dir) ) {

         while ( ($file = readdir($handle)) !== false ) {

             if ( $file != ".." && $file != "." ) {

                 if ( is_dir($dir . "/" . $file) ) {

                     $files[$file] = scandir($dir . "/" . $file);

                 }else {

                     $files[] = $file;

                 }

             }

         }

         closedir($handle);

         return $files;

     }

}


5.簡述論壇中無限分類的實現原理。
 答:
<?php
/*
數據表結構如下:
CREATE TABLE `category` (
`categoryID` smallint(5) unsigned NOT NULL auto_increment,
`categoryParentID` smallint(5) unsigned NOT NULL default '0',
`categoryName` varchar(50) NOT NULL default '',
PRIMARY KEY (`categoryID`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
INSERT INTO `category` ( `categoryParentID`, `categoryName`) VALUES
(0, '一級類別'),
(1, '二級類別'),
(1, '二級類別'),
(1, '二級類別'),
(2, '三級類別'),
(2, '333332'),
(2, '234234'),
(3, 'aqqqqqd'),
(4, '哈哈'),
(5, '66333666');
*/
//指定分類id變量$category_id,然後返回該分類的所有子類
//$default_category爲默認的選中的分類
function Get_Category($category_id = 0,$level = 0, $default_category =0)
{
global $DB;
$sql = "SELECT * FROM category ORDER BY categoryID DESC";
$result = $DB->query( $sql );
while ($rows = $DB->fetch_array($result))
{
$category_array[$rows[categoryParentID]][$rows[categoryID]] = array('id'=> $rows[categoryID], 'parent' => $rows[categoryParentID], 'name' =>$rows
[categoryName]);
}
if (!isset($category_array[$category_id]))
{
return "";
}
foreach($category_array[$category_id] AS $key => $category)
{
if ($category['id'] == $default_category)
{
echo "<option selectedvalue=".$category['id']."";
}else
{
echo "<option value=".$category['id']."";
}
if ($level > 0)
{
echo ">" . str_repeat( " ", $level ) . "" . $category['name'] . "</option>/n";
}
else
{
echo ">" . $category['name'] ."</option>/n";
}
Get_Category($key, $level + 1, $default_category);
}
unset($category_array[$category_id]);
}
/*
函數返回的數組格式如下所示:
Array
(
[1] => Array ( [id] => 1 [name] => 一級類別[level] => 0 [ParentID] => 0 )
[4] => Array ( [id] => 4 [name] => 二級類別[level] => 1 [ParentID] => 1 )
[9] => Array ( [id] => 9 [name] => 哈哈[level] => 2 [ParentID] => 4 )
[3] => Array ( [id] => 3 [name] => 二級類別[level] => 1 [ParentID] => 1 )
[8] => Array ( [id] => 8 [name] => aqqqqqd [level] => 2[ParentID] => 3 )
[2] => Array ( [id] => 2 [name] => 二級類別[level] => 1 [ParentID] => 1 )
[7] => Array ( [id] => 7 [name] => 234234 [level] => 2[ParentID] => 2 )
[6] => Array ( [id] => 6 [name] => 333332 [level] => 2[ParentID] => 2 )
[5] => Array ( [id] => 5 [name] => 三級類別[level] => 2 [ParentID] => 2 )
[10] => Array ( [id] => 10 [name] => 66333666 [level] => 3[ParentID] => 5 )
)
*/
//指定分類id,然後返回數組
function Category_array($category_id = 0,$level=0)
{
global $DB;
$sql = "SELECT * FROM category ORDER BY categoryID DESC";
$result = $DB->query($sql);
while ($rows = $DB->fetch_array($result))
{
$category_array[$rows['categoryParentID']][$rows['categoryID']] = $rows;
}
foreach ($category_array AS $key=>$val)
{
if ($key == $category_id)
{
foreach ($val AS $k=> $v)
{
$options[$k] =
array(
'id' => $v['categoryID'], 'name' => $v['categoryName'], 'level'=> $level, 'ParentID'=>$v['categoryParentID']
);
$children = Category_array($k, $level+1);
if (count($children) > 0)
{
$options = $options + $children;
}
}
}
}
unset($category_array[$category_id]);
return $options;
}
?>

<?php
class cate
{
       function Get_Category($category_id= 0,$level = 0, $default_category = 0)
       {
            echo$category_id;
            $arr= array(
            '0' => array(
                           '1' => array('id' => 1, 'parent' => 0, 'name' => '1111'),
                           '2' => array('id' => 2, 'parent' => 0, 'name' => '2222'),
                          '4' => array('id' => 4, 'parent' => 0, 'name' =>'4444')    
                        ),
            '1' => array(
                            '3' => array('id' => 3, 'parent' => 1, 'name' => '333333'),
                          '5' => array('id' => 5, 'parent' => 1, 'name' => '555555')    
                          ),
                        
            '3' => array(
                          '6' => array('id' => 6, 'parent' => 3, 'name' => '66666'),
                          '7' => array('id' => 7, 'parent' => 3, 'name' => '77777')
                          ),
            '4' => array(
                          '8' => array('id' => 8, 'parent' => 4, 'name' => '8888'),
                          '9' => array('id' => 9, 'parent' => 4, 'name' => '9999')
                          )    
            );
            if(!isset($arr[$category_id]))
            {
              return "";
            }
    
           foreach($arr[$category_id] AS $key => $cate)
            {
               if ($cate['id'] == $default_category)
               {
                   $txt = "<option selected value=".$cate['id']."";
               }else{
                   $txt = "<option value=".$cate['id']."";
               }
           
               if ($level > 0)
               {
                  $txt1 = ">" . str_repeat( "-", $level ) . " ". $cate['name'] . "</option>/n";
               }else{
                   $txt1 = ">" . $cate['name'] . "</option>/n";
               }
               $val = $txt.$txt1;
               echo $val;
               self::Get_Category($key, $level + 1, $default_category);
            }
           
       }
       
       
       function getFlush($category_id =0,$level = 0, $default_category = 0)
       {
           
           ob_start();
          self::Get_Category($category_id ,$level, $default_category);
           $out =ob_get_contents();
          ob_end_clean();
           return$out;
       }    
}
$id =$_GET['id'];
echo "<select>";
$c = new cate();
//$c->Get_Category();
$ttt=  $c->getFlush($id,'0','3');
echo $ttt;
echo "</select>";
?>

發佈了12 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章