筆試題1

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

echo date(‘Y-m-d H:i:s’,date(‘U’)-86400);

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


2、echo(),print(),print_r()的區別(3分)

echo 是PHP語句,語句是沒有返回值的,而print和print_r是函數,函數可以有返回值。
print只能打印出簡單類型變量的值(如int,string)
print_r可以打印出複雜類型變量的值(如數組,對象)
echo -- 輸出一個或者多個字符串


3、能夠使HTML和PHP分離開使用的模板(1分)

smarty模板


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

CVS和SVN [ subversion ]


5、如何實現字符串翻轉?(3分)

使用php函數strrev( ‘abc’)


6、優化MYSQL數據庫的方法。(4分,多寫多得)

(1).選取最適用的字段屬性,應該儘量把字段設置爲NOT NULL,這樣在將來執行查詢的時候,數據庫不用去比較NULL值。
(2).使用連接(JOIN)來代替子查詢(Sub-Queries)
(3).使用聯合(UNION)來代替手動創建的臨時表
(4).儘量少使用 LIKE 關鍵字和通配符
(5).使用事務和外鍵


7、PHP的意思(送1分)

PHP 是一種服務器端的,嵌入HTML的腳本語言。

英文“超級文本預處理語言”(Hypertext Preprocessor)的縮寫


8、MYSQL取得當前時間的函數是?,格式化日期的函數是(2分)

now( ) date_format( date, format )


9、實現中文字串截取無亂碼的方法。(3分)

當用 substr 截取中文字符的時候會出現亂碼,當然你如果裝了 mb 擴展, 用 mb_substr截取就不會出現這種問題,如果你用的是虛擬主機,主機上又沒裝 mb擴展的話,你可以用下面的函數截取

# Cut chinese string into appointed length
# @param [string] string need deal
# @param [start] position to cut from
# @param [length] length to cut
# @return string
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){
     $str.=substr($string,$i,2);
     $i++;
    }else{
     $str.=substr($string,$i,1);
    }
   }
   return $str.'...';
}else{
   return $string;
}
}


10、您是否用過版本控制軟件? 如果有您用的版本控制軟件的名字是?(1分)

CVS subversion


11、您是否用過模板引擎? 如果有您用的模板引擎的名字是?(1分)

Smarty Discuz


12、請簡單闡述您最得意的開發之作(4分)

。。。


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

首先,確認服務器硬件是否足夠支持當前的流量
其次,優化數據庫訪問。
第三,禁止外部的盜鏈。
第四,控制大文件的下載。
第五,使用不同主機分流主要流量
第六,使用流量分析統計軟件。

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

服務器:$_SERVER['SERVER_ADDR']

客戶端:$_SERVER['REMOTE_ADDR']


15、語句include和require的區別是什麼?爲避免多次包含同一文件,可用(?)語句代替它們? (2分)

1、PHP程序執行到require()時,只會讀取一次檔案,故常放在程序開頭,檔案引入後PHP會將網頁檔重新編譯,讓引入檔成爲原先網頁的一部分。

2、PHP程序執行到include()時,每次皆會讀取檔案,故常用於流程控制的區段,如條件判斷或循環中。

3、require() :如果文件不存在,會報出一個fatal error.腳本停止執行

4、include() : 如果文件不存在,會給出一個 warning,但腳本會繼續執行

5、推薦使用require_once()和include_once(),可以檢測文件是否有重複包含。
16、如何修改SESSION的生存時間(1分).

1.將php.ini 中session.gc_maxlifetime 設置爲 9999(默認爲 1440)重啓 apache 即可

2.

$savePath = "./session_save_dir/";

$lifeTime = 24 * 3600;

session_save_path($savePath);

session_set_cookie_params($lifeTime);

session_start();

3.

setcookie() 或session_set_cookie_params($lifeTime)
17、有一個網頁地址, 比如PHP開發資源網主頁:
http://www.baidu.com/index.html,如何得到它的內容?($1分)

//需要讀取的page地址
$http_page_url="
http://www.baidu.com/index.html";
//打開遠程文件
$read_file=fopen($http_page_url,"rb");
if (!feof($read_file)) {
//讀取遠程文件
$file_stream = "";
do {
$data = fread($read_file, 8192);
if (strlen($data) == 0) {
break;
}
$file_stream.= $data;
} while(true);
}

echo $file_stream; //輸出內容

對 PHP 5 及更高版本可以:

<?php

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

$contents = stream_get_contents($handle);

fclose($handle);

echo $contents;

?>

最簡單的方法是調用函數:

<?php

print file_get_contents('http://www.baidu.com/index.html');

?>

18、在HTTP 1.0中,狀態碼401的含義是(?);如果返回“找不到文件”的提示,則可用 header 函數,其語句爲(?);(2分)

狀態值爲401,代表未被授權; header("Location: http://www.php.net");   


19、在PHP中,heredoc是一種特殊的字符串,它的結束標誌必須?(1分)

heredoc的語法是用"<<<"加上自己定義成對的標籤,在標籤範圍內的文字視爲一個字符串

<?php
$str = <<<EOD
I saw a dog yesterday.
EOD;
?>
需要注意的是:

1、"<<<"後面的EOD是自己定義的標籤名稱,必須要成對,而且後面要加上分號表示結束。2、結束的標籤前面最好不要有空格,以免發生錯誤!


20、談談asp,php,jsp的優缺點(1分)

ASP全名Active Server Pages,是一個WEB服務器端的開發環境, 利用它可以產生和運
行動態的、交互的、高性能的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 服務器的技術
,客戶端瀏覽器不需要任何附加的軟件支持。

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

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

SELECT username FROM members ORDER BY posts DESC LIMIT 0,10;


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

