面試題部分
一 六間房面試題
1. PHP s
a. 讀取一個文件,將其Base64編碼,每76個字符加一個換行
b.寫一個函數,參數爲$n,生成一個數組,其元素爲1~$n,各元素位置隨機排列,不得重複
2. Smarty
用Smarty寫出下面代碼,其中td的個數隨$array的元素個數而定,class xx假設已經存在
提示:考慮每行元素個數,考慮class="xx"出現的規律
x1 | x2 | x3 |
x4 | x5 | x6 |
x7 | x8 | x9 |
3. UNIX/MySQL/Apache
a. 寫一句腳本,分析apache的access.log,得出訪問量最高文件前5名 (Unix/Apache)
b. 創建一個數據庫,裏面有一張表(見後面),並將其授權給所有192.168.1.*網段的用戶表需求:每天文件訪問情況,包括文件名、訪問IP、訪問時間、客戶端瀏覽器名稱,考慮如何高效地查找每天什麼時段訪問量最高
c. 配置操作系統(FreeBSD/Linux),使其在開機進入操作系統後執行啓動apache、mysql的腳本
解答
1
a
chunk_split( base64_encode( file_get_content( $filename ) ),76,"/n" );
b
function getElement($arr,$n) {
$rand = rand(1,$n);
if (in_array($n,$arr)) {
getElement($arr,$n);
}
return $rand;
}
function createArray($n) {
$arr = array();
for($i=1;$i<=$n;$i++) {
$arr[] = getElement($arr,$n);
}
return $arr;
}
print_r(createArray(8));
二 常用函數部分
1 服務器和執行環境信息函數
2 獲取環境變量的值
3 時間/日期函數
1、格式化一個本地時間/日期
2、返回unix時間戳
3、返回一個日期的unix時間戳
4、獲取日期和時間信息
5、將英文的時間描述轉換成unix時間戳,獲取前一天的日期
6、返回當前 Unix 時間戳和微秒數
7、 設定(取得)用於一個腳本中所有日期時間函數的默認時區
4 檢查變量是否是數字或數字字符串,數組,字符串
5 發送一個http標頭
答案
1
http://localhost/xxt_tupoe/test.php?te=1&fd=1
E:/wamp/www/xxt_tupoe/test.php
$_SERVER
DOCUMENT_ROOT=E:/wamp/www/ 當前運行腳本所在的文檔根目錄。在服務器配置文件中定義。
PHP_SELF = /xxt_tupoe/test.php
SCRIPT_FILENAME = E:/wamp/www/xxt_tupoe/test.php 當前執行腳本的絕對路徑名
REQUEST_URI = /xxt_tupoe/test.php?te=1&fd=1
REQUEST_METHOD = GET 訪問頁面時請求的方法
QUERY_STRING = te=1&fd=1 查詢的字符串
SERVER_ADDR = 127.0.0.1 這個是服務器ip地址
REMOTE_ADDR = 127.0.0.1 這個是用戶的Ip地址
SERVER_NAME = localhost; 服務器主機的名稱
SCRIPT_NAME = localhost 包含當前腳本的路徑。這在頁面需要指向自己時非常有用。
URL = http://.$_SERVERP['SERVER_NAME'] . $_SERVER['REQUEST_URI']
http://doc.cnnas.com/web/html/14/t-14.html
$_SERVER['HTTP_HOST ']
當前請求的 Host: 頭部的內容
$_SERVER['HTTP_REFERER']
鏈接到當前頁面的前一頁面的 URL 地址
$_FILES
包含有所有上傳的文件信息。
2getenv("DOCUMENT_ROOT");
3
1、date("Y-m-d,H:i:s") 第二個參數默認的是time() date_default_timezone_set(),date("Y-m-d,H:i:s",time()+8*60*60)北京時間
date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d')-1,date('Y')))
2、time();是以秒爲單位的,返回自從 Unix 紀元(格林威治時間 1970 年 1 月 1 日 00:00:00)到當前時間的秒數
3、mktime(0,0,0,12,12,2011);
4、getdate();
5、strtotime, date("Y-m-d",strtotime("+1 day")),同1
6、microtime();
7、date_default_timezone_get , date_default_timezone_set
4 is_numeric
5 header();
http報頭參數詳解
http://blog.csdn.net/wiwipetter/archive/2009/09/16/4559183.aspx
6 字符串函數
1、查找字符串首次出現的位置,查找字符串最後一次出現的位置
2、獲取字符串的長度
3、返回字符的ASC碼值,返回指定的字符,兩者是互操作
4、比較字符串函數
5、查找字符串的首次出現,並截取;查找字符串在另一個字符串中最後出現的位置,並返回從該位置到字符串結尾的所有字符;在字符串中搜索指定字符中的任意一個,截取第一次出現的位置開始的剩餘部分
6、字符串替換函數
7、格式化輸出字符,輸出字符串,輸出一個或多個字符串
8、使用正則表達式分割字符串
9、使用反斜線引用字符串;在指定的字符前添加反斜槓及相反的操作
10、去除最後一個非空格後的所有的空格(或其他字符)即去除字符串末端的空白字符(或其他字符),去除字符串開頭的空白字符(或其他字符),去除字符串兩端的空白(或其他字符)
11、使用一個字符串分割字符串,並說出第三個參數的用法及相反的操作將數組中的元素使用某個字符串相連 ;把字符串分割到數組中
12、將特殊字符轉換成html字符及相反操作,將所有的適用的字符轉換成html及其相反的操作;
13、將字符串分割成小塊,並可以在某個字符後面插入任意字符後分割
14、使用uuencode編碼或解碼一個字符串
15、生成一個crc32多項式
16、將字符串的第一個字符小寫,將字符串的首字母轉換成大寫,將字符串轉換成小寫,將字符串轉換成大寫,將字符串中每個單詞的首字母轉換成大寫
17、計算字符串和文件的md5散列,計算文件的sha-1散列,計算字符串的sha散列
18、在字符串的每個新行(/n)之前插入html換行符(<br />)
19、通過千位分組來格式化數字
20、把查詢字符串解析到變量中,解析URL
21、根據指定的格式解析來自一個字符串的輸入,從文件中格式化輸入
22、隨機打亂字符串中所有的字符
23、把字符串填充爲指定的長度;把字符串重複指定的次數;返回字符串中的單詞數:反轉字符串
24、返回在找到任何指定的字符之前,在字符串查找的字符數;返回在字符串中包含的特定字符的數目。
25、剝去 HTML、XML 以及 PHP 的標籤。
26、計算子串在字符串中出現的次數。
27、按照指定長度對字符串進行折行處理。
28、返回字符串的字串
答案
6
1、strpos("dfDfdf","d",1)=5這個區分大小寫 stripos();不區分大小寫,strrpos(),strripos()
2、strlen();
strlen和mb_strlen 的區別
http://hi.baidu.com/kbsy/blog/item/ba848419e5001b6fdbb4bd67.html
3、ord("A"),chr("65")
4、
strcmp() 區分大小寫 ;
strcasecmp() 不區分大小寫;
strncmp("abcd","abdd",2) 用於比較字符串的一部分,區分大小寫,這裏是比較前兩個字符 ;
strncasecmp() 不區分大小寫 ;
strnatcmp(),strnatcasecmp() 字符比較裏面有數字的話要使用這個比較,否則在計算機中2是大於10的,可以被用作回調函數使用,例如: $arr = array(1,12,2,10); usort($arr,strcmp) -> 1,10,12,2 usort($arr,$strnatcmp) -> 1,2,10,12
strcoll('heloo','Hello');這個不是二進制安全的
substr_compare("hello","hfllo",0,2)->-1 後面的大
這幾個函數的返回值都是一樣的,<0 >0 ==0
5、
strstr("[email protected]","@",true);-> name stristr() 不區分大小寫 同strchr()
strrchr("hello world", 'wo') -> world
strpbrk("hello world","oe") ->ello world 這個不同之處就是隻要出現第一個符合的字符就算
6、
strtr("Hilla","ia","eo") -> Hello 同下面的不同點就是這個是單個字符匹配的,大小寫敏感,參數可以使用數組 strtr('abcd',array('b'=>'B','d'=>'D')) -> aBcD
str_replace('ab','AB','abcdeab',$i)->ABcdeAB,$i=2;str_ireplace不區分大小寫,並且可以使用數組替換
substr_replace("ABCDE","bob",0,1) -> bobBCDE; 0表示從第一個位置開始替換,1表示替換掉幾個字符如果沒有這個參數那麼就是替換所有的
preg_replace("/(/w+) (/d+), (/d+)/i","/${1}1,/$3","April 15, 2003"); 具體的參見手冊上的實例
preg_replace_callback() 使用方法和上面基本上是一樣的,回調函數有一個參數,這個參數是一個數組,對應的是每一個匹配項
PHP正則表達式作用:匹配提取、匹配替換。
7、
printf("二進制:%d",7); php的格式化類型說明參見http://blog.csdn.net/aw_vip/archive/2008/12/05/3453055.aspx
printf("%s world. Day number %u",$str,$number); 依據格式參數返回字符串
fprintf() 是輸出到文件
sprintf() 是輸出到變量
vprintf() 與printf的不同是arg位於一個數組中,vprintf("%s world. Day number %u",array("Hello",123));
Hello world. Day number 123
print() 不是一個函數而是一個語言結構,所以可以不用括號
echo 同樣其不是函數而是一個語言結構 同上面的區別是echo可以輸出多個字符串 echo 'a','b','c';
8、
split,spliti不區分大小寫
preg_split("/[/s,]+/","a b,c");->array('a','b','c');
9、
addslashes php.ini中的設置參考手冊,在使用這個的時候要判讀設置是否已經打開,get_magic_quotes_gpc()
stripslashes('fd/'f') - > fd'f
addcslashes("dc","d") -> /dc
stripcslashes("/dc") ->dc
10、
chop("dfdf df /t","/t")這樣的會保留空白,只去掉第二個參數的字符,同rtrim();
$data = "hello df" ; ltrim($data,"hel") 返回值是 o df,但是hello前面不能有空白,否則將不操作,這是後就要
ltrim($data," hel") hel前面也添加一個空格
trim(); trim('$data','hef') 返回值是llo d, 對數組的操作要同array_walk()相配合 使用回調函數來解決
11、
expolde("|","1|2|3|4",-2)->array(1,2);explode("|","a|b|c|d",3) = array(a,b,c|d) ; implode(”cd“,"array('a','b')")->acdb; 別名join
str_split('world',2); -> array('wo','rl','d');
strtok("word fg/tdiim/ndf"," /t/n")->word,fg,diim,df這裏的不同是對多個分割字符都有效,首次調用需要使用string,以後就不需要了,只要有split字符就行了,這裏每次只執行一次分割,需要使用循環的方式解決
12、
htmlspecialchars("<ddd>"); htmlspecialchars_encode(">");,兩者的第二個參數,主要的作用是是否將單引號也轉換
htmlentities("<a href='test'>Test 地方 </a>", ENT_QUOTES,'utf-8');這個時候urf-8就起作用了,這個同上的區別就是這裏會將中文字符轉換 html_entity_decode()
13、chunk_split($str,4,'d') 默認的參數參見手冊
14、convert_uuencode() 比原數據大35倍左右; 本函數把所有字符串(包括二進制的)轉換爲可打印的字符串,確保其網絡傳輸的安全。convert_uudecode() ;
base64_encode()和base64_decode() 此編碼方式可以讓中文字或者圖片也能在網絡上順利傳輸
15、crc32($str) 生成32位的循環冗餘校驗嗎多項式,常用來檢測傳輸的數據是否完整,實際應用時,發送裝置計算出CRC值並隨數據一同發送給接收裝置,接收裝置對收到的數據重新計算CRC並與收到的CRC相比較,若兩個CRC值不同,則說明數據通訊出現錯誤。
16、lcfirst(); ucfirst(); strtolower(); strtoupper(); ucwords()
17、
md5() ; md5_file() 這裏用於比較文件是否有修改
$md5file= md5_file("test.txt");
file_put_contents("md5file.txt",$md5file);
$md5fileOld = file_get_contents("md5file.txt");
if(md5_file("test.txt")) == $md5file() {}
http://www.w3school.com.cn/php/func_string_md5_file.asp
sha1_file() 同樣存儲,可以判斷文件是否修改
http://www.w3school.com.cn/php/func_string_sha1_file.asp
sha1()
18、nl2br($str); 主要是用於文本的處理,將文本的格式通過html顯示
19、number_format ; number_format('1000000' , 2 , '.' , ' ,')
20、
parse_str($str,$arr); 查詢字符串就是url中頁面傳遞參數,使用$_SERVER['QUERY_STRING']獲取
parse_str("a=1&b=2"); -> $a = 1,$b=2, parse_str("a=1&b=2",$arr); -> $arr['a']= 1,$arr['b']=2
parse_url("http://www.sina.com/db/gh?df=33&bb = 09"); 返回[scheme] = http; [host] = www.sina.com;[path] = /db/gh; [query] = df33&bb=09
21、sscanf("april,10,2002","%s %d %d")-> array(april,10,2002); fscanf()
22、str_shuffle()
23、
str_pad(); str_pad($str,strlen($str)+2,'.',STR_PAD_BOTH);
str_repeat("ab",2); 輸出abab
str_word_count("hello word") -> 2 ; str_word_count("hello word",1) -> 返回的是包含單詞的數組,其他參數參見 w3school
strrev("hello") ->olleh
24、strcspn("abcdffd","bc") -> 1 ;strspn("abcbcdffd","bc",1,6)-> 4 重複的字符必須是連續出現的
25、strip_tags("<a>hello</a> <p>world</p>")->hello word strip_tags("<a>hello</a> <p>world</p>","<a>") ->
hello <p>world</p>
26、substr_count("he is this a g","is",4,10) -> 1
27、wordwrap('helloword',4,"<br />/n",true); -> hell owor d
28、substr(),mb_substr("中文截取",0,3,'utf-8'),mb_strcut("中文截取",0,3,'utf-8') 後倆個適合中文的截取,第二個是按照字符來切分的,第三個是按照字節來切分
7 執行正則表達式的搜索和替換,正則表達式的匹配
8 常用的文件系統方面的操作
1、檢查文件或目錄是否存在
2、將整個文件讀入字符串,將字符串寫入文件
3、改變目錄,當前的
4、獲取當前目錄
5、directory類
6、讀取目錄的操作
7、列出指定路徑中的文件和目錄
8、拷貝文件,刪除文件,建立目錄,重新命名一個文件或目錄,刪除目錄
9、返回路徑中的目錄部分,返回路徑中的文件名部分,返回文件的路徑信息
10、從讀取的文件中去掉html和php標籤
11、將文件讀入一個數組中
12、獲取文件的大小和類型
13、判斷給定的文件名是否是一個目錄,是否是可執行的,是否爲一個正常的文件(包括是否存在的判斷),是否是通過http post上傳的
14、返回文件的路徑信息
答案
7 preg_replace,ereg,preg_match()的效率比ereg要快,eregi不區分大小寫
實例參見日記
8
1、file_exists
2、file_put_contents,file_get_contents 如果要打開有特殊字符的url,就需要使用urlencode()進行url編碼
3、chdir
4、getcwd
5、dir,方法handle(),path(),read() $dir = dir(e:/xxt); while(flase !== ($entry = $dir->read()))
6、$handle = opendir($dir),readdir($handle),closedir($handle)
7、scandir($dir,1) 這輸出是排序的,1表示倒序
8、copy($file,$newfile) 如果文件存在將會被覆蓋 , delete()或 unlink(),mkdir(),rename($old,$new),rmdir();
9、dirname('E:/tmp/sqls/slowquery.log'); 得到的是 E:/tmp/sqls,basename('E:/tmp/sqls/slowquery.log','log');
fileinfo("/www/htdocs/index.html", PATHINFO_BASENAME);
10、fgetss()
11、file()
12、filesize(); filetype();
13、is_dir(),is_executable(),is_file().is_uploaded_file()
14、pathinfo("F:/log/bug.doc?dd=1") 返回的結果是 [dirname] = F:/log ; [basename] = bug.doc?dd=1; [extension] = doc?dd=1 ;[filename]= bug
9 運算函數
1、進一取整法
2、絕對值
3、二進制轉換爲十進制
4、將十進制轉換爲二進制
5、返回8機制,十六進制
6、捨去法取整
7、返回最大值和最小值
8、對浮點數進行四捨五入
9、產生一個隨機整數
10、返回除法的浮點數餘數
10 數據庫操作
1) 獲取上一步insert操作產生的id
答案
9
1、ceil();
2、abs();
3、bindec
4、decbin
5、decoct dechex
6、floor
7、max min 參數可以是數組
8、round
9、rand(5,10) 一般使用mt_rand() 其速度是前者的四倍
10、fmod(5.7,1.3)
10 1) mysql_insert_id9):
11 數組操作
1、將數組最後一個單元出棧
2、移除數組中重複的值
3、把數組中的值複製給一些變量
4、返回字符串鍵名都是大寫或小寫的數組 ;返回數組中所有的值;返回數組中所有的鍵名
5、將數組分割成多個
6、合併一個數組 ;創建一個數組;用給定的數組作爲鍵名,給定的值作爲鍵值;用給定的值填充數組;建立一個包含指定範圍單元的數組
7、檢查給定的鍵名或索引是否存在於數組中;檢查數組中是否存在某個值;搜索給定的值,返回相應的鍵名
8、對數組中的每個成員應用用戶函數;將回調函數作用到給定的數組單元上;用回調函數過濾數組中的單元;使用回調函數迭代的將數組簡化爲單一的值
9、統計數組中所有值出現的次數;計算數組中的單元數目或對象中屬性的個數
10、帶索引檢查計算數組的差集;計算數組的差集;帶索引檢查計算數組的交集;計算數組的交集;使用鍵名比較計算數組的差集;使用鍵名計算比較數組的交集
11、用回調函數比較數據來計算數組的差集;帶索引檢查計算數組的差集,用回調函數比較數據; 計算數組的交集,用回調函數比較數據; 帶索引檢查計算數組的交集,用回調函數比較數據 ;帶索引檢查計算數組的差集,用回調函數比較數據和索引; 帶索引檢查計算數組的交集,用回調函數比較數據和索引; 用回調函數對鍵名比較計算數組的差集; 用回調函數比較鍵名來計算數組的交集
12、交換數組中的鍵和值;返回一個單元順序相反的數組
13、對多個數組或多維數組進行排序
14、用值將數組補充到指定的長度
15、將數組的最後一個單元彈出;將一個或多個單元壓入到數組的末尾;將數組開頭的單元移出數組;在數組的開頭插入一個或多個單元:從數組中隨機取出一個或多個單元;從數組中取出一段;將數組中的一部分去掉並使用其他值取代
16、計算數組中所有值的乘機;計算數組中所有值的和
17、對數組進行逆向排序,並保持索引關係;對數組進行排序,並保持索引關係 ;對數組進行排序 ;對數組逆向排序; 對數組按照鍵名排序;對數組按照鍵名進行逆向排序; 使用用戶自定義的比較函數對數組中的鍵名進行排序; 使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯; 用“自然排序”算法對數組排序; 用“自然排序”算法對數組進行不區分大小寫字母的排序
18、返回數組中的當前的單元; 將數組中的內部指針向前移動一位; 將數組的內部指針倒回一位; 將數組的內部指針指向最後一個單元;
將數組的內部指針指向第一個單元;返回數組中當前的鍵值對並將數組指針向前移動一步
19、 從關聯數組中取得鍵名;將數組打亂
答案
1、array_pop();
2、array_unique();
3、list($a,$b) = explode(" ",microtime());
4、
array_change_key_case(array("first"=>"fd","second" =>3),CASE_UPPER)) -> array([FIRST] = > 'fd' [SECODE]=>3)
array_values( array("dq","d"=>3) ) 返回的是一個數組 array("dq",3)
array_keys( array("dq","d"=>3),"3" ) ) 返回的是一個數組 array( [0] => 'd')
5、array_chunk( array_chunk( array("ke" =>'df','a','b'),2,true ) ); -> 生成的是一個多維數組
6、
array_merge( array_merge( array('1'=>1,2), array('1'=>3,4) ) ); 此數組合並後數字索引的將不會被覆蓋,否則相同的鍵名的將會被覆蓋
array_merge_recursive( array('b'=>1,2), array('b'=>3,4) ) ) ; 相同鍵名的不會被覆蓋,而是會被合併一個子數組,遞歸下去
array_combine( array("a","b"), array("c","d") );用一個數組的值作爲其鍵名,另一個數組的值作爲其值 array([a]=>c,[b]=>d)
array_fill_keys($arr,"val"); $arr中的元素作爲新的數組的鍵名,val作爲新的數組的鍵值
arrar_fill(5,6,"aa");鍵名從5開始,6組數據,所有的鍵值都是aa
range('a','h',3) ->a,d,g ;3是遞進的數量
7、
array_key_exists( array_key_exists( 'dq',array("dq","d"=>3)) ) ->false 對於數組中值爲null的也會返回true,而isset就會返回false, isset( array([first]=>null) ) 返回的就是false
in_array( "12" , array(12,'e','c) ,true) ->false 有true是要檢查類型的,這裏是區分大小寫的
array_search("12", array("b"=>"12",'c'=>"12","d"=>3) ) -> b 這裏只返回匹配一次的,多次參見array_keys
8、
array_walk($arr,'functionname') 回調函數的參數可以使用傳址方式修改數組
array_walk_recursive() 對數組中的每個成員遞歸地調用回調函數 , 如果數組元素是數組的話,則其鍵值不會使用
array_map('funciton',$arr,$arr2)
array_filter( $arr, 'function' ) 返回符合回調函數的元素,如果只有一個參數那麼元素中的等值爲false將被刪掉
array_reduce( $arr , 'function' , 10 ) 第三個函數將做爲第一個數組元素參與運算
9、
array_count_values($arr) 返回的是一個數組,鍵名是元素數組的值,值是出現的次數
count($arr, 1) 參數1是遞歸計算 同sizeof
10、
array_diff_assoc($arr1,$arr2) 返回的是數組,在arr1而不在arr2中的值,其檢測包括鍵值也要相同
array_diff($arr1,$arr2) 同上面是相同的,唯一的區別是忽略鍵值,保留鍵名
array_intersect_assoc($arr1,$arr2) 返回的是數組,在arr1中出現也在其他數組中出現的元素,其檢測包括鍵值
array_intersect($arr1,$arr2) 同上,唯一的區別就是忽略鍵值
array_diff_key($arr1,$arr2)
array_intersect_key($arr1,$arr2)
11、
array_udiff($arr1,$arr2,"function" );
array_udiff_assoc($arr1,$arr2,'function' ) 同上,區別就是這個需要比較鍵名
array_uintersect($arr1,$arr2, 'function' ) 回調函數可以是系統函數,字符串比較函數 例如 strcasecmp
array_uintersect_assoc($arr1,$arr2, 'function' ) 同上,比較鍵名
array_udiff_uassoc($arr1,$arr2,callback1,callback2) 要有兩個比較函數
array_uintersect_uassoc($arr1,$arr2,callback1,callback2) 同樣是要有兩個比較函數
array_diff_ukey($arr1,$arr2,'key_compare_func') 區分大小寫
array_intersect_ukey($arr1,$arr2,' key_compare_func' )
12、
array_flip( array("a" => 1, "b" => 2, "c" => 2) ) -> 1=>a,2=>c;
array_reverse( array("a" => 1, "b" => 2, "c" => 2) ) -> array("c" => 2, "b" => 2, "a" => 1)
13、array_multisort(); 這個數組非常有用,參見手冊,最後一個實例
14、array_pad( array(1,2,3),-5,5 ) -> array(5,5,1,2,3)
15、
array_pop( array(1,2,3) ) -> array(1,2)
array_push( array(1,2) , 2,3) -> array(1,2,2,3) ;array_push ( array(1,2) , array(3,4)) -> array(1,2,array(3,4))
array_shift( array(1,2,3) ) -> array(2,3)
array_unshift( array(1,2,3),4,5 ) ->array(4,5,1,2,3)
array_rand( array(1,3,4) ,2 ) ; 取出兩個單元,-> array(0=>3,1=>4)
array_slice( array(1,2,3,4) ,2,-1 ) -> 3 ;array_slice( array(1,2,3,4),-3,-1 )->2,3 有點類似substr
array_splice( array(1,2,3,4), -2, 1,arry(5,6)) -> array(1,2,5,6,4)
16、
array_product(array(1,2)) -> 2;array_product( array(1,"a") ) -> 0 字符串都轉化爲零
array_sum( array(1,2) ) ->3
17、
arsort( array( 'a'=>'b','c'=>'a','b'=>'c') ) -> array( 'b'=>'c',a'=>'b','c'=>'a' )
asort( array( 'a'=>'b','c'=>'a','b'=>'c') ) -> array( 'c'=>'a',a'=>'b','b'=>'c' );
sort( array(img12,img2,img10,img1) ) -> array( img1,img10,img12,img2) 會丟到索引,新的索引是數字
rsort()
ksort()
krsort()
uksort($arr,cmp_function) 使用對返回值的設置來控制是倒序還是正序排列 return ( $a > $b ) ? - 1 : 1 ; 這是倒序
uasort();
natsort( array(img12,img2,img10,img1) ) -> array(img1,img2,img10,img12) 注意同sort()的區別
natcasesort( array(img1,Img10,img12,mig2) ) -> array( img1,img2,Img10,img12) 上面的話就是Img10在第一位
18、
current( array(1,2,3) ) -> 1 同 pos()
next( array(1,2,3) ) ->2
prev( array(1,2,3) ) -> 1 每個都以上一個爲標準的
end( array(1,2,3) ) -> 3
reset( array(1,2,3) ) ->1
each( array(1,2,3) ) ->[0] = 0,[1]=1
19、
key(array('a' => 1,'b'=>2)) -> a 只會顯示一個鍵值
shuffle($arr)
12 error Handling
1) 生成一個php的回溯
2) 獲取最後一個錯誤信息
3) 將錯誤信息放到一個文件中
4) 設置php的報錯級別
5) 設置錯誤處理程序,恢復以前的錯誤處理程序
6) 設置異常處理程序,恢復以前的異常處理程序
7) 調用系統當前的錯誤處理函數並輸出自己定義的錯誤信息
13 output Control
1) 打開輸出緩存器
2) 獲取緩存器中的內容
3) 輸出緩存器中的內容並關閉緩存器
答案
12
1) debug_backtrace(); 這裏的回溯就是產生一個函數信息,可以讓你隨時使用
2) error_get_last(); 可以用作調試
3) error_log("You messed up!" , 3 , "/var/tmp/my-errors.log" ); 參數3的意思是追加
4) error_reporting(E_ALL) 配置文件中涉及到display_errors = off;error_reporting=E_ALL
5) set_error_handler() 出現錯誤的時候並不會顯示出錯信息而是執行這裏面的回調函數,
restore_error_handler() 但調用這個函數的時候,再出現錯誤的時候不會執行set_error_handler()中的回調函數,而是執行在其之前使用的錯誤處理函數,可能是系統函數也可能是自己定義的函數,如果執行了兩個set_error_handler()那麼就會返回到第一次中
6) set_exception_handler("functionName"); 當執行throw new exception("dfd");時調用的處理函數,restore_exception_handler().同上一個的解釋,或者參考手冊例子更好
7) trigger_error或user_error
13
1) ob_start()
2) ob_get_contents()
3) ob_end_flush()
http://developer.51cto.com/art/200912/166834.htm 詳解php ob_start()函數的功能要點整個control函數可以參考這個例子
14 calendar函數
1、針對指定的年份和日曆,返回一個月中的天數
15 對壓縮文件操作的函數
16 字符編碼
1、字符集轉換
17 其他基本擴展
1、對json格式的字符串進行編碼,對變量進行json編碼
2、獲取服務器響應一個http請求所發送的所有標頭
3、生成 URL-encode 之後的請求字符串,也就是生成一個適用於get傳遞參數的一個字符串
4、 解析 URL,返回其組成部分
5、 使用 MIME base64 對數據進行編碼,和解碼 ,按照 RFC 1738 對 URL 進行編碼和解碼 ,普通編碼URL字符串或解碼
答案
14
1、cal_days_in_month(CAL_GREGORIAN, 8, 2003);
15 zlib函數
16
1、iconv("utf-8","GB2312",$data); GB2312後面最好是加上//IGNORE可以防止由於出錯而丟失數據
17
1、json_decode() json_encode()
2、get_headers()
3、http_build_query() 生成適用於get傳遞的參數 $data = array("a"=》"b","c"=>"d") http_build_query($data);
得到a=b&c=d
4、parse_url('http://www.sina.com/path?arg=value&dd=cc#anchor')
5、
base64_encode(),base64_decode(); 設計此種編碼是爲了使二進制數據可以通過非純 8-bit 的傳輸層傳輸,例如電子郵件的主體。但是會多佔用33%左右的空間
rawurlencode(),rawurldecode(); 是爲了保護原義字符以免其被解釋爲特殊的 URL 定界符,同時保護 URL 格式以免其被傳輸媒體(像一些郵件系統)使用字符轉換時弄亂。
urlencode(),urldecode(); 空格會轉換爲+號
6、session_start()
http://www.osphp.com.cn/read.php/323.htm
http://www.jb51.net/article/15510_2.htm
http://www.cncfan.com/html/?79_5176.html
http://www.jwzzsw.com/?p=563 php5常用函數
http://www.w3school.com.cn/php/func_error_trigger_error.asp 參數解釋
18 session擴展
1、獲取或設置一個session 名字
2、初始化session數據
3、獲取或設置當前的session的id
4、 指定會話頁面所使用的緩衝控制方法
5、設置緩存過期時間
19 BBCode函數
答案
18 session擴展
1、session_name()
2、session_start()
3、session_id()
4、session_cache_limiter()
現在表單的填寫,我們可以用AJAX對用戶隨時進行驗證,進行友好的提示,但是在用戶沒有留意AJAX友好提示,提交了錯誤的表單,跳回原頁,而填寫的信息卻全部丟失了。要支持頁面回跳,有以下的辦法:
1)使用session_cache_limiter方法
session_cache_limiter( 'private,must-revalidate' );
2)用header來設置控制緩存的方法
header( 'Cache-control:private,must-revalidate' );
當session_cache_limiter('private')時,用處是讓表單history.go(-1)的時候,填寫內容不丟失。
5、session_cache_expire()
http://hi.baidu.com/sockerboy/blog/item/a55de5ddf874c4eb76c638b5.html 參見這裏
19
BBCode 代碼是一種 HTML 的特別語法, 它提供了更好的操作方便性和控制面板的編排, 您可以在文章發表的表格上方發現 BBCode 代碼的便捷按鈕
主要是處理文字在頁面的顯示效果包括各種標籤,就先解決wiki或csdn博客中的文字編輯
http://www.cnblogs.com/nodot/articles/1870545.html 這是自己寫的
BB Code 是一種快速易用的方式來為您的文章增加效果或格式化。
什麼是 BBCode 和表情?
http://www.source.edu.cn/bbs/faq.php?mode=bbcode&sid=0a9d238962cda17bc80e1f21af97b45f#0
20 文本處理pcre函數
1、返回與模式匹配的數組單元
2、進行全局正則表達式的匹配
3、進行正則表達式匹配
4、轉義正則表達式字符
5、用回調s函數執行正則表達式的搜索和替換
6、執行正則表達式的搜索和替換
7、使用正則表達式分割字符
答案
20
1、
$array = array("1.3",'3333.2222','23.43','edef');
$fl_array = preg_grep ("/^(/d+)?/./d+$/", $array);
結果:Array ( [0] => 1.3 [1] => 3333.2222 [2] => 23.43 )
2、preg_match_all()
3、從URL中取出主機名
preg_match ( "/^(http:////)?([^//]+)/i" , "http://www.php.net/index.html" , $matches );
$host = $matches [ 2 ];
4、preg_quote('is *very*') is /*very/*
正則表達式的特殊字符包括:. / + * ? [ ^ ] $ ( ) { } = ! < > | :
5、preg_replace_callback() ;主要用於處理匹配的數據,如果有多個子匹配那麼將循環執行回調函數,回調函數的參數是一個數組裏面是匹配的值
6、preg_replace(); 可以使用 //1和/$1表示第一個匹配的
7、preg_split() ;
21 class/object類
1、爲類創建一個別名;獲取父類的名稱;如果此對象是該類的子類,則返回true;獲取對象的名稱
2、檢查類是否已經定義;檢查接口是否已經定義;返回由已定義類的名稱組成的數組;返回由已定義接口的名稱組成的數組;檢查類的方法是否存在
3、返回由類的方法名組成的數組;返回有類的默認屬性組成的數組;返回由對象屬性組成的關聯數組
4、檢查對象或類是否具有該屬性
答案
1、
class_alias(old,new)
get_parent_class($this) ; get_parent_class('classname')
is_subclass_of(new class,'parentObjectName') ->第一個參數是對象,第二個參數是父類的名稱
get_class($obj) ;參數可以是對象或者在類中可以是$this
2、
class_exists(classname)
interface_exists(interfacename)
get_declared_classes()
get_declared_interfaces()
method_exists($obj, $method_name)
3、
get_class_method() 參數可以是obj也可以是字符串
get_class_vars(string classname)
get_class_object(object) 屬性沒有設置,則返回的數組中的值爲空
4、
property_exists($class,$property)
22 filter
1、是一個過濾的函數可以檢測郵箱名稱是否正確
23 function handler
1、調用一個用戶函數,參數以數組的形式傳遞;調用一個用戶函數,只有一個參數
2、判斷函數是否存在
24 variable handler
1、檢測一個變量是否爲空;檢測變量是否設置;釋放給定的變量
2、獲取變量的浮點值;獲取變量的整數值;獲取變量中的字符串;設置變量的類型;獲取變量的類型
3、檢測變量是否爲數組;檢查變量是否爲布爾值;是否是浮點型;是否爲整型;是否爲字符串;是否爲一個對象;是否爲一個數字或數字字符串;是否爲null
4、序列化,產生一個可存儲值的表示;反序列化
答案
22
1、filter_var("[email protected]",FILTER_VALIDATE_EMAIL)
23
1、
call_user_func_array ( "foobar" , array( "one" , "two" )); 回調的參數名稱是foobar,具體的其他的用法參見手冊,還可以用類0
call_user_func(array('classname','methodname'),'param') ; 這是調用一個類的方法
3、function_exists('functionname')
24
1、
empty()
isset() ->對於$a= null 和上面的是一樣的判斷,是不認爲這個變量被初始化,對於array_key_exists('a',array('a'=>null)) 是爲true的
unset($v) ; unset($arr['a']) ; unset($v,$v1,$v2)
2、
floatval("123.44jdf") -> 123.44
intval("123.5fd") -> 123
strval(123.'e') ->123.e
settype('123ef' ,'integer') ->123 ; settype('true','string') -> '1'
gettype(12) -> integer 不要用於檢測類型,可使用is_**來檢測
3、is_array(),is_bool(),is_float()或is_double(),is_int()或is_integer()或is_long() , is_string() , is_object(), is_numeric() ,is_null()
4、serialize() ; unserialize()
五 試題
1 區分empty和isset的區別
答案
1 empty判斷變量是否爲空,isset是判斷變量是否設置,所以對於$p = 0 empty爲真,即表示這個變量等同於空,isset 也爲真,認爲這個變量是被設置過的,如果一個判斷一個變量不允許爲0,使用empty,否則使用isset,
http://hi.baidu.com/_renaisance/blog/item/64b02d2966804bfa98250a4d.html
六 預定義
DIRECTORY_SEPARATOR
手冊 fileinfo
正則表達式
http://www.7880.com/info/Article-626cd6a0.html