PHP面試試題

weixin_34162629發表於2016-12-01

1,用PHP列印出前一天的時間,格式是2006-5-10 22:21:21
echo date("Y:m:d H:i:s",strtotime("-1 day"));
?>
2,echo(),print(),print_r()的區別
echo是語言結構,無返回值;print功能和echo基本相同,不同的是print是函式,有返回值;print_r是遞迴列印,用於輸出陣列物件
3,能夠使HTML和PHP分離開使用的模板
smarty, PHPLib, FastTemplate, Savant,MiniTemplator,TagTemplate
4,如何實現PHP、JSP互動
$foo = new Java(’java.lang.System’);
5,使用哪些工具進行版本控制
CVS或SVN
CVS Server on Apache作服務端,WinCVS作客戶端
Subversion on Apache/DAV 做服務端,TortoiseSVN做客戶端
6,如何實現字串翻轉
$str=strrev("Wilson Peng");
echo $str;
?>
7,優化MYSQL資料庫的方法
(1)選取最適用的欄位屬性,儘可能減少定義欄位長度,儘量把欄位設定NOT NULL,例如’省份,性別’,最好設定為ENUM
(2)使用連線(JOIN)來代替子查詢:
(3)使用聯合(UNION)來代替手動建立的臨時表
(4)事務處理:
保證資料完整性,例如新增和修改同時,兩者成立則都執行,一者失敗都失敗
mysql_query(”BEGIN”);
mysql_query(”INSERT INTO customerinfo (name) VALUES (’$name1′)”;
mysql_query(”SELECT * FROM `orderinfo` where customerid=”.$id”);
mysql_query(”COMMIT”);
(5)鎖定表,優化事務處理:
我們用一個 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)使用外來鍵,優化鎖定表
(7)建立索引:
(8)優化查詢語句
最好在相同欄位進行比較操作,在建立好的索引欄位上儘量減少函式操作
SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)
SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
SELECT * FROM order WHERE addtime/7<24;(慢)
SELECT * FROM order WHERE addtime<24*7;(快)
SELECT * FROM order WHERE title like "%good%";
SELECT * FROM order WHERE title>=”good” and name<"good";
8,實現中文字串擷取無亂碼的方法
$str = '我是一串比較長的中';
echo "mb_substr:" . mb_substr($str, 0, 6, 'utf-8');
echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8');
?>
mb_substr:我是一串比較
mb_strcut:我是
mb_substr是按字來切分字元,而mb_strcut是按位元組來切分字元,但是都不會產生半個字元的現象
9,用PHP寫出顯示客戶端IP與伺服器IP的程式碼
echo $_SERVER[‘REMOTE_ADDR’];
getenv('REMOTE_ADDR');
//客戶端IP
$ip=gethostbyname ("www.murray.cn");
//伺服器IP
echo $ip;
?>
10,在PHP中,當前指令碼的名稱(不包括路徑和查詢字串)記錄在預定義變數中;而連結到當前頁面的URL記錄在預定義變數中
echo $_SERVER['PHP_SELF'];
echo $_SERVER["HTTP_REFERER"];
11,
$null = NULL;
$bool = FALSE;
$notSet;
$array = array();
//以下是問題
$a = "hello";
$b = &$a;
unset($b);
//答案為:hello
echo $a;
$b = "world";
//答案為:hello
echo $a;
//以下是問題
$a = 1;
$x = &$a;
$b = $a++;
//答案為:1
echo $b;
//以下是問題
$x = empty($array);
//答案為:1
echo $x;
//答案為:true
echo $x?"true":"false";
?>
12,表單中 get與post提交方法的區別
get是傳送請求HTTP協議通過url引數傳遞進行接收,而post是實體資料,可以通過表單提交大量資訊
13,session與cookie的區別
session:儲存使用者訪問的全域性唯一變數,儲存在伺服器上的php指定的目錄中的(session_dir)的位置進行的存放
cookie:用來儲存連續訪問一個頁面時所使用,是儲存在客戶端,對於Cookie來說是儲存在使用者WIN的Temp目錄中的。
兩者都可通過時間來設定時間長短
14,資料庫中的事務是什麼
事務(transaction)是作為一個單元的一組有序的資料庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,事務則提交,其修改將作用於所有其他資料庫程式。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消
15,MYSQL取得當前時間的函式是 now()
格式化日期的函式是 date()
16,語句include和require的區別是什麼
require->require是無條件包含也就是如果一個流程里加入require,無論條件成立與否都會先執行require
include->include有返回值,而require沒有(可能因為如此require的速度比include快)
17,如何修改SESSION的生存時間
將php.ini中的session.gc_maxlifetime設定為9999重啟apache
或:$savePath = “./session_save_dir/”;
$lifeTime = 小時 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
18,有一個網頁地址,比如http://www.murray.cn/,如何得到它的內容
$readcontents = fopen(”http://www.murray.cn/”, “rb”);
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;

echo file_get_contents(”http://www.murray.cn/”);
19,在HTTP 1.0中,狀態碼401的含義是 未被授權
如果返回“找不到檔案”的提示,則可用 header 函式,其語句為 header(”Location:www.murray.cn”);
20,在PHP中,heredoc是一種特殊的字串,它的結束標誌必須
heredoc的語法是用”<<<"加上自己定義成對的標籤,在標籤範圍內的文字視為一個字串
例子:
$str = << my name is Jiang Qihui!
murray;
21,請說明php中傳值與傳引用的區別。什麼時候傳值什麼時候傳引用?
按值傳遞:函式範圍內對值的任何改變在函式外部都會被忽略
按引用傳遞:函式範圍內對值的任何改變在函式外部也能反映出這些修改
優缺點:按值傳遞時,php必須複製值。特別是對於大型的字串和物件來說,這將會是一個代價很大的操作。
按引用傳遞則不需要複製值,對於效能提高很有好處。
22,在PHP中error_reporting這個函式有什麼作用
設定錯誤級別與錯誤資訊回報
23,請寫一個函式驗證電子郵件的格式是否正確
$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);
24,如何得到當前執行指令碼路徑,包括所得到引數
$script_name = basename(__file__);
print_r($script_name);
25,JS表單彈出對話方塊函式是
alert(),prompt(),confirm();
獲得輸入焦點函式是focus();
26,如何宣告一個名為”myclass”的沒有方法和屬性的類
class myclass{ }
如何例項化一個名為”myclass”的物件
new myclass()
如何訪問和設定一個類的屬性
$object = new myclass();
$newstr = $object->test;
$object->test = “info”;
27,可以開啟一個檔案,以對檔案進行讀和寫操作: fopen()
28,$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
//輸出:10
29,寫一個函式,儘可能高效的,從一個標準 url 裡取出檔案的副檔名
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(”.”,$file);
return $ext[1];
}
30,PHP5許可權控制修飾符
public(公共),private(私用),protected(繼承)