Call by value (傳值):指從主程序將變量內容傳遞給函數的參數,無論在函數內如何修改、變化該參數值,都不影響主程序原本變量的內容,即使變量名稱相同。

調用方式:函數名(參數1,參數2);

Call by address (傳引用):指從主程序將變量地址傳遞給函數的參數,在函數內若修改、變化該參數值,會修改主程序原本變量的內容,即主程序與函數存取的是同一變量。

調用方式:函數名(&參數1,&參數2);

按值傳遞:函數範圍內對值的任何改變在函數外部都會被忽略
按引用傳遞:函數範圍內對值的任何改變在函數外部也能反映出這些修改
優缺點:按值傳遞時,php必須複製值。特別是對於大型的字符串和對象來說,這將會是一個代價很大的操作。
按引用傳遞則不需要複製值,對於性能提高很有好處。


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

error_reporting( ) 用於設置php的偵聽錯誤的級別.[用來配置錯誤信息回報的等級].

<?php
// Turn off all error reporting
error_reporting(0);
// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);
// Report all PHP errors

error_reporting(E_ALL);
// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
?>


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

(1)Javascript實現:

function checkEmail(form){

   re=/^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$/i;

if(re.test(form.value)){

         alert(‘符合驗證’);

}else{

     alert(‘驗證失敗’);

}

}

(2)php實現

function CheckMailAdr($str){
return(eregi(“^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$“,$str));
}


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

說明:例如有一個腳本 www.domain.com,傳給他的參數有參數1,參數2,參數3…。傳遞參數的方法有可能是GET有可能是POST,那麼現在請寫出類似:http://www.domain.com/script.php?參數1=值1&參數2=值2….. 的結果。

1獲取所有參數:可以用以下方法:
//獲取post的數據
while (list($var, $value) = each($HTTP_POST_VARS))
{
    echo “$var = $value n“;
}
//獲取get方式的數據
while (list($var, $value) = each($HTTP_GET_VARS))
{
    echo “$var = $value n“;
}

2. echo $_SERVER['scrīpt_FILENAME']."?".$_SERVER['QUERY_STRING'];


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

彈出對話框: alert(),prompt(),confirm()
獲得輸入焦點 focus()


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

轉向函數 window.location.href

引入外部JS文件:<script type="text/javascript" src="js/js_function.js"></script>


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

@foo()有控制錯誤輸出


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

class myclass{ }


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

$newmyclass = new myclass();


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

$newmyclass = new myclass();
$temp=$newmyclass->test;
$newmyclass->test="a";


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

mysql_fetch_row -- 從結果集中取得一行作爲枚舉數組
mysql_fetch_array -- 從結果集中取得一行作爲關聯數組,或數字數組,或二者兼有


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

gd庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。
在網站上GD庫通常用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。


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

1. echo ‘<html></html>’;直接輸出

2. require include 包含進來一段html代碼

3. 由XML文件得到


36、下面哪個函數可以打開一個文件,以對文件進行讀和寫操作?(1分)
    (a) fget() (b) file_open()   (c) fopen()   (d) open_file()

(c)是正確的


37、下面哪個選項沒有將 john 添加到users 數組中? (1分)
    (a) $users[] = ‘john’;
    (b) array_add($users,’john’);
    (c) array_push($users,‘john’);
    (d) $users ||= ‘john’;

(b) (d) 均是錯誤的寫法


38、下面的程序會輸入是否?(1分)
    <?php
      $num = 10;
      function multiply(){
        $num = $num * 10;
      }
      multiply();
      echo $num;
    ?>
輸出 10


39、使用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($row=mysql_fetch_array($result))
{
    echo $row['Name'].$row['Tel'].$row['Content'].$row['Date'];
    echo "<br>";
}


40、如何使用下面的類,並解釋下面什麼意思?(3)
class test{
   function Get_test($num){
      $num=md5(md5($num)."En");
      return $num;
   }
}

雙重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("xiaotian_ls");


41、寫出 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語句新增至表中

INSERT INTO User('Name','Tel','Content','Date') VALUES('小王','13254748547','高中畢業','2007-05-06')
(b) 請用sql語句把張三的時間更新成爲當前系統時間

UPDATE User SET Date=DATE_FORMAT(NOW(),'%Y-%m-%d') WHERE Name='張三'
(c) 請寫出刪除名爲張四的全部記錄

DELETE FROM User WHERE Name='張四'


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

int 數值類型 char 固定長度字符串 varchar 可變長字符串 datetime 日期時間型 text 字符字符串
char列的長度固定爲創建表時聲明的長度.varchar列中的值爲可變長字符串.


43、MySQ自增類型(通常爲表ID字段)必需將其設爲(?)字段(1分)

AUTO_INCREMENT


44、寫出以下程序的輸出結果 (1分)
   <?
    $b=201;
    $c=40;
    $a=$b>$c?4:5;
    echo $a;
   ?>

4


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

isset($a) empty($a)


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

mysql_num_rows($res);


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

echo $arr[0];


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

echo $arr[0].$arr[1].$arr[2];


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

echo $a{0};


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

可以


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

private protected public


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

__construct __destruct


53、以下請用PHPMYADMIN完成
(一)創建新聞發佈系統,表名爲message有如下字段 (3分)
id 文章id
title 文章標題
content 文章內容
category_id 文章分類id
hits 點擊量


CREATE TABLE 'message'(
    'id' int(11) NOT NULL auto_increment,
    'title' varchar(200) default NULL,
    'content' blob,
    'category_id' int(11) default NULL,
    'hits' int(11) default NULL,
    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.在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量____中;而鏈接到當前頁面的URL記錄在預定義變量____中。

2.執行程序段將輸出____。

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

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

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

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

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

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

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

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

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

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

  編程題


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

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將()添上

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

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


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