1.求1+3+5+...+9999的和
<?PHP
for($i=1;$i<=9999;$i++){
$i++;
$sum = $sum + $i; echo $sum;//25005000
?>
2.$a = "abcd",求$a字符串的倒序,請自定義一個函數實現,不能使用已存在的函數
<?PHP
$a = "abcd";
function str($a){
for($j=strlen($a)-1;$j>=0;$j--){
$b .= substr($a,$j,1); return $b; echo str($a);//dcba
?>
3. 有一個數組$a = array('3','8','1','4','11','7');請把數組中的各元素進行有序的排序
方法一(升序排序)
<?PHP
$a = array('3','8','1','4','11','7');
$len = count($a);
for($k = 1;$k < $len;$k++){//$k就是第幾步
for($i = 1,$j = $len -1;$i <= $len - $k;$i++,$j--){//$i就是比較的次數
if($a[$j] < $a[$j-1]){//升序排序
$x = $a[$j];
$a[$j] = $a[$j-1];
$a[$j-1] = $x; } print_r($a);//Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 7 [4] => 8 [5] => 11 )
?>
方法二(降序排序)
<?PHP
$a = array('3','8','1','4','11','7');
$len = count($a);
for($k = 1;$k < $len;$k++){//$k就是第幾步
for($i = 1,$j = $len -1;$i <= $len - $k;$i++,$j--){//$i就是比較的次數
if($a[$j] > $a[$j-1]){//降序排序
$x = $a[$j];
$a[$j] = $a[$j-1];
$a[$j-1] = $x; } print_r($a);//Array ( [0] => 11 [1] => 8 [2] => 7 [3] => 4 [4] => 3 [5] => 1 )
?>
4.$a = "33^27^5^40^";求33+27+5+40的和
<?PHP
$a = "33^27^5^40^";
$b = (explode("^",$a));
for($i=0;$i<=count($b);$i++){
$sumc = $sumc + $b[$i]; echo $sumc;//105
?>
填空題:
1.在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量 $_SERVER['PHP_SELF']中;
而鏈接到當前頁面的URL記錄在預定義變量 $_SERVER['HTTP_REFERER'] 中
當前執行腳本的絕對路徑名 $_SERVER["SCRIPT_FILENAME"]
正在浏覽當前頁面用戶的 IP 地址 $_SERVER["REMOTE_ADDR"]
查詢(query)的字符串(URL 中第一個問號 ? 之後的內容):id=1&bi=2 $_SERVER["QUERY_STRING"]
2.執行程序段<?PHP echo 8%(-2) ?>將輸出 0
-8%3 = -2 8%-3 = 2
3.在HTTP 1.0中,狀態碼 401 的含義是 狀態401代表未被授權 ;如果返回“找不到文件”的提示,則可用 header 函數,其語句為 header("HTTP/1.0 404 Not Found") ;。
4.數組函數arsort 的作用是 對數組進行逆向排序並保持索引關系 ;語句 error_reporting(2047)的作用是報告所有錯誤和警告 設定錯誤訊息回報的等級 Reporting All errors and warnings
5.PEAR中的數據庫連接字符串格式是____。
6.寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把scrīpt標記及其內容都去掉):
<?PHP
$script="以下內容不顯示:<script language='Javascript'>alert('cc');</script>";
echo preg_replace("/<script[^>].*?>.*?<\/script>/si", "替換內容", $script);
?>
7.以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句 LoadModule php5_module “D:/php5/php5apache2.dll” 動態裝載PHP模塊,然後再用語句 AddType application/x-httpd-php .php 使得apache把所有擴展名為php的文件都作為PHP腳本處理。
LoadModule php5_module "D:/php5/PHP5apache2.dll" ,
AddType application/x-httpd-php .PHP,
8.語句 include 和 require 都能把另外一個文件包含到當前文件中,它們的區別是發生異常時include產生警告,require產生致命的錯誤;為了避免多次包含同一文件,可以用語句 include_once() 或者require_once() 來代替它們。
9.類的屬性可以序列化後保存到 session 中,從而以後可以恢復整個類,這要用到的函數是__ serialize() /unserialize()
10.一個函數的參數不能是對變量的引用,除非在PHP.ini中把 allow_call_time_pass_reference設為on.
11.SQL中LEFT JOIN的含義是__自然左外鏈接__ 如果 tbl_user記錄了學生的姓名(name)和學號(ID),tbl_score記錄了學生(有的學生考試以後被開除了,沒有其記錄)的學號(ID)
和考試成績(score)以及考試科目(subject),要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句 __select A.name,sum(B.score) as sumscore from tbl_user A left join tbl_score B on A.ID=B.ID group by A.ID__
12.在PHP中,heredoc是一種特殊的字符串,它的結束標志必須__結束標記必須頂到寫,不能有任何的縮進和空格,且在結束標記末尾要有分號__。
1. 用PHP打印出前一天的時間,打印格式是2007年5月10日 22:21:21
三種方法:
(1).echo date('Y年n月d日 H:i:s',strtotime('-1 day'));
(2).echo date("Y年n 月d 日H:i:s",time()-3600*24);
(3)echo date("Y年n月d日 H:i:s",mktime(date("H"),date("i"),date("s"),date("n"),
date("d")-1,date("Y")));
2. PHP代碼如下:
$a="hello";
$b=&$a;
unset($b);
$b="world";
echo $a;
其結果是? hello
3. PHP代碼如下:
$str="cd";
$$str="landog";
$$str.="ok";
echo $cd;
其結果是? landongok
4. 用PHP寫一段代碼,實現不使用第3個變量,交換$a、$b的值,$a、$b的初始值自己定。
$a = "abc";
$b = "1234";
echo "初始化時 a=$a,b=$b<br>";
$a = $a . $b;
$b = strlen( $b );//4
$b = substr($a,0,strlen($a)-$b);//abc
$a = substr($a,strlen($b));
echo "交換後 a=$a,b=$b<br>";
6. Javascript能否定義二維數組,如果不能你如何解決?
Javascript不能定義二維數組,可以用arr[0] = new array()來解決
var array = [‘a’,’b’,’c’];
array[0] = [1,2,3];
7. 假設a.html和b.Html在同一個文件夾下面,用Javascript實現當打開a.html五秒鐘後,自動跳轉到b.Html。
function go()
window.location.href='b.Html';
}
settimeout('go()',5000);
10. 利用CSS樣式表定義已訪問的超鏈接字體大小為14pt,顏色為red。
a:visited{font-size:14pt; color:red;}
12. 規律題,3、1、4、1、5、9、2、( 6 ), 請按照規律在括號內寫出下一表達式。
規律 3.1415926
1.以下哪一句不會把 John 新增到 users 陣列?
$users[] = 'john'; 成功把 John 新增到陣列 users。
array_add($users,’john’); 函式 array_add() 無定義。
array_push($users,‘john’); 成功把 John 新增到陣列 users。
$users ||= 'john'; 語法錯誤。
16.下面的代碼用來做什麼?請解釋。
$date='08/26/2003';print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","[url=file://2///1///3%22,$date]\\2/\\1/\\3[/url]",$date);
這是把一個日期從 MM/DD/YYYY 的格式轉為 DD/MM/YYYY 格式。我的一個好朋友告訴我可以把這個正規表達式拆解為以下的語句,對於如此簡單的表示是來說其實無須拆解,純粹為了解說的方便:
// 對應一個或更多 0-9,後面緊隨一個斜號$regExpression = "([0-9]+)/";// 應一個或更多 0-9,後面緊隨另一個斜號$regExpression .= "([0-9]+)/";// 再次對應一個或更多 0-9$regExpression .= "([0-9]+)";至於 [url=file://2///1///3]\\2/\\1/\\3[/url] 則是用來對應括號,第一個括號對的是月份,第二個括號對應的是日期,第三個括號對應的是年份。
17.給你一行文字 $string,你會如何編寫一個正則表達式,把 $string 內的 Html 標簽除去?
$stringOfText = "<p>This is a test</p>";
$expression = "/<(.*)>(.*)<\/(.*)>/";
echo preg_replace($expression, "\\2", $stringOfText);
簡述如何得到當前執行腳本路徑,包括所得到參數。
"http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];
簡答題:
1. 表單中 get與post提交方法的區別?
get是發送請求HTTP協議通過url參數傳遞進行接收,而post是實體數據,可以通過表單提交大量信息.
1. get是從服務器上獲取數據,post是向服務器傳送數據。
2. GET是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。POST是通過HTTP POST機制,將表單內各個字段與其內容放置在Html HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
3. 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
4. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,不過也有字節限制,這是為了避免對服務器用大量數據進行惡意攻擊。可在PHP.in中對 post_max_size 進行設置
5. get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。
6. Get是Form的默認方法。
2.PHP中session與cookIE的區別
1、從安全方面比較
session保存在服務器,客戶端不知道其中的信息;cookIE保存在客戶端,服務器能夠知道其中的信息。cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,
考慮到安全應當使用session
2、從存取方式上比較
session中保存的是對象,cookIE中保存的是字符串。
3、是否區分路徑上比較
session不能區分路徑,同一個用戶在訪問一個網站期間,所有的session在任何一個地方都可以訪問到。而cookie中如果設置了路徑參數,那麼同一個網站中不同路徑下的cookIE互相是訪問不到的。
4、從工作方式上比較
session需要借助cookie才能正常工作。如果客戶端完全禁止cookIE,session將失效。
5,從服務器性能方面比較
session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能
考慮到減輕服務器性能方面,應當使用COOKIE
3.數據庫中的事務是什麼?
答:事務(transaction)是作為一個單元的一組有序的數據庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,事務則提交,其修改將作用於所有其他數據庫進程。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。
4.echo(),print(),print_r(),printf()的區別
echo是PHP語句, print和print_r是函數,語句沒有返回值,函數可以有返回值
echo() :用於輸出一個或多個字符串,它是PHP的語言結構也就是PHP的語句(語句沒有返回值)
print():該函數功能和echo()一樣,不同的是print()有返回值, 成功返回 1 ,失敗則返回 0
print_r(): 可以打印出復雜類型變量的值 (如數組,對象)
printf():輸出一個格式化的字符串
sprintf():返回一個格式化的字符串 ,將格式化的字符串以返回值的形式寫入到一個變量中
5.如何實現字符串翻轉?
echo strrev($a);
6.PHP的意思?
PHP是一個基於服務端來創建動態網站的腳本語言,可以用PHP和Html生成網站主頁
7.MySQL取得當前時間的函數是?,格式化日期的函數是?
now(),date()
8.使用哪些工具進行版本控制?(1分)
cvs,svn
9.對於大流量的網站,您采用什麼樣的方法來解決訪問量問題?(4分)
答:確認服務器硬件是否足夠支持當前的流量,數據庫讀寫分離,優化數據表,
程序功能規則,禁止外部的盜鏈,控制大文件的下載,使用不同主機分流主要流量
10.用PHP寫出顯示客戶端IP與服務器IP的代碼1分)
答:打印客戶端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: echo getenv('REMOTE_ADDR');
打印服務器IP:echo gethostbyname("www.xiaoyan.com") ; 或則 echo
$_SERVER[‘SERVER_ADDR’];
11.語句include和require的區別是什麼
包含文件不存在或者語法錯誤的時候
include() 產生一個警告,,腳本會繼續運行 而 require() 則導致一個致命錯誤
如何修改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);
12.include_once()與include的區別
如果該文件中的代碼已經被包含了,則不會再次包含
13.有一個網頁地址, 比如PHP開發資源網主頁: http://www.PHPres.com/index.Html,如何得到它的內容?
方法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");
15.談談對mvc的認識
由模型(model),視圖(vIEw),控制器(controller)完成的應用程序
由模型發出要實現的功能到控制器,控制器接收組織功能傳遞給視圖;
16.請說明PHP中傳值與傳引用的區別。什麼時候傳值什麼時候傳引用?
按值傳遞:函數范圍內對值的任何改變在函數外部都會被忽略
按引用傳遞:函數范圍內對值的任何改變在函數外部也能反映出這些修改
優缺點:按值傳遞時,PHP必須復制值。特別是對於大型的字符串和對象來說,這將會是一個代價很大的操作。
按引用傳遞則不需要復制值,對於性能提高很有好處。
答: 傳值只是把某一個變量的值傳給了另一個變量,而引用則說明兩者指向了同一個地方。
17.在PHP中error_reporting這個函數有什麼作用?
報告所有錯誤和警告 Reporting All errors and warnings 設置報錯級別並返回當前級別。
18.請寫一個函數驗證電子郵件的格式是否正確
<script>
function checkEmail(strEmail){
if(strEmail.search(/^\w+((-\w+)(.\w+))*@\w+(-\w+)*\.[a-zA-Z0-9_]+/) != -1){
return true;
}else{
alert("false");
}
</script>
<input type="text" onblur="checkEmail(this.value)";>
或則
<?PHP
function checkEmail($email){
if(preg_match("/^\w+((-\w+)(.\w+))*@[a-zA-Z0-9_]+(-)*\.[a-zA-Z0-9_]+$/",$email)){
echo "格式正確";
}else{
echo "格式錯誤";
}
checkEmail('[email protected]');
?>
19. 簡述如何得到當前執行腳本路徑,包括所得到參數
(1).echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];
(2).echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
(3).echo "http://".getenv('SERVER_NAME').getenv('REQUEST_URI');
20.JS表單彈出對話框函數是? 獲得輸入焦點函數是?
答:彈出對話框: alert(),prompt(),confirm()
獲得輸入焦點 focus()
21.JS的轉向函數是? 怎麼引入一個外部JS文件?
答:window.location.href,<script type="text/Javascript" src="js/js_function.JS"></script>
22.foo()和@foo()之間有什麼區別?
答:@foo()屏蔽錯誤輸出
23.如何聲明一個名為”myclass”的沒有方法和屬性的類?
答:class myclass{ }
24.如何實例化一個名為”myclass”的對象?
答:$newclass = new myclass();
25.你如何訪問和設置一個類的屬性? (2分)
答:$object = new myclass();
$testvar = $object->test;
$object->test = "my string";
26.mysql_fetch_row() 和MySQL_fetch_array之間有什麼區別? (1分)
MySQL_fetch_row是從結果集取得一行作為枚舉
MySQL_fetch_array是從結果集取出一行數組作為關聯數組,或索引數組,兩者兼得
27.GD庫是做什麼用的? (1分)
答:GD庫主要是做圖片處理用的。
28.指出一些在PHP輸入一段Html代碼的辦法。(1分)
答:echo "<a href='index.PHP'>aaa</a>";
29.下面哪個函數可以打開一個文件,以對文件進行讀和寫操作?(1分)
(a) fget() (b) file_open() (c) fopen() (d) open_file() [ c ]
31.下面的程序會輸入是否?(1分)
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
?>
輸出:10
32.請寫出數據類型(int char varchar datetime text)的意思; 請問varchar和char有什麼區別(2分)
答:int是數字類型,char固定長度字符串,varchar實際長度字符串,datetime日期和時間的組合,text文本字符串
char是一種固定長度的類型,varchar則是一種可變長度的類型
33.寫出以下程序的輸出結果 (1分)
$b=201;
$c=40;
$a=$b>$c?4:5;
echo $a;
?>
答:4
34.檢測一個變量是否有設置的函數是否?是否為空的函數是?(2分)
答:isset(),empty();
35.取得查詢結果集總數的函數是?(1分)
答:MySQL_num_rows($result);
36.$arr = array('james', 'tom', 'symfony'); 請打印出第一個元素的值 (1分)
答:echo $array[0];
37.請將36題的數組的值用','號分隔並合並成字串輸出(1分)
<?PHP
$array = array('james', 'tom', 'symfony');
$string = implode(",",$array);
echo $string;
?>
38.$a = 'abcdef'; 請取出$a的值並打印出第一個字母(1分)
答:echo $a{0} 或 echo substr($a,0,1)
39.請寫出PHP5權限控制修飾符(3分)
答:public(公共),private(私用),protected(繼承)
40.請寫出PHP5的構造函數和析構函數(2分)
答:__construct() , __destruct()
請舉例說明在你的開發過程中用什麼方法來加快頁面的加載速度
答:要用到服務器資源時才打開,及時關閉服務器資源,數據庫添加索引,頁面可生成靜態,圖片等大文件單獨服務器。使用代碼優化工具
編程題
1.寫一個函數,盡可能高效的,從一個標准 url 裡取出文件的擴展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .PHP
<?PHP
function getext($url){
$array = parse_url($url);//解析url
$path = $array['path'];//路徑
$file = basename($path);//basename()返回路徑中文件名部分
$arr = explode(".",$file);//以.分割文件名,生成數組
return $arr[1];
echo getext("http://www.xiaoyan.com/aa/uu.PHP?id=666");
?>
2.實現中文字串截取無亂碼的方法。(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){
//ord()函數返回字符的 ASCII (美國國家標准交換碼) 序數值。本函數和 chr() 函數相反。
$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.'...';
}else{
return $string;
}
3.寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。
function bianli($dir){
if(is_dir($dir)){//判斷給定文件名是否是一個目錄
$files = array();
if($handle = opendir($dir)){//opendir -- 打開目錄句柄
while(false !== ($file = readdir($handle))){////readdir -- 從目錄句柄中讀取條目
if($file != '.' && $file != ".."){//去除(.)和(..)
if(is_dir($dir.'/'.$file)){//如果是路徑,說明下面還有文件,遞歸調用
$files[$file] = bianli($dir.'/'.$file);
}else{
$files[] = $file;
}
}
}
}
}
closedir($handle);//closedir -- 關閉目錄句柄
return $files;
4.有一個一維數組,裡面存儲整形數據,請寫一個函數,將他們按從大到小的順序排列。要求執行效率高。並說明如何改善執行效率。(該函數必須自己實現,不能使用PHP函數)
即寫一個冒泡排序
<?PHP
function maopao($arr){
$len = count($arr);
for($i = 1;$i < $len;$i++){//最多做$len-1次排序
$flag = 0; //本趟排序開始前,交換標志應為0
for($j = $len - 1;$j >= $i;$j--){//$j就是比較的次數
if($arr[$j] < $arr[$j-1]){
//如果是從大到小的話,只要在改為$arr[$j]>$arr[$j-1]就可以了
$x = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $x;
$flag = 1; //發生了交換,故將交換標志置為1
}
}
if($flag == 0) return $arr;//本趟排序未發生交換,提前終止算法
}
$arr = array('3','9','1','4','2');
print_r(maopao($arr));
?>