===================================================
1 請說明 PHP 中傳值與傳引用的區別。什麼時候傳值什麼時候傳引用?
答: 傳值只是把某一個變數的值傳給了另一個變數,而引用則說明兩者指向了同一個地方。
2 在PHP中error_reporting這個函式有什麼作用?
答: The error_reporting() function sets the error_reporting directive at runtime. PHP has many levels of errors, using this function sets that level for the duration (runtime) of your script.
3 請用正規表示式(Regular Expression)寫一個函式驗證電子郵件的格式是否正確。
答:
<?php
if(isset($_POST['action']) &&
$_POST['action']==’submitted’)
{
$email=$_POST['email'];
if(!preg_match(“/^(?:w+.?)*w+@(?:w+.?)*w+$/”,$email))
{
echo
“電子郵件檢測失敗”;
}
else
{
echo
“電子郵件檢測成功”;
}
}
else
{
?>
<html>
<head><title>EMAIL檢測</title>
<script type=”text/javascript”>
function checkEmail(sText)
{
var reg=/^(?:w+.?)*w+@(?:w+.?)*w+$/;
var email=document.getElementById(sText).value;
if(!reg.test(email))
{
alert(“電子郵件檢測失敗”);
}
else
{
alert(“電子郵件格式正確”);
}
}
</script>
</head>
<body>
<form action=”<?php echo $_SERVER['PHP_SELF'] ?>” method=”POST”>
電子郵件:<input type=”text” id=”email” name=”email”
/><br />
<input type=”hidden” name=”action” value=”submitted”
/>
<input type=”button” name=”button” value=”客戶端檢測” onclick=”checkEmail(‘email’)”
/>
<input type=”submit” name=”submit” value=”伺服器端檢測”
/>
</form>
</body>
</html>
<?php
}
?>

