1. 程式人生 > >PHP常見的一些問題總結(收藏)

PHP常見的一些問題總結(收藏)

本篇文章給大家帶來的內容是關於PHP常見的一些問題總結(收藏),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

 

1. 字串定義的時候單引號和雙引號有什麼區別?

單引號載入速度比雙引號載入速度快

2.echo(),print(),print_r()的區別?

(1)echo 是語法,Output one or more strings,沒有返回值;
(2)print 是函式,不能輸出陣列和物件,Outputastring,print
有返回值;
(3)print_r 是函式,可以輸出陣列。print_r 是個比較有意思 的函式,可以輸出 stirng、int、float、array、object 等,輸 出 array 時會用結構表示,print_r 輸出成功時返回 true;而 且 print_r 可以通過 print_r($str,true)來,使 print_r 不輸出而 返回 print_r 處理後的值。此外,對於 echo 和 print,基本以 使用 echo 居多,因為其效率比 print 要高。

3. 按照功能分類說說都有哪些字串處理函式?這些函式的作用是什麼?

A. 字串輸出函式
(1)echo $a,$b,$c......; 是一個語言結構,而不是一個真正的
函式。
(2)print($a) 本函式輸出字串。若成功則返回 1,失敗 返回 0
(3)print_r($a)
(4)var_dump($a); 能輸出型別、長度、值
B. 去除字串首尾空格的函式: trim ltrim rtrim(別名: chop) 使用第二個引數,還可以去除指定的字元。
C. 轉義字串函式:addslashes()
D. 獲取字串長度的函式:strlen()
E. 擷取字串長度的的函式:substr()
F. 檢索字串函式: strstr() , strpos()
G. 替換字串函式:str_replace()

4. 請給出以下問題的正確答案?

1).$arr = array('james', 'tom', 'symfony');請將$arr 陣列的值 用 ’,’ 分 割 並 合 並 成 字 符 串 輸 出 ? 

1

echo implode(‘,’,$arr);

2).$str = ‘jack,james,tom,symfony’; 請將$str 用’,’分 割 , 並 把 分 割 後 的 值 放 到 $arr 數 組 中 ? 

1

$arr

= explode(‘,’,$str);

3).$arr=array(3,7,2,1,’d’,’abc’);請將$arr按照從大到小的順序排序,並保持其鍵值不變?

1

2

arsort($arr);

print_r($arr);

4).$mail = “[email protected]”;請將此郵箱的域(163.com)取出來並列印,看最多能寫出幾種方法?

1

2

3

echostrstr($mail,'163');

echosubstr($mail,7);

$arr=explode("@",$mail);echo$arr[1];

5.頁面字元出現亂碼,怎麼解決?

1.首先考慮當前檔案是不是設定了字符集。檢視是不是 meta 標籤中寫了 charset,如果是 php 頁面還可以看看是不是
在 header()函式中指定了 charset;
例如:

1

2

3

<meta http-equiv="Content-Type" content="text/html;

charset=utf-8"/>

header(“content-type:text/html;charset=utf-8”);

2.如果設定了字符集(也就是 charset),那麼判斷當前檔案
儲存的編碼格式是否跟頁面設定的字符集保持一致,
兩者必須保持統一;
3.如果涉及到從資料庫提取資料,那麼判斷資料庫查詢時的
字符集是否跟當前頁面設定的字符集一致,兩者必須統一,
例如:

1

mysql_query(“set names utf8”)。

6. 正則表示式是什麼?php 中有哪些常用的跟正則相關的 函式?請寫出一個 email 的正則,中國手機號碼和座機號碼的正則表示式?

