PHP高級(jí)開(kāi)發(fā)工程師面試題及答案匯總
今天扣丁學(xué)堂小編給大家整理一下關(guān)于PHP培訓(xùn)之高級(jí)面試題整理及答案匯總,下面我們一起來(lái)看一下吧。
1.寫(xiě)出一個(gè)能創(chuàng)建多級(jí)目錄的PHP函數(shù)
/**
*創(chuàng)建多級(jí)目錄
*@param$pathstring要?jiǎng)?chuàng)建的目錄
*@param$modeint創(chuàng)建目錄的模式,在windows下可忽略
*/
functioncreate_dir($path,$mode=0777)
{
if(is_dir($path)){
#如果目錄已經(jīng)存在,則不創(chuàng)建
echo"該目錄已經(jīng)存在";
}else{
#不存在,創(chuàng)建
if(mkdir($path,$mode,true)){
echo"創(chuàng)建目錄成功";
}else{
echo"創(chuàng)建目錄失敗";
}
}
}
?>
2.寫(xiě)出smarty模板的特點(diǎn)?
速度快,編譯型,緩存技術(shù),插件機(jī)制,強(qiáng)大的表現(xiàn)邏輯
3.打開(kāi)php.ini中的safe_mode,會(huì)影響哪些函數(shù)?至少說(shuō)出6個(gè)
safe_mode,php安全模式,它提供一個(gè)基本安全的共享環(huán)境,在一個(gè)有多個(gè)用戶賬戶存在的php開(kāi)發(fā)的web服務(wù)器上。當(dāng)安全模式打開(kāi)的時(shí)候,一些函數(shù)將被完全的禁止,而另一些函數(shù)的功能將會(huì)受到限制,如:chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,mkdir,unlink等。
注意,在php5.3以上版本,safe_mode被棄用,在php5.4以上版本,則將此特性完全去除了。
4.抓取遠(yuǎn)程圖片到本地,你會(huì)用什么函數(shù)?
file_get_contents或者curl
5.PHP的垃圾收集機(jī)制是怎樣的
PHP可以自動(dòng)進(jìn)行內(nèi)存管理,清除不再需要的對(duì)象。
PHP使用了引用計(jì)數(shù)(referencecounting)這種單純的垃圾回收(garbagecollection)機(jī)制。每個(gè)對(duì)象都內(nèi)含一個(gè)引用計(jì)數(shù)器,每個(gè)reference連接到對(duì)象,計(jì)數(shù)器加1。當(dāng)reference離開(kāi)生存空間或被設(shè)為NULL,計(jì)數(shù)器減1。當(dāng)某個(gè)對(duì)象的引用計(jì)數(shù)器為零時(shí),PHP知道你將不再需要使用這個(gè)對(duì)象,釋放其所占的內(nèi)存空間。
6.請(qǐng)寫(xiě)一段PHP代碼,確保多個(gè)進(jìn)程同時(shí)寫(xiě)入同一個(gè)文件成功?核心思路:加鎖
$fp=fopen("lock.txt","w+");
if(flock($fp,LOCK_EX)){
//獲得寫(xiě)鎖,寫(xiě)數(shù)據(jù)
fwrite($fp,"writesomething");
//解除鎖定
flock($fp,LOCK_UN);
}else{
echo"fileislocking...";
}
fclose($fp);
?>
7.寫(xiě)一個(gè)函數(shù),盡可能高效的,從一個(gè)標(biāo)準(zhǔn)url里取出文件的擴(kuò)展名?
//方案一
functiongetExt1($url){
$arr=parse_url($url);
//Array([scheme]=>http[host]=>www.codingke.com[path]=>/abc/de/fg.php[query]=>id=1)
$file=basename($arr['path']);
$ext=explode('.',$file);
return$ext[count($ext)-1];
}
//方案二
functiongetExt2($url){
$url=basename($url);
$pos1=strpos($url,'.');
$pos2=strpos($url,'?');
if(strstr($url,'?')){
returnsubstr($url,$pos1+1,$pos2-$pos1-1);
}else{
returnsubstr($url,$pos1);
}
}
$path="http://www.codingke.com/abc/de/fg.php?id=1";
echogetExt1($path);
echo"
";
echogetExt2($path);
?>
相關(guān)題目:使用五種以上方式獲取一個(gè)文件的擴(kuò)展名,要求:dir/upload.image.jpg,找出.jpg或者jpg,必須使用PHP自帶的處理函數(shù)進(jìn)行處理,方法不能明顯重復(fù),可以封裝成函數(shù),比如get_ext1(filename),getext2(file_name)
8.寫(xiě)一個(gè)函數(shù),能夠遍歷一個(gè)文件夾下的所有文件和子文件夾。
functionmy_scandir($dir){
$files=array();
if(is_dir($dir)){
if($handle=opendir($dir)){
while(($flie=readdir($handle))!==false){
if($flie!="."&&$file!=".."){
if(is_dir($dir."/".$file)){
$files[$file]=my_scandir($dir."/".$file);
}else{
$files[]=$dir."/".$file;
}
}
}
closedir($handle);
return$files;
}
}
}
?>
[!!!]9.簡(jiǎn)述論壇中無(wú)限分類的實(shí)現(xiàn)原理。(新浪)
創(chuàng)建類別表如下:
CREATETABLEcategory(
cat_idsmallintunsignednotnullauto_incrementprimarykeycomment'類別ID',
cat_nameVARCHAR(30)NOTNULLDEFAULT''COMMENT'類別名稱',
parent_idSMALLINTUNSIGNEDNOTNULLDEFAULT0COMMENT'類別父ID'
)engine=MyISAMcharset=utf8;
編寫(xiě)一個(gè)函數(shù),遞歸遍歷,實(shí)現(xiàn)無(wú)限分類
functiontree($arr,$pid=0,$level=0){
static$list=array();
foreach($arras$v){
//如果是頂級(jí)分類,則將其存到$list中,并以此節(jié)點(diǎn)為根節(jié)點(diǎn),遍歷其子節(jié)點(diǎn)
if($v['parent_id']==$pid){
$v['level']=$level;
$list[]=$v;
tree($arr,$v['cat_id'],$level+1);
}
}
return$list;
}
?>
10.寫(xiě)一個(gè)函數(shù),算出兩個(gè)文件的相對(duì)路徑,如a=′/a/b/c/d/e.php′;b='/a/b/12/34/c.php';計(jì)算出b相對(duì)于a的相對(duì)路徑應(yīng)該是../../c/d(新浪)
functionreleative_path($path1,$path2){
$arr1=explode("/",dirname($path1));
$arr2=explode("/",dirname($path2));
for($i=0,$len=count($arr2);$i<$len;$i++){
if($arr1[$i]!=$arr2[$i]){
break;
}
}
//不在同一個(gè)根目錄下
if($i==1){
$return_path=array();
}
//在同一個(gè)根目錄下
if($i!=1&&$i<$len){
$return_path=array_fill(0,$len-$i,"..");
}
//在同一個(gè)目錄下
if($i==$len){
$return_path=array('./');
}
$return_path=array_merge($return_path,array_slice($arr1,$i));
returnimplode('/',$return_path);
}
$a='/a/b/c/d/e.php';
$b='/a/b/12/34/c.php';
$c='/e/b/c/d/f.php';
$d='/a/b/c/d/g.php';
echoreleative_path($a,$b);//結(jié)果是../../c/d
echo"
";
echoreleative_path($a,$c);//結(jié)果是a/b/c/d
echo"
";
echoreleative_path($a,$d);//結(jié)果是./
echo"
";
?>
11.mysql_fetch_row()和mysql_fetch_array()有什么分別?
mysql_fetch_row()把數(shù)據(jù)庫(kù)的一列儲(chǔ)存在一個(gè)以零為基數(shù)的數(shù)組中,第一欄在數(shù)組的索引0,第二欄在索引1,依此類推。
mysql_fetch_assoc()把數(shù)據(jù)庫(kù)的一列儲(chǔ)存在一個(gè)關(guān)聯(lián)數(shù)組中,數(shù)組的索引就是字段名稱,例如我的數(shù)據(jù)庫(kù)查詢送回“first_name”、“l(fā)ast_name”、“email”三個(gè)字段,數(shù)組的索引便是“first_name”、“l(fā)ast_name”和“email”。
mysql_fetch_array()可以同時(shí)送回mysql_fetch_row()和mysql_fetch_assoc()的值。
12.有一個(gè)網(wǎng)頁(yè)地址,比如:http://www.codingke.com/php/,如何得到它的內(nèi)容?
方法1(對(duì)于PHP5及更高版本):
$readcontents=fopen("http://www.codingke.com/php/","rb");
$contents=stream_get_contents($readcontents);
fclose($readcontents);
echo$contents;
方法2:
echofile_get_contents("http://www.codingke.com/php/");
13.談?wù)剬?duì)mvc的認(rèn)識(shí)
由模型(model),視圖(view),控制器(controller)完成的應(yīng)用程序。
model層負(fù)責(zé)提供數(shù)據(jù),和數(shù)據(jù)庫(kù)有關(guān)的操作都交給模型層來(lái)處理,view層則提供交互的界面,并輸出數(shù)據(jù),而controller層則負(fù)責(zé)接收請(qǐng)求,并分發(fā)給相應(yīng)的model來(lái)處理,然后調(diào)用view層來(lái)顯示。
14.WhatdoestheGDlibrarydo?
GD庫(kù)提供了一系列用來(lái)處理圖片的API,使用GD庫(kù)可以處理圖片,或者生成圖片。在網(wǎng)站上GD庫(kù)通常用來(lái)生成縮略圖或者用來(lái)對(duì)圖片加水印或者對(duì)網(wǎng)站數(shù)據(jù)生成報(bào)表。自從PHP4.3.0版本后GD便內(nèi)建在PHP系統(tǒng)中。
15.Whatfunctioncanyouusetoopenafileforreadingandwriting?
A.fget();
B.file_open();
C.fopen();
D.open_file();
答案:C
fget()這不是一個(gè)PHP函數(shù),會(huì)引致執(zhí)行錯(cuò)誤。
file_open()這不是一個(gè)PHP函數(shù),會(huì)引致執(zhí)行錯(cuò)誤。
fopen()這是正確答案,fopen()可以用來(lái)開(kāi)啟檔案以便讀寫(xiě)。
open_file()這不是一個(gè)PHP函數(shù),會(huì)引致執(zhí)行錯(cuò)誤。
16.Smarty的原理
smarty是一個(gè)模板引擎,使用smarty主要是為了實(shí)現(xiàn)邏輯和外在內(nèi)容的分離,如果不使用模板的話,通常的做法就是php代碼和html代碼混編。使用了模板之后,則可以將業(yè)務(wù)邏輯都放到php文件中,而負(fù)責(zé)顯示內(nèi)容的模板則放到html文件中。
Smarty在執(zhí)行display方法的時(shí)候,讀取模板文件,并進(jìn)行數(shù)據(jù)替換,生成編譯文件,之后每次訪問(wèn)都會(huì)直接訪問(wèn)編譯文件,讀取編譯文件省去了讀取模板文件,和字符串替換的時(shí)間,所以可以更快,編譯文件里時(shí)間戳記錄模板文件修改時(shí)間,如果模板被修改過(guò)就可以檢測(cè)到,然后重新編譯(編譯是把靜態(tài)內(nèi)容保存起來(lái),動(dòng)態(tài)內(nèi)容根據(jù)傳入的參數(shù)不同而不同)。
如果啟用了緩存,則會(huì)根據(jù)編譯文件生成緩存文件,在訪問(wèn)的時(shí)候如果有緩存文件并且緩存文件沒(méi)有過(guò)期,則直接訪問(wèn)緩存文件。
相關(guān)題目1:能夠使HTML和PHP分離開(kāi)使用的模板
smarty,phplib等
相關(guān)題目2:您是否用過(guò)模板引擎?如果有您用的模板引擎的名字是?
Smarty
17.PHP如何實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)
方法一:php函數(shù)跳轉(zhuǎn),缺點(diǎn),header頭之前不能有輸出,跳轉(zhuǎn)后的程序繼續(xù)執(zhí)行,可用exit中斷執(zhí)行后面的程序。
header("Location:****");//直接跳轉(zhuǎn)
header("refresh:3;url=http://www.codingke.com/");//三秒后跳轉(zhuǎn)
方法二:利用meta
echo"";
18.PHP可以和sqlserver/oracle等數(shù)據(jù)庫(kù)連接嗎?
可以
19.使用哪些工具進(jìn)行版本控制?
SVN或者CVS
相關(guān)題目:您是否用過(guò)版本控制軟件?如果有您用的版本控制軟件的名字是?
TortoiseSVN-1.2.6
20.寫(xiě)出一個(gè)正則表達(dá)式,過(guò)慮網(wǎng)頁(yè)上的所有JS/VBS腳本(即把script標(biāo)記及其內(nèi)容都去掉):
過(guò)濾javascript腳本參考:
header("content-type:text/html;charset=utf-8");
$script="以下內(nèi)容不顯示:";
$pattern='/]*?>.*?/si';
echopreg_replace($pattern,"腳本內(nèi)容",$script);//以下內(nèi)容不顯示:腳本內(nèi)容
?>
21.Givenalineoftext$string,howwouldyouwritearegularexpressiontostripalltheHTMLtagsfromit?
方案一,使用PHP內(nèi)建函數(shù)strip_tags()除去HTML標(biāo)簽
方案二,自定義函數(shù),如下:
header("content-type:text/html;charset=utf-8");
functionstrip_html_tags($str){
$pattern='/<("[^"]*"|\'[^\']\*\'|[^>"\'])*>/';
returnpreg_replace($pattern,'',$str);
}
//實(shí)例
$html='
ddddd
';
echostrip_html_tags($html);
echo"
";
$html='
bb
aaa
';
echostrip_html_tags($html);
?>
22.請(qǐng)寫(xiě)一個(gè)函數(shù)驗(yàn)證電子郵件的格式是否正確(要求使用正則)
preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/',$email);
23.請(qǐng)對(duì)POSIX風(fēng)格和兼容Perl風(fēng)格兩種正則表達(dá)式的主要函數(shù)進(jìn)行類比說(shuō)明
主要區(qū)別有以下三種:
preg_replace()里面的正則可以寫(xiě)成型如:"/.xxx/"而ereg_replace()里面的正則需寫(xiě)成型如"xxx"
preg_replace()能操作數(shù)組,而ereg_replace()不可以
在逆向引用用preg_replace()可使用0-99個(gè),而ereg_replace()最多為9個(gè)
使用Perl兼容正則表達(dá)式語(yǔ)法的preg_match()函數(shù)通常是比ereg()更快的替代方案。
24.請(qǐng)寫(xiě)出并說(shuō)明如何在命令行下運(yùn)行PHP腳本(寫(xiě)出兩種方式)同時(shí)向PHP腳本傳遞參數(shù)?(騰訊)
首先進(jìn)入php安裝目錄
php-fd:/wamp/www/1.php其中-f參數(shù)指定要執(zhí)行的php文件
php-rphpinfo();其中-r表示直接執(zhí)行php代碼,無(wú)需寫(xiě)開(kāi)始結(jié)束標(biāo)記
25.使用正則表達(dá)式提取一段標(biāo)識(shí)語(yǔ)言(html或xml)代碼段中指定標(biāo)簽的指定屬性值(需考慮屬性值對(duì)不規(guī)則的情況,如大小寫(xiě)不敏感,屬性名值與等號(hào)間有空格等)。此處假設(shè)需提取test標(biāo)簽的attr屬性值,請(qǐng)自行構(gòu)建包含該標(biāo)簽的串(騰訊)
編寫(xiě)如下函數(shù):
header("content-type:text/html;charset=utf-8");
functiongetAttrValue($str,$tagName,$attrName){
$pattern1="/<".$tagName."(\\s+\\w+\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\2))*\\s+".$attrName."\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\5)(\\s+\\w+\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\9))*\\s*>/i";
$arr=array();
$re=preg_match($pattern1,$str,$arr);
if($re){
echo"
\$arr[6]={$arr[6]}";
}else{
echo"
沒(méi)找到。";
}
}
//示例
$str1="";
getAttrValue($str1,"test","attr");//找test標(biāo)簽中attr屬性的值,結(jié)果為ddd
$str2="";
getAttrValue($str2,"test2","t1");//找test2標(biāo)簽中t1屬性的值,結(jié)果為t1value
?>
26.Whatdoesthefollowingcodedo?Explainwhat'sgoingonthere.date=′08/26/2003′;printeregreplace(“([0?9]+)/([0?9]+)/([0?9]+)”,2/1/3,date);(Yahoo)
這是把一個(gè)日期從MM/DD/YYYY的格式轉(zhuǎn)為DD/MM/YYYY格式。
輸出26/08/2003
27.Whatfunctionwouldyouusetoredirectthebrowsertoanewpage?
A.redir()
B.header()
C.location()
D.redirect()
答案:B
redir()這不是一個(gè)PHP函數(shù),會(huì)引致執(zhí)行錯(cuò)誤。
header()這個(gè)是正確答案,header()函數(shù)發(fā)送頭信息,可以用來(lái)使瀏覽器轉(zhuǎn)向到另一個(gè)頁(yè)面,例如:header("Location:http://www.search-this.com/")。
location()這不是一個(gè)PHP函數(shù),會(huì)引致執(zhí)行錯(cuò)誤。
redirect()這不是一個(gè)PHP函數(shù),會(huì)引致執(zhí)行錯(cuò)誤。
28.Whenturnedon____________will_________yourscriptwithdifferentvariablesfromHTMLformsandcookies.
A.show_errors,enable
B.show_errors,show
C.register_globals,enhance
D.register_globals,inject
答案:C
29.一個(gè)函數(shù)的參數(shù)不能是對(duì)變量的引用,除非在php.ini中把____設(shè)為on。
allow_call_time_pass_reference
是否啟用在函數(shù)調(diào)用時(shí)強(qiáng)制參數(shù)被按照引用傳遞
30.在HTML語(yǔ)言中,頁(yè)面頭部的meta標(biāo)記可以用來(lái)輸出文件的編碼格式,以下是一個(gè)標(biāo)準(zhǔn)的meta語(yǔ)句,請(qǐng)使用PHP語(yǔ)言寫(xiě)一個(gè)函數(shù),把一個(gè)標(biāo)準(zhǔn)HTML頁(yè)面???的類似meta標(biāo)記中的charset部分值改為big5。(新浪)
請(qǐng)注意:
(1)需要處理完整的html頁(yè)面,即不光此meta語(yǔ)句
(2)忽略大小寫(xiě)
(3)'和"在此處是可以互換的
(4)'Content-Type'兩側(cè)的引號(hào)是可以忽略的,但'text/html;charset=gbk'兩側(cè)的不行
(5)注意處理多余空格
編寫(xiě)正則表達(dá)式如下:
$reg1="/()/i";
31.PHP中如何判斷一個(gè)字符串是否是合法的日期模式:2007-03-1313:13:13。要求代碼不超過(guò)5行。functioncheckDateTime($data){
if(date('Y-m-dH:i:s',strtotime($data))==$data){
returntrue;
}else{
returnfalse;
}
}
//示例
$data='2015-06-2013:35:42';
var_dump(checkDateTime($data));//bool(true)
$data='2015-06-3613:35:42';
var_dump(checkDateTime($data));//bool(false)
?>
32.PHP中,如何獲得一個(gè)數(shù)組的鍵值?
使用key()可以獲得數(shù)組中當(dāng)前元素的鍵名,使用current()則可以返回當(dāng)前元素的值。
使用array_keys()則可以得到數(shù)組中所有的鍵名。
使用foreach結(jié)構(gòu)foreach($arraskey=>value)可以通過(guò)key和value分別獲取鍵名和值。
33.如果模板是用smarty模板。怎樣用section語(yǔ)句來(lái)顯示一個(gè)名為$data的組。比如:
$data=array(
0=>array('id'=>8,'name'=>'name1'),
1=>array('id'=>10,'name'=>'name2'),
2=>array('id'=>15,'name'=>'name3')
);
寫(xiě)出在模板頁(yè)的代碼?若用foreach語(yǔ)句又要怎樣顯示呢?
用section語(yǔ)句:
<{sectionname=testloop=$datastart=0step=1}>
id:<{$data[test].id}>
name:<{$data[test].name}>
<{sectionelse}>
數(shù)組為空
<{/section}>
用foreach語(yǔ)句:
<{foreachfrom=$dataitem=test}>
id:<{$test.id}>
name:<{$test.name}>
<{foreachelse}>
數(shù)組為空
<{/foreach}>
34.哪個(gè)選項(xiàng)會(huì)匹配下邊的這個(gè)正則表達(dá)式?(/.*xyz\d/)
A.*****xyz
B.*****xyz1
C.******xyz2
D.*xyz
答案:C
35.以下哪個(gè)錯(cuò)誤無(wú)法被標(biāo)準(zhǔn)的錯(cuò)誤控制器獲取?
A.E_WARNING
B.E_USER_ERROR
C.E_PARSE
D.E_NOTICE
答案:B
36.以下哪種錯(cuò)誤類型無(wú)法被自定義的錯(cuò)誤處理器捕捉到?
A.E_WARNING
B.E_USER_ERROR
C.E_PARSE
D.E_NOTICE
答案:C
37.(^\s)|(\s$)這個(gè)正則表達(dá)式作用是:__________;
匹配以0個(gè)或多個(gè)空白符開(kāi)頭或者0個(gè)或多個(gè)空白符結(jié)尾的字符串
38.編寫(xiě)函數(shù)取得上一月的最后一天
date_default_timezone_set('PRC');
/**
*獲取給定月份的上一月最后一天
*@param$datestring給定日期
*@returnstring上一月最后一天
*/
functionget_last_month_last_day($date=''){
if($date!=''){
$time=strtotime($date);
}else{
$time=time();
}
$day=date('j',$time);//獲取該日期是當(dāng)前月的第幾天
returndate('Y-m-d',strtotime("-{$day}days",$time));
}
//測(cè)試
echoget_last_month_last_day();
echo"
";
echoget_last_month_last_day("2013-3-21");
?>
39.在很多時(shí)候,我們可以通過(guò)apache的主配置文件來(lái)設(shè)置對(duì)test目錄的訪問(wèn)權(quán)限控制,如http://IP/test請(qǐng)問(wèn)如果需設(shè)置test下的一個(gè)子目錄的訪問(wèn)控制權(quán)限,是否可以在主配置文件中修改,如果不可以應(yīng)如何解決。
可以,還可以在需要控制的子目錄下創(chuàng)建.htaccess文件,寫(xiě)入訪問(wèn)控制。
40.如果我的網(wǎng)站用的utf-8編碼,為防止亂碼出現(xiàn),都需要注意哪些地方?
從以下幾個(gè)方面考慮:
數(shù)據(jù)庫(kù)中庫(kù)和表都用utf8編碼
php連接mysql,指定數(shù)據(jù)庫(kù)編碼為utf8mysql_query(“setnamesutf8”);
php文件指定頭部編碼為utf-8header(“content-type:text/html;charset=utf-8”);
網(wǎng)站下所有文件的編碼為utf8
html文件指定編碼為utf-8
41.在url中用get傳值的時(shí)候,若中文出現(xiàn)亂碼,應(yīng)該用哪個(gè)函數(shù)對(duì)中文進(jìn)行編碼?
urlencode()
42.寫(xiě)出兩種對(duì)變量加密的函數(shù)?
md5(str);sha1(str);
43.如何把2009-9-210:30:25變成unix時(shí)間戳?
date_default_timezone_set("PRC");
//將字符串轉(zhuǎn)成Unix時(shí)間戳
$unix_time=strtotime("2009-9-210:30:45");
echo$unix_time;
echo"
";
//格式化Unix時(shí)間戳為正常時(shí)間格式
echodate("Y-m-dH:i:s",$unix_time);
?>
44.如何把一個(gè)GB2312格式的字符串裝換成UTF-8格式?
iconv('GB2312','UTF-8','悄悄是別離的笙簫');
?>
45.如果需要原樣輸出用戶輸入的內(nèi)容,在數(shù)據(jù)入庫(kù)前,要用哪個(gè)函數(shù)處理?
htmlspecialchars或者h(yuǎn)tmlentities
46.寫(xiě)出五種以上你使用過(guò)的PHP的擴(kuò)展的名稱(提示:常用的PHP擴(kuò)展)
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO等
47.了解MVC模式嗎?請(qǐng)寫(xiě)出三種以上目前PHP流行的MVC框架名稱(不區(qū)分大小寫(xiě))
FleaPHP、ZendFramework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等
48.php中WEB上傳文件的原理是什么,如何限制上傳文件的大小?
上傳文件的表單使用post方式,并且要在form中添加enctype='multipart/form-data'。
一般可以加上隱藏域:,位置在file域前面。
value的值是上傳文件的客戶端字節(jié)限制。可以避免用戶在花時(shí)間等待上傳大文件之后才發(fā)現(xiàn)文件過(guò)大上傳失敗的麻煩。
使用file文件域來(lái)選擇要上傳的文件,當(dāng)點(diǎn)擊提交按鈕之后,文件會(huì)被上傳到服務(wù)器中的臨時(shí)目錄,在腳本運(yùn)行結(jié)束時(shí)會(huì)被銷(xiāo)毀,所以應(yīng)該在腳本結(jié)束之前,將其移動(dòng)到服務(wù)器上的某個(gè)目錄下,可以通過(guò)函數(shù)move_uploaded_file()來(lái)移動(dòng)臨時(shí)文件,要獲取臨時(shí)文件的信息,使用$_FILES。
限制上傳文件大小的因素有:
客戶端的隱藏域MAX_FILE_SIZE的數(shù)值(可以被繞開(kāi))。
服務(wù)器端的upload_max_filesize,post_max_size和memory_limit。這幾項(xiàng)不能夠用腳本來(lái)設(shè)置。
自定義文件大小限制邏輯。即使服務(wù)器的限制是能自己決定,也會(huì)有需要個(gè)別考慮的情況。所以這個(gè)限制方式經(jīng)常是必要的。
49.簡(jiǎn)述UBBcode的實(shí)現(xiàn)原理。(YG)
UBB代碼是HTML的一個(gè)變種,通過(guò)程序自定義我們的標(biāo)簽,比如“[a]PHP中UBB的使用[/a]”這樣的標(biāo)簽,其實(shí)質(zhì)就是查找[a][/a]標(biāo)簽,將其替換成的標(biāo)準(zhǔn)html,說(shuō)白了,就是將標(biāo)準(zhǔn)的html標(biāo)記通過(guò)技術(shù)手段使其簡(jiǎn)化,其輸出出來(lái)的結(jié)果還是標(biāo)準(zhǔn)的html。
明白了ubb的原理,那么再制作一個(gè)簡(jiǎn)單的ubb編輯器就不難了,和fck之類的編輯器比較起來(lái),ubb代碼最大的優(yōu)點(diǎn)就是代碼簡(jiǎn)單,功能很少,簡(jiǎn)單的ubb只需要一個(gè)文件,而且ubb標(biāo)簽可以自己來(lái)定義,更改起來(lái)很方便,在php中就是利用替換函數(shù)就可以將
html進(jìn)行標(biāo)簽化,輸出時(shí)進(jìn)行標(biāo)簽的轉(zhuǎn)化。
50.怎么把文件保存到指定目錄?怎么避免上傳文件重名問(wèn)題?
可以自己設(shè)置上傳文件的保存目錄,與文件名拼湊形成一個(gè)文件路徑,使用move_uploaded_file(),就可以完成將文件保存到指定目錄。
可以通過(guò)上傳的文件名獲取到文件后綴,然后使用時(shí)間戳+隨機(jī)數(shù)+文件后綴的方式為文件重新命名,這樣就避免了重名。
51._____函數(shù)能返回腳本里的任意行中調(diào)用的函數(shù)的名稱。該函數(shù)同時(shí)還經(jīng)常被用在調(diào)試中,用來(lái)判斷錯(cuò)誤是如何發(fā)生的。(奇矩互動(dòng))
debug_print_backtrace()
52.在Smarty模板語(yǔ)法中怎么能遍歷數(shù)組a=array(array(′id′=>0),array(′id′=>1),array(′id′=>2),……)id=>0?10000,怎么判斷當(dāng)id=>500,讓輸出的值在HTML里變?yōu)榧t色?(億郵)設(shè)數(shù)組分配過(guò)來(lái)的數(shù)組名為ids
{sectionname=temploop=$ids}
{if$ids[temp].id==500}
{$ids[temp].id}
{esle}
{$ids[temp].id}
{/if}
{/section}
53.在Smarty模板語(yǔ)法中如何獲取當(dāng)前時(shí)間,并且使用Y-m-dH:i:s的格式輸出?
使用{$smarty.now}來(lái)獲取當(dāng)前時(shí)間,得到的是unix系統(tǒng)時(shí)間戳
使用變量調(diào)節(jié)器進(jìn)行格式化,如下:
{$smarty.now|date_format:“%Y-%m-%d%H:%M:%S”}
54.在Smarty模板語(yǔ)法中如何獲取php的全局環(huán)境變量
$smarty.get.變量#顯示通過(guò)get方式傳過(guò)來(lái)的指定變量的值
$smarty.post.變量#顯示通過(guò)post方式傳過(guò)來(lái)的指定變量的值
$smarty.cookies.變量#顯示通過(guò)cookie中指定變量的值
$smarty.server.SERVER_NAME#顯示server變量值,$_SERVER系列變量
$smarty.env.PATH#顯示系統(tǒng)環(huán)境變量值,$_ENV系列變量
$smarty.session.變量#顯示session中指定變量的值
$smarty.request.變量#顯示通過(guò)post、get、cookie中指定變量的值
55.在Smarty模板中如何用自定義函數(shù)
使用模板分隔符包含,傳遞參數(shù)則使用HTML屬性的方式,例如:
{html_imagefile="pumpkin.jpg"}
56.列舉出你所知道的php系統(tǒng)函數(shù)庫(kù)例如,數(shù)學(xué)函數(shù)庫(kù)
mysql,gd,pdo,XML,zip,filesystem,mail等
57.假如讓你來(lái)寫(xiě)一個(gè)函數(shù)實(shí)現(xiàn)Utf-8轉(zhuǎn)gb2312,那么函數(shù)的名稱應(yīng)該怎么命名?(億郵)
utf8_to_gb2312或者utf8togb2312
58.請(qǐng)描述如下URL重寫(xiě)規(guī)則的用意。
RewriteEngineon
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteBase/
RewriteRule./index.php[L]
如果REQUEST_FILENAME文件存在,就直接訪問(wèn)文件,不進(jìn)行下面的rewrite規(guī)則,
如果REQUEST_FILENAME目錄存在,就直接訪問(wèn)目錄,不進(jìn)行下面的rewrite規(guī)則,
RewriteRule./index.php[L]的意思是把所有的請(qǐng)求都給index.php處理。
59.Warning:Cannotmodifyheaderinformation-headersalreadysentby(outputstartedatD:\src\init.php:7)inD:\src\init.phponline10通常什么情況下php會(huì)報(bào)該警告信息?
一般是在header、set_cookie以及session_start函數(shù)前面有輸出(包括空格)的情況下,會(huì)報(bào)該警告信息
以上就是扣丁學(xué)堂盤(pán)點(diǎn)的年P(guān)HP高級(jí)開(kāi)發(fā)工程師面試題及答案匯總的詳細(xì)的介紹,最后想要學(xué)好PHP一定要選擇專業(yè)靠譜的PHP培訓(xùn)機(jī)構(gòu),扣丁學(xué)堂PHP培訓(xùn)不僅有專業(yè)的老師和與時(shí)俱進(jìn)的課程體系,還有大量的PHP視頻教程供學(xué)員觀看學(xué)習(xí),想要學(xué)好PHP的小伙伴抓緊時(shí)間行動(dòng)吧??鄱W(xué)堂PHP技術(shù)交流群:374332265。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。