4 簡述如何得到當前執行指令碼路徑,包括所得到引數。
<?php
echo
“http://”.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].”?”.$_SERVER['QUERY_STRING'];
//echo “http://”.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
?>

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

<?php
function BubbleSort(&$arr)
{
$cnt=count($arr);
$flag=1;
for($i=0;$i<$cnt;$i++)
{
if($flag==0)
{
return;
}
$flag=0;
for($j=0;$j<$cnt-$i-1;$j++)
{
if($arr[$j]>$arr[$j+1])
{
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
$flag=1;
}
}
}
}
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);
?>

6 請舉例說明在你的開發過程中用什麼方法來加快頁面的載入速度
答:要用到伺服器資源時才開啟,及時關閉伺服器資源,資料庫新增索引,頁面可生成靜態,圖片等大檔案單獨伺服器。使用程式碼優化工具啦

=============================================

1. 寫出如下程式的輸出結果
<?
$str1 = null;
$str2 = false;
echo $str1==$str2 ? ‘相等’ : ‘不相等’;
//相等
$str3 = ”;
$str4 = 0;
echo $str3==$str4 ? ‘相等’ : ‘不相等’;
//相等
$str5 = 0;
$str6 = ’0′;
echo $str5===$str6 ? ‘相等’ : ‘不相等’;
//不相等
?>

2. 寫出如下程式的輸出結果
<?
$a1 = null;
$a2 = false;
$a3 = 0;
$a4 = ”;
$a5 = ’0′;
$a6 = ‘null’;
$a7 = array();
$a8 = array(array());

echo empty($a1) ? ‘true’ : ‘false’;//true
echo empty($a2) ? ‘true’ : ‘false’;//true
echo empty($a3) ? ‘true’ : ‘false’;//true
echo empty($a4) ? ‘true’ : ‘false’;//true
echo empty($a5) ? ‘true’ : ‘false’;//true
echo empty($a6) ? ‘true’ : ‘false’;//false
echo empty($a7) ? ‘true’ : ‘false’;//true
echo empty($a8) ? ‘true’ : ‘false’;//false
?>

3. 寫出如下程式的輸出結果
<?
$test = ‘aaaaaa’;
$abc = & $test;
unset($test);
echo $abc;//’aaaaaa’
?>

4. 寫出如下程式的輸出結果
<?$count = 5;
function get_count(){
static $count = 0;
return $count++;
}

echo $count; //5
++$count;
echo get_count();//0
echo get_count();//1
?>

5. 寫出如下程式的輸出結果
<?
$GLOBALS['var1'] = 5;
$var2 = 1;
function get_value(){
global $var2;
$var1 = 0;
return $var2++;
}
get_value();

echo $var1; //0
echo $var2; //2
?>

6. 寫出如下程式的輸出結果
<?
function get_arr($arr){
unset($arr[0]);
}
$arr1 = array(1, 2);
$arr2 = array(1, 2);

get_arr(&$arr1);
get_arr($arr2);

echo count($arr1);//1
echo count($arr2);//2
?>

=================================================

1. 用PHP列印出前一天的時間,列印格式是2007年5月10日 22:21:21
2. PHP程式碼如下:
$a=”hello”;
$b=&$a;
unset($b);
$b=”world”;
echo $a;
其結果是?
3. PHP程式碼如下:
$str=”cd”;
$$str=”landog”;
$$str.=”ok”;
echo $cd;
其結果是?
4. 用PHP寫一段程式碼,實現不使用第3個變數,交換$a、$b的值,$a、$b的初始值自己定。
5. 根據題目要求,用PHP寫出程式碼。
表名User
ID Name Tel Content Date
1 張三 13333663366 大專畢業 2006-10-11
3 張三 13612312331 本科畢業 2006-10-15
5 張四 020-5566556 中專畢業 2006-10-15
4 王五 13521212125 大專畢業 2006-12-25
2 …………
6 …………
假設資料庫連線如下:
$mysql_db=mysql_connect(“local”,”root”,”pass”);
@mysql_select_db(“DB”,$mysql_db);
(1)查詢出所有Name等於“張三”的記錄,並輸出。
(2)按ID升序查詢,只返回排序後的前3條記錄,並輸出。
6. javascript能否定義二維陣列,如果不能你如何解決?
7. 假設a.html和b.html在同一個資料夾下面,用javascript實現當開啟a.html五秒鐘後,自動跳轉到b.html。
8. 有兩個檔案a.html和a.php,程式碼如下:
a.html