正則表示式是用於描述字元排列模式的一種語法規則。正則表示式也叫做模式表示式。網站開發中正則表示式最常用於表單提交資訊前的客戶端驗證。
比如驗證使用者名稱是否輸入正確,密碼輸入是否符合要求, email、手機號碼等資訊的輸入是否合法
在 php 中正則表示式主要用於字串的分割、匹配、查詢和
替換操作。
preg 系列函式可以處理。具體有以下幾個:
stringpreg_quote(stringstr[,stringdelimiter])
轉義正則表示式字元 正則表示式的特殊字元包括:.\\+*? [^]$(){}=!<>|:。
preg_replace-- 執行正則表示式的搜尋和替換
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject[,intlimit]
preg_replace_callback -- 用回撥函式執行正則表示式的搜尋
和替換
mixed preg_replace_callback ( mixed pattern, callback callback, mixedsubject[,intlimit])
preg_split-- 用正則表示式分割字串
array preg_split ( string pattern, string subject [, int limit [, int flags]])
常用的正則表示式寫法:
中文:/^[\u4E00-\u9FA5]+$/
手機號碼:/^(86)?0?1\d{10}$/
EMAIL:
/^[\w-]+[\w-.][email protected][\w-]+\.{1}[A-Za-z]{2,5}$/
密碼(安全級別中) :
/^(\d+[A-Za-z]\w*|[A-Za-z]+\d\w*)$/
密碼(安全級別高) :
/^(\d+[[email protected]#$%^&(){}][\[email protected]#$%^&(){}]*|[a-zA-Z~! @#$%^&(){}]+\d[\[email protected]#$%^&(){}]*)$/

7.preg_replace()和 str_ireplace()兩個函式在使用上有什麼 不同?preg_split()和 split()函式如何使用?

preg_replace — 執行正則表示式的搜尋和替換
str_ireplace — str_replace() 的 忽 略 大 小 寫 版 本 str_replace — 子字串替換
preg_split — 用正則表示式分割字串
split — 用正則表示式將字串分割到陣列中

8. 獲取當前時間戳的函式主要有哪些?用 PHP 打印出今 天的時間,格式是2010-12-10 22:21:21?用 PHP 打印出前一天的時間格式是2010-12-10 22:21:21? 如何把2010-12-25 10:30:25變成 unix 時間戳?

1

2

3

4

echodate("Y-m-dH:i:s",strtotime(‘-1,days’));

date('Y-m-dH:i:s',time());

$unix_time = strtotime("2009-9-2 10:30:25");//變成 unix 時間戳

echodate("Y-m-dH:i:s",$unix_time);//格式化為正常時間格式

9.在 url 中用 get 傳值的時候,若中文出現亂碼,應該用哪個函式對中文進行編碼?

使用者在網站表單提交資料的時候,為了防止指令碼攻擊(比如 使用者輸入<script>alert(111);</script>),php 端接收資料的
時候,應該如何處理?
使用 urlencode()對中文進行編碼,使用 urldecode()來解碼。
使用 htmlspecialchars($_POST[‘title’])來過濾表單傳參就可以避免指令碼攻擊。

10. 說 說 mysql_fetch_row() 和 mysql_fetch_assoc() 和 mysql_fetch_array 之間有什麼區別?

第一個是返回結果集中的一行作為索引陣列,第二個是返回
關聯陣列,而第三個既可以返回索引陣列也可以返回關聯數 組,取決於它的第二個引數 MYSQL_BOTH MYSQL_NUM MYSQL_ASSOC 預設為 MYSQL_BOTH

1

2

3

$sql=”select*fromtable1”;

$result=mysql_query($sql);

mysql_fetch_array($result,MYSQL_NUM);

11. 請說出目前學過的返回是資源的函式?

答:fopen(開啟檔案)
imagecreatefromjpeg(png gif) — 從 JPEG
檔案新建一影象
imagecreatetruecolor — 新建一個真彩色
影象
imagecopymerge — 拷貝併合並影象的一
部分
imagecopyresized — 拷貝部分影象並調
整大小
mysql_connect — 開啟一個到 MySQL MySQL MySQL MySQL
伺服器的連線
mysql_query();只有這執行 select 的時候成功,才返回資源, 失敗返回 FALSE

12. 檔案上傳需要注意哪些細節?怎麼把檔案儲存到指定目錄?怎麼避免上傳檔案重名問題?

1.首現要在 php.ini 中開啟檔案上傳;
2.在 php.ini 中有一個允許上傳的最大值,預設是2MB。必要
的時候可以更改;
3. 上 傳 表 單 一 定 要 記 住 在 form 標 籤 中 寫 上 enctype="multipart/form-data";
4. 提交方式 method 必須是 post;
5. 設定 type="file" 的表單控制元件;
6.要注意上傳檔案的大小 MAX_FILE_SIZE、檔案型別是否符合要求,上傳後存放的路徑是否存在。可以通過上傳的檔名獲取到檔案字尾,然後使用時間戳+檔案字尾的方式為檔案重新命名,這樣就避免了重名。可以自己設定上傳檔案的儲存目錄,與檔名拼湊形成一個檔案 路徑,使用 move_uploaded_file(),就可以完成將檔案儲存到指定目錄。

13. $_FILES 是幾維陣列?第一維和第二維的索引下標分別是什麼?批量上傳檔案的時候需要注意什麼?

二維陣列。第一維是上傳控制元件的 name,二維下標分別為 name/type/tmp_name/size/error.

14.header()函式主要的功能有哪些?使用過程中注意什麼?

答:

1

2

3

4

5

6

header()傳送 http 頭資訊

-header("content-type:text/html; charset=utf-8");-------------------//當前頁面輸出內容是 html,編 碼為 utf-8格式

-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

-header("content-type:image/png gif jpeg");----------------------------------//當前頁面輸出內容的格式是圖片

-header("refresh:5;url=http://www.1004javag.com/five/string.ph p");--//頁面5秒後要跳轉到新網址

-header("location:http://1004javag.com/five/string.php");----------//頁面重定向

15. 檔案下載的時候如果使用 header()函式?

答 : header("content-type: application/octet-stream;charset=UTF-8"); //在這裡加 utf-8和
在上面定義有什麼區別?、??

1

2

3

header("accept-ranges:bytes");

header("accept-length: ".filesize($filedir.$filename));

header("content-disposition: attachment; filename=".$filedir.$filename);

16. 什麼是 ajax?ajax 的原理是什麼?ajax 的核心技術是什 麼?ajax 的優缺點是什麼?

ajax 是 asynchronous JavaScript JavaScript JavaScript JavaScript and xml 的 縮 寫 , 是 javascript、xml、css、DOM 等多個技術的組合。'$'是 jQuer jQuer jQuer jQuery y y y 的別名.
頁面中使用者的請求通過 ajax 引擎非同步地與伺服器進行通 信,伺服器將請求的結果返回給這個 ajax 引擎,
最後由這個ajax引擎來決定將返回的資料顯示到頁面中的 指定位置。Ajax 最終實現了在一個頁面的指定位置可以載入 , 另一個頁面所有的輸出內容。
這樣就實現了一個靜態頁面也能獲取到資料庫中的返回數 據信息了。所以 ajax 技術實現了一個靜態網頁在不重新整理整個
頁面的情況下與伺服器通訊,
減少了使用者等待時間,同時也從而降低了網路流量,增強了
客戶體驗的友好程度。
Ajax 的優點是:
1. 減輕了伺服器端負擔,將一部分以前由伺服器負擔的工
作轉移到客戶端執行,利用客戶端閒置的資源進行處理;
2. 在只區域性重新整理的情況下更新頁面,增加了頁面反應速度,
使使用者體驗更友好。
Ajax 的缺點是不利於 seo 推廣優化,因為搜尋引擎無法直接 訪問到 ajax 請求的內容。
ajax 的核心技術是 XMLHttpRequest,它是 javascript 中的
一個物件。

17.jquery 是什麼?jquery 簡化 ajax 後的方法有哪些?

jQuery 是 Javascript 的一種框架。
$.get(),$.post(),$.ajax()。$是 jQuery 物件的別名。
程式碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

$.post(異 步 訪 問 的 url 地 址 , {' 參 數 名' : 參 數 值} , function(msg){

$("#result").html(msg);

});

$.get( 異 步 訪 問 的 url 地 址 , {' 參 數 名 ' : 參 數 值 } , function(msg){

$("#result").html(msg);

});

$.ajax({

type:"post",

url:loadUrl,

cache:false,

data:"引數名=" + 引數值,

success:function(msg){

$("#result").html(msg);

}

});

18. 什麼是會話控制?

簡單地說會話控制就是跟蹤和識別使用者資訊的機制。會話控制的思想就是能夠在網站中跟蹤一個變數,通過這個變數,系統能識別出相應的使用者資訊,根據這個使用者資訊可以得知使用者許可權,從而展示給使用者適合於其相應許可權的頁面內容。 目前最主要的會話跟蹤方式有 cookie,session。

19. 會話跟蹤的基本步驟

1).訪問與當前請求相關的會話物件

2).查詢與會話相關的資訊

