php 常見(jiàn)問(wèn)題總結(jié)
1. include 與 require的區(qū)別,require和require_once的效率哪個(gè)高?
? Php在遇到include時(shí)就解釋一次,如果頁(yè)面中出現(xiàn)10次include,php就解釋10次,而php遇到require時(shí)只解釋一次,即使頁(yè)面出現(xiàn)多次require也只解釋一次,因此require的執(zhí)行表率比include高。
Php使用require包含文件時(shí)將被包含的文件當(dāng)成當(dāng)前文件的一個(gè)組成部分,如果被包含的文件中有語(yǔ)法錯(cuò)誤或者被包含的文件不存在,則php腳本將不再執(zhí)行,并提示錯(cuò)誤。
Php使用include包含文件時(shí)相當(dāng)于指定了這個(gè)文件的路徑,當(dāng)被包含的文件有語(yǔ)法錯(cuò)誤或者被包含的文件不存在時(shí)給出警告,不影響本身腳本的運(yùn)行。
Include在包含文件時(shí)可以判斷文件是否包含,而require則不管任何情況都包含進(jìn)來(lái)。
Require的效率比require_once的效率更高,因?yàn)閞equire_once在包含文件時(shí)要進(jìn)行判斷文件是否已經(jīng)被包含。
2. Cookie和session的區(qū)別,禁止了cookie后session能正常使用嗎?session的缺點(diǎn)是什么?session在服務(wù)器端是存在哪里的?是共有的還是私有的?
? COOKIE保存在客戶端,用戶通過(guò)手段可以進(jìn)行修改,不安全,單個(gè)cookie允許的最大值是3k。而SESSION保存在服務(wù)器端,相對(duì)比較安全,大小沒(méi)有限制。
當(dāng)客戶端的Cookie被禁用或出現(xiàn)問(wèn)題時(shí),PHP會(huì)自動(dòng)把Session ID附著在URL中,這樣再通過(guò)Session ID就能跨頁(yè)使用Session變量了。但這種附著也是有一定條件的,即“php.ini中的session.use_trans_sid = 1“,或者編譯時(shí)打開(kāi)打開(kāi)了“--enable-trans-sid”選項(xiàng)。
?? ?在php.ini文件中
session.use_trans_sid=1
session.use_only_cookies=0
session.use_cookies=1
或者 在php程序中
ini_set(“session.use_trans_sid”,”1″);
ini_set(“session.use_only_cookies”,0);
ini_set(“session.use_cookies”,1
瀏覽器禁用cookie之后還可以使用session。因?yàn)閏ookie被禁止之后,可以通過(guò)url傳遞,在需要限制的頁(yè)面的URL中都加上sessionid。服務(wù)器端在get到這個(gè)sessionid后,在session_start之前,設(shè)置一下得到的id就可以和用戶進(jìn)行關(guān)聯(lián),效果和cookie存sessionid一樣。
?? ?cookie分兩種,一種可以叫做session cookie,瀏覽器關(guān)閉就會(huì)丟失
一種可以叫做persistent cookie,就是我們通常意義上所說(shuō)的cookie。
通常服務(wù)器端的session是借助于seesion cookie來(lái)和客戶端交互的。
但如果客戶端禁用了cookie的話,session還可以借助于url來(lái)和客戶端交互。
cookie 是在客戶端磁盤上存數(shù)據(jù) session是存在服務(wù)器端的內(nèi)存中
Session的缺點(diǎn):保存在服務(wù)器端,每次讀取都從服務(wù)器進(jìn)行讀取,對(duì)服務(wù)器有資源消耗。
Session保存在服務(wù)器端的文件或數(shù)據(jù)庫(kù)中,默認(rèn)保存在文件中,文件路徑由php配置文件的session.save_path指定。
Session文件是公有的。
3. 怎么防止sql注入?
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
1、過(guò)濾掉一些常見(jiàn)的數(shù)據(jù)庫(kù)操作關(guān)鍵字:select,insert,update,delete,and,*等
或者通過(guò)系統(tǒng)函數(shù):addslashes(需要被過(guò)濾的內(nèi)容)來(lái)進(jìn)行過(guò)濾。
?2、在PHP配置文件中
Register_globals=off;設(shè)置為關(guān)閉狀態(tài) //作用將注冊(cè)全局變量關(guān)閉。
比如:接收POST表單的值使用$_POST['user'],如果將register_globals=on;直接使用$user可以接收表單的值。
?3、SQL語(yǔ)句書(shū)寫(xiě)的時(shí)候盡量不要省略小引號(hào)(tab鍵上面那個(gè))和單引號(hào)
?4、提高數(shù)據(jù)庫(kù)命名技巧,對(duì)于一些重要的字段根據(jù)程序的特點(diǎn)命名,取不易被猜到的
?5、對(duì)于常用的方法加以封裝,避免直接暴漏SQL語(yǔ)句
?6、開(kāi)啟PHP安全模式
Safe_mode=on;
?7、打開(kāi)magic_quotes_gpc來(lái)防止SQL注入
Magic_quotes_gpc=off;默認(rèn)是關(guān)閉的,它打開(kāi)后將自動(dòng)把用戶提交的sql語(yǔ)句的查詢進(jìn)行轉(zhuǎn)換,把'轉(zhuǎn)為\',這對(duì)防止sql注入有重大作用。
因此開(kāi)啟:magic_quotes_gpc=on;
?8、控制錯(cuò)誤信息
關(guān)閉錯(cuò)誤提示信息,將錯(cuò)誤信息寫(xiě)到系統(tǒng)日志。
9、使用mysqli或pdo預(yù)處理。
4. 數(shù)據(jù)庫(kù)索引有幾類,分別是什么?什么時(shí)候該用索引
普通索引、主鍵索引、唯一索引
并非所有的數(shù)據(jù)庫(kù)都以相同的方式使用索引,作為通用規(guī)則,只有當(dāng)經(jīng)常查詢列中的數(shù)據(jù)時(shí)才需要在表上創(chuàng)建索引。
5. 引用傳值和非引用傳值的區(qū)別,什么時(shí)候該用引用傳值?什么時(shí)候該用非引用傳值?
按值傳遞:函數(shù)范圍內(nèi)對(duì)值的改變?cè)诤瘮?shù)外都會(huì)被忽略。
按引用傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變?cè)诤瘮?shù)外也將反應(yīng)出這些修改。
按值傳遞時(shí),php必須復(fù)制值,如果操作的是大型的對(duì)象和字符串,這將是一個(gè)代價(jià)很大的操作。按引用傳遞不需要復(fù)制值,因此對(duì)性能的提高有好處。
當(dāng)需要在函數(shù)內(nèi)改變?cè)醋兞康闹禃r(shí)用引用傳遞,如果不想改變?cè)兞康闹涤脗髦怠?/span>
6. 寫(xiě)幾個(gè)魔術(shù)方法并說(shuō)明作用?
__call()當(dāng)調(diào)用不存在的方法時(shí)會(huì)自動(dòng)調(diào)用的方法
__autoload()在實(shí)例化一個(gè)尚未被定義的類是會(huì)自動(dòng)調(diào)用次方法來(lái)加載類文件
7. 數(shù)組中下標(biāo)最好是什么類型的,為什么?
數(shù)組的下標(biāo)最好是數(shù)字類型的,數(shù)字類型的處理速度快。
8.?++i和i++哪一個(gè)效率高,為什么?
++i效率比i++的效率更高,因?yàn)?+i少了一個(gè)返回i的過(guò)程。
9.magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?
Magic_quotes_gpc()是php配置文件中的,如果設(shè)置為on則會(huì)自動(dòng)POST,GET,COOKIE中的字符串進(jìn)行轉(zhuǎn)義,在'之前加\
Magic_quotes_runtime()是php中的函數(shù),如果參數(shù)為true則會(huì)數(shù)據(jù)庫(kù)中取出來(lái)的單引號(hào)、雙引號(hào)、反斜線自動(dòng)加上反斜杠進(jìn)行轉(zhuǎn)義。
10.寫(xiě)幾個(gè)魔術(shù)方法并說(shuō)明作用?__set()當(dāng)給未定義的變量賦值時(shí)會(huì)自動(dòng)調(diào)用的方法
__get()當(dāng)獲取未定義變量的值時(shí)會(huì)自動(dòng)調(diào)用的方法
__construct()構(gòu)造方法,實(shí)例化類時(shí)自動(dòng)調(diào)用的方法
__destroy()銷毀對(duì)象時(shí)自動(dòng)調(diào)用的方法
__unset()當(dāng)對(duì)一個(gè)未定義變量調(diào)用unset()時(shí)自動(dòng)調(diào)用的方法
__isset()當(dāng)對(duì)一個(gè)未定義變量調(diào)用isset()方法時(shí)自動(dòng)調(diào)用的方法
__clone()克隆一個(gè)對(duì)象
__tostring()當(dāng)輸出一個(gè)對(duì)象時(shí)自動(dòng)調(diào)用的方法
11.Echo()、print()、print_r()的區(qū)別?
Echo() 是PHP語(yǔ)法,可以輸出多個(gè)值,不能輸出數(shù)組,echo不是函數(shù),沒(méi)有返回值。
Print() 是php的語(yǔ)言結(jié)構(gòu),是打印字符串,可以輸出單個(gè)簡(jiǎn)單類型的變量值,是一個(gè)函數(shù)有返回值,所以如果只是輸出,echo會(huì)更快。
Print_r() 是php函數(shù),可以打印出復(fù)雜類型變量的值,如數(shù)組,對(duì)象。
12.談?wù)勀銓?duì)Mvc的認(rèn)識(shí)
MVC是一種設(shè)計(jì)模式,強(qiáng)制使輸入、處理、輸出分開(kāi),MVC的三個(gè)核心部分:M模型,V視圖,C控制器。
視圖就是用戶看到并與之交互的界面。
模型就是程序的數(shù)據(jù)業(yè)務(wù)規(guī)則。
控制器接收用戶的數(shù)組調(diào)用模型和視圖去完成用戶需求。
使用MVC的優(yōu)點(diǎn):低耦合、高重用性、較低的生命周期成本、快速開(kāi)發(fā)部署、可維護(hù)性、可擴(kuò)展性,有利于軟件工程化管理。
MVC的缺點(diǎn):沒(méi)有明確的定義,完全理解并不容易。小型項(xiàng)目不適合用MVC。
13.框架中什么是單一入口和多入口,單一入口的優(yōu)缺點(diǎn)
多入口就是通過(guò)訪問(wèn)不同的文件來(lái)完成用戶請(qǐng)求。
單一入口只web程序所有的請(qǐng)求都指向一個(gè)腳本文件的。
單一入口更容易控制權(quán)限,方便對(duì)http請(qǐng)求可以進(jìn)行安全性檢查。
缺點(diǎn):URL看起來(lái)不那么美觀,特別是對(duì)搜索引擎來(lái)說(shuō)不友好。
14.打印一個(gè)用‘.’鏈接的字符串時(shí)候,還可以用什么代替‘.’鏈接效率更高些?
可以用,代替.,效率更高。
15.提示類型200、404、502是什么意思?
200是請(qǐng)求成功,404是文件未找到,502是服務(wù)器內(nèi)部錯(cuò)誤,300重定向,403服務(wù)器拒絕訪問(wèn),500服務(wù)器內(nèi)部錯(cuò)誤
16.編寫(xiě)一個(gè)自定義函數(shù)提取這段路徑的的后綴名。
“Www/hello/test.php.html?a=3&b=4”
Function geturltype($url){
$info=parse_url($url);
Return end(explode('.',$info['path']));
}
17.你對(duì)Memcach的理解,優(yōu)點(diǎn)有哪些?
Memcache是一種緩存技術(shù),在一定的時(shí)間內(nèi)將動(dòng)態(tài)網(wǎng)頁(yè)經(jīng)過(guò)解析之后保存到文件,下次訪問(wèn)時(shí)動(dòng)態(tài)網(wǎng)頁(yè)就直接調(diào)用這個(gè)文件,而不必在重新訪問(wèn)數(shù)據(jù)庫(kù)。使用memcache做緩存的好處是:提高網(wǎng)站的訪問(wèn)速度,減輕高并發(fā)時(shí)服務(wù)器的壓力。
Memcache的優(yōu)點(diǎn):穩(wěn)定、配置簡(jiǎn)單、多機(jī)分布式存儲(chǔ)、速度快
18.談?wù)勀銓?duì)php的基本認(rèn)識(shí)
php是Hypertext Preprocessor(超文本預(yù)處理的簡(jiǎn)稱),是一種用來(lái)開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站的服務(wù)器端腳本語(yǔ)言
19.在一個(gè)頁(yè)面上有幾種方式添加css
三種:(1)引用外部css文件? (2)引用內(nèi)部css文件? (3)引用內(nèi)聯(lián)css樣式
20.PHP支持多繼承嗎?
不支持。PHP中只允許單繼承,父類可以被一個(gè)子類用關(guān)鍵字“extends”繼承。
21.表單中?get與post提交方法的區(qū)別?
get是發(fā)送請(qǐng)求HTTP協(xié)議通過(guò)url參數(shù)傳遞進(jìn)行接收,而post是實(shí)體數(shù)據(jù),可以通過(guò)表單提交大量信息.
22.數(shù)據(jù)庫(kù)中的事務(wù)是什么?
事務(wù)(transaction)是作為一個(gè)單元的一組有序的數(shù)據(jù)庫(kù)操作。如果組中的所有操作都成功,則認(rèn)為事務(wù)成功,即使只有一個(gè)操作失敗,事務(wù)也不成功。如果所有操作完成,?
事務(wù)則提交,其修改將作用于所有其他數(shù)據(jù)庫(kù)進(jìn)程。如果一個(gè)操作失敗,則事務(wù)將回滾,該事務(wù)所有操作的影響都將取消。
23..解釋下PHP類中:protected,public,prtvate,interface,abstract ,final,static的含義?
protected受保護(hù)的,在本類和子類中有效.
public 公共的,在本類,子類中,類外都可以用
private私有的,只在本類中有用
interface定義一個(gè)接口時(shí)使用的關(guān)鍵字
abstract定義一個(gè)抽象類或者抽象方法時(shí)使用的關(guān)鍵字.
final用final申明的方法無(wú)法被覆蓋,用final申明的類不能被繼承
static定義一個(gè)靜態(tài)方法或者靜態(tài)屬性使用的關(guān)鍵字
24.描述下大流量高并發(fā)量網(wǎng)站的解決方案確認(rèn)服務(wù)器硬件是否足夠支持當(dāng)前的流量
使用memcache緩存技術(shù),將動(dòng)態(tài)數(shù)據(jù)緩存到內(nèi)存中,動(dòng)態(tài)網(wǎng)直接調(diào)用這些文件不必再訪問(wèn)數(shù)據(jù)庫(kù)
禁用外部盜鏈,外部網(wǎng)站的圖片或者文件盜鏈往往會(huì)帶來(lái)大量的負(fù)載壓力,因此應(yīng)該嚴(yán)格限制外部對(duì)自身圖片或者文件盜鏈.目前可以簡(jiǎn)單的通refer來(lái)控制盜鏈.apache自己就可以通過(guò)配置來(lái)禁止盜鏈.
控制大文件的下載,大文件下載會(huì)占很大的流量.對(duì)于非SCSI硬盤來(lái)說(shuō)會(huì)消耗,使得網(wǎng)站響應(yīng)能力下降.
使用不迥的主機(jī)分流主要流量,使用流量統(tǒng)計(jì)軟件可以知道哪些地方不費(fèi)大量流量,哪些頁(yè)面需要再進(jìn)行優(yōu)化
分庫(kù)分表
sphinx全文索引引擎
25.linux下建立壓縮包,解壓縮包的命令壓縮:gzip tar -cvfz,zip,bzip2
解壓:gunzip,tar -zxvf,unzip,bunzip2
26.用PHP寫(xiě)出顯示客戶端IP與服務(wù)器IP的代碼1分)
$_SERVER["REMOTE_ADDR"]
$_SERVER["SERVER_ADDR"]
?
?
?
?
?
?
PHP怎么學(xué)習(xí)?PHP怎么入門?PHP在哪學(xué)?PHP怎么學(xué)才快?不用擔(dān)心,這里為大家提供了PHP速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)