<html>
<head>
<meta http-equiv=Content-Type content=text/html;charset=utf-8>
<title>PHP程式設計師面試</title>
</head>
<body>
<center>
<form method=”post” action=”a.php”>
<table border=”1″>
<tr>
<td align=”right”>姓名:</td>
<td align=”left”><input type=”text” ></td>
</tr>
<tr>
<td align=”right”>電話:</td>
<td align=”left”><input type=”text” ></td>
</tr>
<tr>
<td align=”right”>郵箱:</td>
<td align=”left”><input type=”text” ></td>
</tr>
<tr>
<td align=”right”>地址:</td>
<td align=”left”><input type=”text” ></td>
</tr>
<tr>
<td align=”center” colspan=”2″>
<input type=”submit” value=”提交”>
<input type=”reset” value=”重填”>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>

a. php

<?php
$user_name = $_GET['user_name'];
$user_tel = $_GET['user_tel'];
$user_email = $_GET['user_email'];
$user_add = $_GET['user_add'];
echo “使用者名稱:$user_name<br>電話:$user_tel<br>郵箱:$user_email<br>地址:$user_add<br>”;
?>

(1)請畫出a.html在瀏覽器的顯示效果圖。
(2)在a.html中輸入:使用者名稱=張三,電話=020-38259977,郵箱=sunrising@srtek.cn,地址=廣州升瑞,按提交按鈕後輸出結果是?
9. 你是否使用過版本控制工具,如果有,請簡要說明。
10. 利用CSS樣式表定義已訪問的超連結字型大小為14pt,顏色為red。
11. 移動任意一位數或符號,使等式成立, 102 = 101-1。注:是移動不是交換,等號不能分開。
12. 規律題,3、1、4、1、5、9、2、( ), 請按照規律在括號內寫出下一表示式。
13. 規律題,5、8、-3、5、-2、3、-1、( ),請按照規律在括號內寫出下一表示式。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
答案:

1. echo date(‘Y-m-d H:i:s’, strtotime(‘-1 day’));

2. hello

3. landogok

4. $a = “abcd”;
$b = “1234″;
echo “初始化時 a=$a,b=$b<br>”;
$a = $a . $b;
$b = strlen( $b );
$b = substr( $a, 0, (strlen($a) – $b ) );
$a = substr( $a, strlen($b) );
echo “交換後 a=$a,b=$b<br>”;

5. (1)$sql = “select * from User where > $result = mysql_query( $sql );
while( $row = mysql_fetch_array( $result, MYSQL_ASSOC ) ){
echo $row[‘Name’];
}
(2) $sql = “select * from User order by ID asc limit 0,3”;
$result = mysql_query( $sql );
while( $row = mysql_fetch_array( $result, MYSQL_ASSOC ) ){
echo $row[‘Name’];
}
6. javascript不支援二維陣列定義,可以用arr[0] = new array()來解決

7. javascript程式碼如下:
<script>
function go2b(){
window.location = “b.html”;
window.close();
}
setTimeout( “go2b()”,5000 ); //5秒鐘後自動執行go2b()
</script>

8.

(1)如下所示:

略。因為懶得插入圖片,如果想看結果可以把程式碼儲存為html檔案,再用瀏覽器開啟檢視。

(2)輸出結果應為:

姓名:

電話:

郵箱:

地址:

因為表單是用post方式提交,但在a.php中卻用get方式來讀取,所以不會讀到任何值。

9. 略

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

11. 102 = 101-1

12. 答案為6,因為∏=3.1415926

13. 答案為2,規律為n=(n-2) – |(n-1)| ,n>=3

================================================================

1、使用單引號括起來的字串