3).儲存會話資訊

4).廢棄會話資料

20. 使用 cookie 的注意事項有哪些?

1) setcookie()之前不可以有任何頁面輸出,就是空格,空白行也不可以;
2) setcookie()後,在當前頁面呼叫$_COOKIE['cookiename'] 不會有輸出,必須重新整理或到下一個頁面才可以看到 cookie值;
3)不同的瀏覽器對 cookie 處理不同,客戶端可以禁用 cookie,瀏覽器也可以閒置 cookie 的數量,一個瀏覽器能創 建的 cookie 數量最多300個,並且每個不可以超過4kb,每個 web 站點能設定的 cookie 總數不能超過20個。
4) cookie 是儲存在客戶端的,使用者禁用了 cookie,那麼 setcookie 就不會起作用了。所以不可以過度依賴 cookie。

21. 使用 session 的時候,通過什麼來表示當前使用者,從而與其他使用者進行區分?

sessionid , 通 過 session_id() 函 數 可 以 取 得 當 前 的 session_id。

22. session 和 cookie 的使用步驟分別是什麼?什麼 是 sesssion 和 cookie 的生命週期?session 和 cookie 的區別是什麼?

1. cookie 是儲存在客戶端機器的,對於未設定過期時間的 cookie,cookie 值會儲存在機器的記憶體中,只要關閉瀏覽器 則 cookie 自動消失。如果設定了 cookie 的過期時間,那麼 瀏覽器會把 cookie 以文字檔案的形式儲存到硬碟中,當再次 開啟瀏覽器時 cookie 值依然有效。
2. session 是把使用者需要儲存的資訊儲存在伺服器端。每個使用者 的 session 資訊就像是鍵值對一樣儲存在伺服器端,其中的 鍵就是 sessionid,而值就是使用者需要儲存資訊。伺服器就是通過 sessionid 來區分儲存的 session 資訊是哪個使用者的。
兩者最大的區別就是 session 儲存在伺服器端,而 cookie 是 在客戶端。session 安全性更高,而 cookie 安全性弱。
3. session 在 web 開發中具有非常重要的份量。它可以將使用者正確登入後的資訊記錄到伺服器的記憶體中,當用戶以此身份訪問網站的管理後臺時,無需再次登入即可得到身份確認。而沒有正確登入的使用者則不分配session 空間,即便輸入了 管理後臺的訪問地址也不能看到頁面內容。通過session 確定了使用者對頁面的操作許可權。

