您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)PHP經(jīng)典面試題有哪些的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
1.合并兩個(gè)數(shù)組有幾種方式,試比較它們的異同
方式:
1、array_merge()
2、’+’
3、array_merge_recursive
異同:
array_merge 簡(jiǎn)單的合并數(shù)組
array_merge_recursive 合并兩個(gè)數(shù)組,如果數(shù)組中有完全一樣的數(shù)據(jù),將它們遞歸合并
array_combine 和 ‘+’ :合并兩個(gè)數(shù)組,前者的值作為新數(shù)組的鍵
2.請(qǐng)寫一個(gè)函數(shù)來檢查用戶提交的數(shù)據(jù)是否為整數(shù)(不區(qū)分?jǐn)?shù)據(jù)類型,可以為二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制數(shù)字)
答:其實(shí)主要還是 is_int 和 floor 這個(gè)方法
if(!is_numeric($jp_total)||strpos($jp_total,".")!==false){ echo "不是整數(shù)"; }else{ echo "是整數(shù)"; }
3.PHP 的 strtolower () 和 strtoupper () 函數(shù)在安裝非中文系統(tǒng)的服務(wù)器下可能會(huì)導(dǎo)致將漢字轉(zhuǎn)換為亂碼,請(qǐng)寫兩個(gè)替代的函數(shù)實(shí)現(xiàn)兼容 Unicode 文字的字符串大小寫轉(zhuǎn)換
答:原因是:中文是由多字節(jié)組成的,而只有英文系統(tǒng)的單個(gè)英文字符只有一個(gè)字節(jié),所以該系統(tǒng)把中文的每一個(gè)字節(jié)都做了 strtolower () 處理,改變后的中文字節(jié)拼接在一起就成了亂碼(新生成的編碼映射對(duì)應(yīng)的字符可能就不是中文了)
手動(dòng)解決:用 str_split (string string,intstring,intsplit_length = 1) 按每個(gè)字節(jié)切割,像中文能切割成三個(gè)字節(jié)。對(duì)識(shí)別到的字節(jié)若是英文字母則進(jìn)行轉(zhuǎn)換。
<?php function mystrtoupper($a){ $b = str_split($a, 1); $r = ''; foreach($b as $v){ $v = ord($v); if($v >= 97 && $v<= 122){ $v -= 32; } $r .= chr($v); } return $r; } $a = 'a中你繼續(xù)F@#$%^&*(BMDJFDoalsdkfjasl'; echo 'origin string:'.$a." "; echo 'result string:'; $r = mystrtoupper($a); var_dump($r);
4.PHP 的 is_writeable () 函數(shù)存在 Bug,無法準(zhǔn)確判斷一個(gè)目錄 / 文件是否可寫,請(qǐng)寫一個(gè)函數(shù)來判斷目錄 / 文件是否絕對(duì)可寫
答:其中 bug 存在兩個(gè)方面,
1、在 windowns 中,當(dāng)文件只有只讀屬性時(shí),is_writeable () 函數(shù)才返回 false,當(dāng)返回 true 時(shí),該文件不一定是可寫的。
如果是目錄,在目錄中新建文件并通過打開文件來判斷;
如果是文件,可以通過打開文件(fopen),來測(cè)試文件是否可寫。
2、在 Unix 中,當(dāng) php 配置文件中開啟 safe_mode 時(shí) (safe_mode=on),is_writeable () 同樣不可用。
讀取配置文件是否 safe_mode 是否開啟。
/** * Tests for file writability * * is_writable() returns TRUE on Windows servers when you really can't write to * the file, based on the read-only attribute. is_writable() is also unreliable * on Unix servers if safe_mode is on. * * @access private * @return void */ if ( ! function_exists('is_really_writable')) { function is_really_writable($file){ // If we're on a Unix server with safe_mode off we call is_writable if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE){ return is_writable($file); } // For windows servers and safe_mode "on" installations we'll actually // write a file then read it. Bah... if (is_dir($file)){ $file = rtrim($file, '/').'/'.md5(mt_rand(1,100).mt_rand(1,100)); if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE){ return FALSE; } fclose($fp); @chmod($file, DIR_WRITE_MODE); @unlink($file); return TRUE; } elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) { return FALSE; } fclose($fp); return TRUE; } }
5.PHP 的 chmod () 函數(shù)存在 Bug,無法保證設(shè)置成功,請(qǐng)寫一個(gè)函數(shù)在指定路徑下創(chuàng)建一個(gè)目錄 / 文件并確??梢哉_設(shè)置權(quán)限掩碼
答:我也找不到答案
6.PHP 處理上傳文件信息數(shù)組中的文件類型 $_FILES [‘type’] 由客戶端瀏覽器提供,有可能是黑客偽造的信息,請(qǐng)寫一個(gè)函數(shù)來確保用戶上傳的圖像文件類型真實(shí)可靠
答:用 getimagesize 來判斷上傳圖片的類型比 $_FILES 函數(shù)的 type 更可靠
同一個(gè)文件,使用不同的瀏覽器 php 返回的 type 類型是不一樣的,由瀏覽器提供 type 類型的話,
就有可能被黑客利用向服務(wù)器提交一個(gè)偽裝撐圖片后綴的可執(zhí)行文件。
可以通過 getimagesize () 函數(shù)來判斷上傳的文件類型,如果是頭像文件 會(huì)返回這樣的一個(gè)數(shù)組
Array( [0] => 331 [1] => 234 [2] => 3 [3] => width="331" height="234" [bits] => 8 [mime] => image/png );
如果通過 getimagesize () 函數(shù)返回的是這樣的一個(gè)數(shù)組 說明上傳的是頭像文件。其中索引為 2 的表示類型
1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 =JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM,
你可以通過這個(gè)再去限制上傳的頭像類型
<?php $file=$_FILES['file']; if(!empty($file)) { var_dump($file); var_dump(getimagesize($file["tmp_name"])); } ?>
7.PHP 通過對(duì)數(shù)據(jù)的 URL 編碼來實(shí)現(xiàn)與 Javascript 的數(shù)據(jù)交互,但是對(duì)于部分特殊字符的編解碼與 Javascript 的規(guī)則不盡相同,請(qǐng)具體說明這種差異,并針對(duì) UTF-8 字符集的數(shù)據(jù),寫出 PHP 的編解碼函數(shù)和 Javascript 的編解碼函數(shù),確保 PHP 編碼數(shù)據(jù)可以被 Javascript 正確解碼 、Javascript 編碼的數(shù)據(jù)可以被 PHP 正確解碼
答:
<?php $str = '思源博客siyuantlw/tlw/sy/俺只是一個(gè)打醬油的'; $str = iconv("GB2312",'UTF-8',$str); $str = urlencode($str); ?>
//js decodeURIComponent 貌似對(duì) GB2312 編碼的格式不識(shí)別,必須轉(zhuǎn)為 utf-8 才可以,然后,如果字符串中有空格的 就轉(zhuǎn)為 + 號(hào)了
<html> <script> var ds = '<?php echo $str;?>'; var dddd= decodeURIComponent (ds); alert(dddd); </script> </html>
感謝各位的閱讀!關(guān)于“PHP經(jīng)典面試題有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。