當使用雙引號來括字串時,PHP直譯器會對其進行變數替換、轉義等操作,如 “\n”。如果只想輸出一個基本的字串,用單引號會節省一些資源。當然,如果需要進行變數替換的,那就必須用雙引號了。

2、字串的輸出

以下哪一條語句的執行速度最快?

print “Hi my name is $a. I am $b”$$
echo “Hi my name is $a. I am $b”$$
echo “Hi my name is “.$a.”. I am “.$b;
echo “Hi my name is “,$a,”. I am “,$b;
echo ‘Hi my name is ‘,$a,’. I am ‘,$b;

最後一條的執行速度是最快的。 print比echo要慢,在字串中進行變數替換時會慢,而連線字串要比用逗號連線來得慢,最後一句則是第一個習慣的體現。所以,不在字串中進行變 量替換不僅會加快程式執行速度,也會讓你的程式碼在任何語法高亮顯示的編輯器中顯得更為易懂(變數會被高亮顯示出來)。很少人知道echo的引數可以用逗號 連線,且速度會比字串連線要來得快。最後再用上第一個習慣,那這條語句就非常好了。

3、在陣列索引中使用單引號

正 如你在上面的測試題中所看到的,$x[sales]從嚴格意義上來說是錯誤的,索引應該被括起來,即$x['sales']。這是因為PHP會將 沒有括起來的索引辨認為“裸”字串,並把它解釋為一個常量。當找不到該常量的定義時,才將其解釋為一個字串,所以這條語句才是可執行的。把索引括起來 可以省去這部分工作,如果將來正好要用這一字串定義常量時也就不會有錯誤了。

4、不使用開始標誌的縮寫形式

你正在使用 這樣的符號嗎?“<?”是非常糟糕的符號,它會引起與XML直譯器的衝突。而且一旦你釋出了這些程式碼,那麼使用者就必須修改php.ini檔案來打 開對此符號的支援。所以實在沒有理由去使用這種形式。用“<?php“吧。

5、儘量不要使用正規表示式

在進行 常規的字串操作時,儘可能不要去使用正規表示式(preg和ereg系列函式)。str_replace函式要比preg_replace快得多,甚至 strtr函式也要比str_replace來得快。省去這些不必要的麻煩吧,你的老闆會感謝你的。

6、不要在迴圈宣告中使用函式

這個問題不單單出現在PHP中,你可以在其他語言的程式碼中經常看到:

差:for($i=0;$i< count($array);$i++){…}

好:$count=count($array);for($i=0;$i& lt;$count;$i++){…}

如果在迴圈宣告中使用了 count函式,那每次迴圈都會呼叫一次。如果迴圈次數很多,會浪費非常多的時間。

7、不要使用 register_globals和magic quotes

老版本的PHP在安裝時會預設開啟這兩個功能,這會引起安全漏洞、程式設計錯誤及其他的問題,如只有使用者輸入了資料時才會建立變數等。如今這兩個功 能都被捨棄了,每個程式設計師都應該避免使用。

8、一定要對變數進行初始化(這 裡的“初始化”指的是“宣告”)

當需要沒有初始化的變數,PHP直譯器會自動建立一個變數,但依靠這個特性來程式設計並不是一 個好主意。這會造成程式的粗糙,或者使程式碼變得另人迷惑,因為你需要探尋這個變數是從哪裡開始被建立的。另外,對一個沒有初始化的變數進行遞增操作要比初 始化過的來得慢。所以對變數進行初始化會是個不錯的主意。

9、對程式碼進行註釋

這個問題已經提過很多次了,但再多次也 不夠。我知道有些地方是不聘用不對程式碼進行註釋的程式設計師的。我在前一次工作面試後和副總、面試官一起瀏覽我寫的程式碼,當他們對我所做的程式碼註釋印象深刻, 還了解了一下我的這一習慣。一天之後,我得到了這個工作。

我知道有些自稱為PHP大師的人聲稱自己的程式碼寫得很好,不需要新增什麼注 釋。在我看來,這些人都是垃圾。學一寫註釋的規範和技巧,熟悉一下phpDocumentor或Doxygen之類的註釋輔助軟體,都是值得的。

10、 遵循一個程式設計規範

