當前位置:才華齋>計算機>php語言>

PHP面試題及答案(彙總)

php語言 閱讀(1.08W)

PHP語言使用廣泛,語法吸收了C語言、Java和Perl的特點。本文是本站小編搜尋整理的關於PHP面試題及答案(彙總),供參考借鑑,希望對大家有所幫助!想了解更多相關資訊請持續關注我們應屆畢業生考試網!

PHP面試題及答案(彙總)

  基礎題:

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

答:get是傳送請求HTTP協議通過url引數傳遞進行接收,而post是實體資料,可以通過表單提交大量資訊.

ion與cookie的區別?

答:session:儲存使用者訪問的全域性唯一變數,儲存在伺服器上的PHP指定的目錄中的(session_dir)的位置進行的存放

cookie:用來儲存連續訪問一個頁面時所使用,是儲存在客戶端,對於Cookie來說是儲存在使用者WIN的Temp目錄中的。

兩者都可通過時間來設定時間長短

3.資料庫中的事務是什麼?

答:事務(transaction)是作為一個單元的一組有序的資料庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,

事務則提交,其修改將作用於所有其他資料庫程序。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。

  簡述題:

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

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

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

答:echo是PHP語句, print和print_r是函式,語句沒有返回值,函式可以有返回值(即便沒有用)

print() 只能打印出簡單型別變數的值(如int,string)

print_r() 可以打印出複雜型別變數的值(如陣列,物件)

echo 輸出一個或者多個字串

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

答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate

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

答:cvs,svn,vss;

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

答:echo strrev($a);

7、優化MySQL資料庫的方法。(4分,多寫多得)

答:

1、選取最適用的欄位屬性,儘可能減少定義欄位長度,儘量把欄位設定NOT NULL,例如'省份,性別',最好設定為ENUM

2、使用連線(JOIN)來代替子查詢:

a.刪除沒有任何訂單客戶:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)

b.提取所有沒有訂單客戶:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)

c.提高b的速度優化:SELECT FROM customerinfo LEFT JOIN orderid omerid=omerid

WHERE omerid IS NULL

3、使用聯合(UNION)來代替手動建立的臨時表

a.建立臨時表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`

4、事務處理:

a.保證資料完整性,例如新增和修改同時,兩者成立則都執行,一者失敗都失敗

mysql_query("BEGIN");

mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";

mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");

mysql_query("COMMIT");

5、鎖定表,優化事務處理:

a.我們用一個 SELECT 語句取出初始資料,通過一些計算,用 UPDATE 語句將新值更新到表中。

包含有 WRITE 關鍵字的 LOCK TABLE 語句可以保證在 UNLOCK TABLES 命令被執行之前,

不會有其它的訪問來對 inventory 進行插入、更新或者刪除的操作

mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");

mysql_query("SELECT customerid FROM `customerinfo` where id=".$id);

mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where customerid=".$id);

mysql_query("UNLOCK TABLES");

6、使用外來鍵,優化鎖定表

a.把customerinfo裡的customerid對映到orderinfo裡的customerid,

任何一條沒有合法的customerid的記錄不會寫到orderinfo裡

CREATE TABLE customerinfo

(

customerid INT NOT NULL,

PRIMARY KEY(customerid)

)TYPE = INNODB;

CREATE TABLE orderinfo

(

orderid INT NOT NULL,

customerid INT NOT NULL,

PRIMARY KEY(customerid,orderid),

FOREIGN KEY (customerid) REFERENCES customerinfo

(customerid) ON DELETE CASCADE

)TYPE = INNODB;

注意:'ON DELETE CASCADE',該引數保證當customerinfo表中的一條記錄刪除的話同時也會刪除order

表中的該使用者的所有記錄,注意使用外來鍵要定義事務安全型別為INNODB;

7、建立索引:

a.格式:

(普通索引)->

建立:CREATE INDEX <索引名> ON tablename (索引欄位)

修改:ALTER TABLE tablename ADD INDEX [索引名] (索引欄位)

創表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引欄位))

(唯一索引)->

建立:CREATE UNIQUE <索引名> ON tablename (索引欄位)

修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引欄位)

創表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引欄位))

(主鍵)->

它是唯一索引,一般在建立表是建立,格式為:

CREATA TABLE tablename ([...],PRIMARY KEY[索引欄位])

8、優化查詢語句

a.最好在相同欄位進行比較操作,在建立好的索引欄位上儘量減少函式操作

例子1:

SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)

SELECT * FROM order WHERE orderDate<"2008-01-01";(快)

例子2:

SELECT * FROM order WHERE addtime/7<24;(慢)

SELECT * FROM order WHERE addtime<24*7;(快)

例子3:

SELECT * FROM order WHERE title like "%good%";

SELECT * FROM order WHERE title>="good" and name<"good";

8、PHP的意思(送1分)

答:PHP是一個基於服務端來建立動態網站的指令碼語言,您可以用PHP和HTML生成網站主頁

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

答:now(),date()

10、實現中文字串擷取無亂碼的方法。(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){

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

$i++;

}else{

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

}

}

return $str.'...';

}else{

return $string;

}

}

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

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

答:用過,smarty

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

答:資訊分類

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

答:確認伺服器硬體是否足夠支援當前的流量,資料庫讀寫分離,優化資料表,

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

  程式設計題:

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;

}

}

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/';

$b = '/a/b/12/34/';

計算出 $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)的作用是__報告所有錯誤和警告__。

中的資料庫連線字串格式是____。

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

7.以Apache模組的方式安裝PHP,在檔案中首先要用語句____動態裝載PHP模組,然後再用語句____使得Apache把所有副檔名為php的檔案都作為PHP指令碼處理。

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

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

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

10.一個函式的引數不能是對變數的引用,除非在中把__allow_call_time_pass_reference boolean__設為on.

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

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

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