使用 session 的步驟:

1. 啟動 session:使用 session_start()函式來啟動。
2. 註冊會話:直接給$_SESSION 陣列新增元素即可。
3. 使用會話:判斷 session 是否為空或者是否已經註冊,如果已經存在則像普通陣列使用即可。
4. 刪除會話:
1.可以使用 unset 刪除單個 session;
2.使用$_SESSION=array()的方式,一次登出所有的會話變數;
3.使用 session_destroy()函式來徹底銷燬 session。

cookie 怎麼使用?

1. 記錄使用者訪問的部分資訊
2. 在頁面間傳遞變數
3. 將所檢視的 internet 頁儲存在 cookies 臨時資料夾中,可以提高以後的瀏覽速度。

建立 cookie:setcookie(stringcookiename,stringvalue,int expire);
讀取 cookie:通過超級全域性陣列$_COOKIE 來讀取瀏覽器端 的 cookie 的值。
刪除 cookie:有兩種方法
1.手工刪除方法:
右擊瀏覽器屬性,可以看到刪除 cookies,執行操作即可將所 有 cookie 檔案刪除。
2.setcookie()方法:
跟設定 cookie 的方法一樣,不過此時將 cookie 的值設定為 空,有效時間為0或小於當前時間戳。

23. 設定或讀取 session 之前,需要做什麼?

可以直接在php.ini中開啟session.auto_start=1或者在頁面 頭部session_start();
開啟 session,session_start()前面不能有任何輸出,包括空行。

24. 在實際開發中,session 在哪些場合使用?

session 用來儲存使用者登入資訊和用在跨頁面傳值。
1)常用在使用者登入成功後,將使用者登入資訊賦值給 session;
2)用在驗證碼圖片生成,當隨機碼生成後賦值給 session。

25. 登出 session 會話的形式有幾種?

1

2

unset() $_SESSION=array();

session_destroy();