關於這一點,是你需要在面試中詢問你潛在的老闆的,問問他們正在使用什麼程式設計規範。PEAR?Zend?內部規範? 要提及你正在使用的程式設計規範,不管是你自己建立的,還是目前普遍流行的一種。對於PHP這種鬆鬆垮垮的語言來說,如果沒有一個好的程式設計規範,那麼那些程式碼 就會看起來想一堆垃圾。發臭的,令人作嘔的垃圾。一些基本的規範包括空格規範、打括號匹配、命名風格等。這對任何一個追求高質量的程式碼的人來說都是必須 的。

有人說:“我討厭你的4個空格的縮排。”我要說,什麼?用4個空格來縮排?這比用製表符過佔用3個字元的空間。更重要的是,只要 是使用比記事本高階的編輯器,你可以自定義製表符的縮排值。所以每個程式設計師都可以以其最習慣的方式來看程式碼。可以時設定為4,也可以設定為0(如果你是個 受虐狂)。反正我不在乎,但你就是不能用空格來縮排!


=========================================================

填空題:
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. 寫一個函式,儘可能高效的,從一個標準 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.表單中 get與post提交方法的區別?
答:get是傳送請求HTTP協議通過url引數傳遞進行接收,而post是實體資料,可以通過表單提交大量資訊.

2.session與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 customerinfo.customerid=orderinfo.customerid
WHERE orderinfo.customerid 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分)
答:確認伺服器硬體是否足夠支援當前的流量,資料庫讀寫分離,優化資料表,
程式功能規則,禁止外部的盜鏈,控制大檔案的下載,使用不同主機分流主要流量

15、用PHP寫出顯示客戶端IP與伺服器IP的程式碼1分)
答:列印客戶端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv(‘REMOTE_ADDR’);
列印伺服器IP:echo gethostbyname(“www.bolaiwu.com”)

16、語句include和require的區別是什麼?為避免多次包含同一檔案,可用(?)語句代替它們? (2分)
答:require->require是無條件包含也就是如果一個流程里加入require,無論條件成立與否都會先執行require
include->include有返回值,而require沒有(可能因為如此require的速度比include快)
注意:包含檔案不存在或者語法錯誤的時候require是致命的,include不是

17、如何修改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);

18、有一個網頁地址, 比如PHP開發資源網主頁: http://www.phpres.com/index.html,如何得到它的內容?($1分)
答:方法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”);

19、在HTTP 1.0中,狀態碼401的含義是(?);如果返回“找不到檔案”的提示,則可用 header 函式,其語句為(?);(2分)
答:狀態401代表未被授權,header(“Location:www.xxx.php”);

12、在PHP中,heredoc是一種特殊的字串,它的結束標誌必須?(1分)
答:heredoc的語法是用”<<<”加上自己定義成對的標籤,在標籤範圍內的文字視為一個字串
例子:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;

13、談談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 伺服器的技術
,客戶端瀏覽器不需要任何附加的軟體支援。

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>”);
}

=============================================================

PHP對Cookie的接收和處理的支援非常好,是完全自動的,跟FORM變數的原則一樣,特別簡單。
比如設定一個名為 MyCookier的Cookie,PHP會自動從WEB伺服器接收的HTTP頭裡把它分析出來,並形成一個與普通變數一樣的變數,名為$ myCookie,這個變數的值就是Cookie的值。陣列同樣適用。另外一個辦法是引用PHP的全域性變數$HTTP_COOKIE_VARS陣列。
分別舉例如下:(假設這些都在以前的頁面裡設定過了,並且仍然有效)

echo $MyCookie;
echo $CookieArray[0];
echo $_COOKIE["MyCookie"];
echo $HTTP_COOKIE_VARS["MyCookie"];
要刪除一個已經存在的Cookie,有兩個辦法:

1、SetCookie(“Cookie”, “”);
2、SetCookie(“Cookie”, “value” , time()-1 / time() );

使用Cookie的限制

1、必須在HTML檔案的內容輸出之前設定;
2、不同的瀏覽器對Cookie的處理不一致,且有時會出現錯誤的結果。
3、限制是在客戶端的。一個瀏覽器能建立的Cookie數量最多為30個,並且每個不能超過4KB,每個WEB站點能設定的Cookie總數不能超過20個。

============================================================

 

相關文章