第一篇php常見筆試題

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

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

2.session與cookie的區別?

①cookie數據存放在客戶的瀏覽器上,session數據放在服務器上

②cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙

考慮到安全應當使用session

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

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

④單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie

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

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

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

//strtotime成功則返回時間戳,否則返回FALSE

echo date("Y-m-d H:i:s",strtotime("now")), "\n";

echo date("Y-m-d H:i:s",strtotime("10 September 2000")), "\n";

echo date("Y-m-d H:i:s",strtotime("+1 day")), "\n";

echo date("Y-m-d H:i:s",strtotime("+1 week")), "\n";

echo date("Y-m-d H:i:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "\n";

echo date("Y-m-d H:i:s",strtotime("next Thursday")), "\n";

echo date("Y-m-d H:i:s",strtotime("last Monday")), "\n";

echo date("Y-m-d H:i:s",strtotime("-1 day")), "\n";

2016-09-21 21:42:40

2000-09-10 00:00:00

2016-09-22 21:42:40

2016-09-28 21:42:40

2016-10-01 01:42:42

2016-09-22 00:00:00

2016-09-19 00:00:00

2016-09-20 21:42:40

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

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

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

Git、svn、vss、cvs

7.反轉字符串,如何實現字符串翻轉?(3分) revease ?strrev

strrev("hello world!")

8.優化MYSQL數據庫的方法。

①、選取最適用的字段屬性,盡可能減少定義字段長度,盡量把字段設置NOT NULL,例如’省份,性別’,最好設置為ENUM

②、使用連接(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 customerinfo.customerid=orderinfo.customerid

WHERE orderinfo.customerid IS NULL

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

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

④、事務處理:

a.保證數據完整性,例如添加和修改同時,兩者成立則都執行,一者失敗都失敗

mysql_query(“BEGIN”);

mysql_query(“INSERT INTO customerinfo (name) 8i VALUES (‘$name1′)”;

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

mysql_query(“COMMIT”);

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

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

包含有WRITE(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”);

⑥、使用外鍵,優化鎖定表

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;

⑦、建立索引:

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[索引字段])

⑧、優化查詢語句

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";

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

答:確認服務器硬件是否足夠支持當前的流量,數據庫讀寫分離,優化數據表,程序功能規則,禁止外部的盜鏈,控制大文件的下載,使用不同主機分流主要流量。

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

echo "客戶端::".getenv('REMOTE_ADDR')." or ".$_SERVER['REMOTE_ADDR'];

echo "服務端::".gethostbyname("www.baidu.com");

11.如何用最簡單的方法打印$str =“abcde”每個字母;可以用substr()

答:for($i=0;$i

Echo substr($str,$i,1);//或$string{$i}或$string[$i]

}

備注:都是向前的,第三個參數若為空則說明第二個參數指定下標后剩余的都要完

echosubstr('abcdef',1);// bcdef

echosubstr('abcdef',1,3);// bcd

echosubstr('abcdef',0,4);// abcd

echosubstr('abcdef',0,8);// abcdef

echosubstr('abcdef', -1,1);// f

// Accessing single characters in a string

// can also be achived using "curly braces"

$string='abcdef';

echo$string{0};// a

echo$string{3};// d

echo$string{strlen($string)-1};// f

$rest=substr("abcdef", -1);// returns "f"

$rest=substr("abcdef", -2);// returns "ef"

$rest=substr("abcdef", -3,1);// returns "d"

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

Require是無條件包含、無返回值(快的原因?),無論條件成立與否都會先執行require,但若其文件不存在或有語法錯誤則會報出fatal error致命性錯誤。

Include是有條件包含、有返回值,若文件不存在或語法錯誤會給出warning警告,但腳本仍繼續執行

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

答:方法1:將php.ini中的session.gc_maxlifetime設置為9999重啟apache

14.如何修改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:setcookie() and session_set_cookie_params($lifeTime);

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

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

$contents = stream_get_contents($readcontents);

fclose($readcontents);

echo $contents;

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

答:狀態401代表未被授權,header(“Location:www.xxx.php”);

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

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

18.PECL和PEAR是什么?

PEAR: PHP Extension and Application Repository(PHP擴展和應用倉庫)補充的是上層功能

將PHP程序開發過程中常用的功能編寫成類庫,涵蓋了頁面呈現、數據庫訪問、文件操作、數據結構、緩存操作、網絡協議、WebService等許多方面,用戶可以通過下載這些類庫并適當的作一些定制以實現自己需要的功能

PECL: PHP Extension Community Language(PHP擴展庫)補充的是底層功能

PECL可以看作PEAR的一個組成部分,提供了與PEAR類似的功能。不同的是PEAR的所有擴展都是用純粹的PHP代碼編寫的,用戶在下載到PEAR擴展以后可以直接使用將擴展的代碼包含到自己的PHP文件中使用。而PECL是使用C語言開發的,通常用于補充一些用PHP難以完成的底層功能,往往需要重新編譯或者在配置文件中設置后才能在用戶自己的代碼中使用

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

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

20.foo()和@foo()之間有什么區別?(1分)

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

21.mysql_fetch_row()和mysql_fetch_array之間有什么區別? (1分)

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

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

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

DESC是descend降序意思asc是ascend升序。

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

注:MySQL數據庫limit分頁、排序-SQL語句示例

select?*?from?persons?limit??A,??B;

解釋:A,查詢起點 ,若為limit B則默認A為0

B,你需要的行數

23.請說明php中傳值與傳引用的區別。什么時候傳值什么時候傳引用?

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

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

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

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

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

25.在PHP中error_reporting這個函數有什么作用?

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

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

dy@sina.com

8047@qq.com

yahu@.com.cn

dy@163.com

dy_35

答: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);

}

27.

28、如何使用下面的類,并解釋下面什么意思?(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方法,實例化類調用方法多字符串加密

29、寫出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='張四'");

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

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

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

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

$b=201;

$c=40;

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

echo $a;

?>

答:4

32.不使用第三個變量交換兩個變量的值:?

33.GD庫是做什么用的? (1分)

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

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

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

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

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

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

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

注:array_push()將array當成一個棧,并將傳入的變量壓入array的末尾。array的長度將根據入棧變量的數目增加。

35.寫一個函數,盡可能高效的,從一個標準url里取出文件的擴展名

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

36.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容