1鹿响、$_GET,$_POST观蜗,$_REQUEST 三者的區(qū)別
從一個簡單的理解來看在PHP中$_GET $_POST $_REQUEST都是接受數據了蒂誉,get接受的是url參數而post可以說是由表單post過來的數據,而request是可以接受兩者的數據从橘,這個就是他們基礎的區(qū)別所在了念赶,下面一起來看看它們的區(qū)別證明础钠。
PHP中有$_REQUEST與$_POST、$_GET用于接受表單數據叉谜。
一旗吁、$_REQUEST與$_POST、$_GET的區(qū)別和特點
$_REQUEST[]具用$_POST[] $_GET[]的功能停局,但是$_REQUEST[]比較慢很钓。通過POST和GET方法提交的所有數據都可以通過$_REQUEST數組獲得。
二董栽、$_POST码倦、$_GET的區(qū)別和特點
1. GET是從服務器上獲取數據,POST是向服務器傳送數據锭碳。
2. GET是把參數數據隊列加到提交表單的ACTION屬性所指的URL中袁稽,值和表單內各個字段一一對應,在URL中可以看到擒抛。POST是通過HTTP POST機制推汽,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程歧沪。
3. 對于GET方式提交表單數據歹撒,服務器端用$_GET[‘name’]獲取變量的值,對于POST方式提交表單數據诊胞,服務器端用$_POST[‘name’]獲取提交的數據暖夭,當然,兩者都可以通過$_REQUEST[‘name’]獲得表單數據撵孤。對于REQUEST方式提交表單數據迈着,服務器端用$_REQUEST[‘name’]獲取變量的值,但這種方式很少用早直。
4. GET傳送的數據量較小寥假,不能大于2KB市框。POST傳送的數據量較大霞扬,一般被默認為不受限制。但理論上枫振,一般認為不能超過100KB喻圃。
5. GET安全性非常低,POST安全性較高粪滤。
6. GET表單值可以通過_GET獲雀摹;但通過action的url設置的參數總是獲取不到的杖小,<form method="get" action="a.asp?b=b"></form>
跟<form method="get"action="a.asp"></form>是一樣的肆汹,也就是說愚墓,在這種情況下,GET方式會忽略action頁面后邊帶的參數列表昂勉。POST表單值可以通過_POST獲壤瞬帷;但通過action的url參數設置的參數則可以不能通過_POST獲取到岗照。action=test.php?id=1這種就是GET方式傳值村象,可以用$_REQUEST和$_GET接受傳值,但不能用POST方式獲取到值攒至,即使表單是POST方式提交厚者。所在,在提交表單時迫吐,如果action中同時有參數库菲,最好只能通過POST表單方式,對于表單內數據志膀,直接通過POST獲取蝙昙,對于action中參數,童工GET獲取梧却。
在做數據查詢時奇颠,建議用GET方式,而在做數據添加放航、修改或刪除時烈拒,建議用POST方式。
request是先讀取 get再讀post 的广鳍, 同時存在荆几, 即覆蓋掉前面的變量。
2赊时、$_SESSION吨铸,$_COOKIE 兩者的區(qū)別與聯(lián)系
1、cookie數據存放在客戶的瀏覽器上祖秒,session數據放在服務器上诞吱。
2、cookie不是很安全竭缝,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙考慮到安全應當使用session房维。
3、session會在一定時間內保存在服務器上抬纸。當訪問增多咙俩,會比較占用你服務器的性能考慮到減輕服務器性能方面,應當使用COOKIE湿故。
4阿趁、單個cookie保存的數據不能超過4K膜蛔,很多瀏覽器都限制一個站點最多保存20個cookie。
cookie 和session 的聯(lián)系:
session是通過cookie來工作的
session和cookie之間是通過$_COOKIE['PHPSESSID']來聯(lián)系的脖阵,通過$_COOKIE['PHPSESSID']可以知道session的id飞几,從而獲取到其他的信息。
3独撇、include屑墨、require 有什么區(qū)別,include可以重復引入同一文件嗎纷铣?
:include如果引入的文件不存在,試圖繼續(xù)往下執(zhí)行,報一個warning
(如果你不介意之前的內容是否被包含卵史,之后的內容都要執(zhí)行,就使用include)
而require如果引入的文件不存在,報fatal error,不再繼續(xù)執(zhí)行.
(如果之前的內容一定要被包含搜立,才允許繼續(xù)執(zhí)行之后的代碼以躯,就使用require)
4.Include/require 與 include_once /require_once的區(qū)別
_once 會自動判斷文件是否已經引入,如果引入,不再重復執(zhí)行.
即:保證被包含文件只可能被引入一次.
(如果包含的文件里有定義函數,那么被包含的文件只能被包含一次啄踊,如果多次包含忧设,就會出現(xiàn)函數重定義的錯誤,php是不運行函數重定義的颠通,會出現(xiàn)致命錯誤址晕,之后代碼不在運行)
=======================================================
有的文件不允許被包含多次?
可以用_once來控制,
但是,如果從文件的設計上,比較規(guī)范,能保證肯定不會出現(xiàn)多次包含的錯誤,
這種情況下 建議用include
因為include_once要檢測之前有沒有包含,效率沒有include高
5、寫一個函數顿锰,顯示前天的時間 (年-月-日 時:分:秒)
$a = date("Y-m-d H:i:s", strtotime("-1 day"));
6谨垃、寫一個函數,驗證郵箱的格式是否正確
function ?checkEmail($email){
? ? ? ? ? $pregEmail="/([\w\-]+\@[\w\-]+\.[\w\-]+)/";
? ? ? ? ? return ? ?preg_match($pregEmail,$email);
}
7硼控、有一個data.txt文件刘陶,一行作為一條記錄,請寫一個函數牢撼,分頁顯示data.txt文件的內容匙隔,每頁10條記錄。
8熏版、寫一個自動加載類
9纷责、寫一個函數,顯示當前目錄下的文件及目錄
function ? ? my_scandir($dir)
{
? ? ? ? ? ? ?$files=array();
? ? ? ? ? ? ? if($handle= opendir($dir) ) {
? ? ? ? ? ? ? ? ? ? ? ? while( ($file= readdir($handle)) !== false ) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if($file!=".."&&$file!=".") {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if(is_dir($dir."/".$file) ) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?$files[$file] = scandir($dir."/".$file);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?$files[] =$file;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? closedir($handle);
? ? ? ? ? ? ? ? ? ? ? return$files;
? ? ? ? ? ? ? ? }
}
10纳决、這是一個標準URL (http://127.0.0.1/test.php?type=1)碰逸,請寫一個函數,用最高效的方式獲取所訪問的文件的后綴名
11阔加、mysql數據庫中,innodb 和 myisam 區(qū)別(只少5點)
1满钟、 存儲結構
MyISAM:每個MyISAM在磁盤上存儲成三個文件胜榔。第一個文件的名字以表的名字開始胳喷,擴展名指出文件類型。.frm文件存儲表定義夭织。數據文件的擴展名為.MYD (MYData)吭露。索引文件的擴展名是.MYI (MYIndex)。
InnoDB:所有的表都保存在同一個數據文件中(也可能是多個文件尊惰,或者是獨立的表空間文件)讲竿,InnoDB表的大小只受限于操作系統(tǒng)文件的大小,一般為2GB弄屡。
2题禀、 存儲空間
MyISAM:可被壓縮,存儲空間較小膀捷。支持三種不同的存儲格式:靜態(tài)表(默認迈嘹,但是注意數據末尾不能有空格,會被去掉)全庸、動態(tài)表秀仲、壓縮表。
InnoDB:需要更多的內存和存儲壶笼,它會在主內存中建立其專用的緩沖池用于高速緩沖數據和索引神僵。
3、 事務支持
MyISAM:強調的是性能覆劈,每次查詢具有原子性,其執(zhí)行數度比InnoDB類型更快挑豌,但是不提供事務支持。
InnoDB:提供事務支持事務墩崩,外部鍵等高級數據庫功能氓英。 具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表鹦筹。
4铝阐、 CURD操作
MyISAM:如果執(zhí)行大量的SELECT,MyISAM是更好的選擇铐拐。(因為沒有支持行級鎖)徘键,在增刪的時候需要鎖定整個表格,效率會低一些遍蟋。相關的是innodb支持行級鎖吹害,刪除插入的時候只需要鎖定改行就行,效率較高
InnoDB:如果你的數據執(zhí)行大量的INSERT或UPDATE虚青,出于性能方面的考慮它呀,應該使用InnoDB表。DELETE 從性能上InnoDB更優(yōu),但DELETE FROM table時纵穿,InnoDB不會重新建立表下隧,而是一行一行的刪除,在innodb上如果要清空保存有大量數據的表谓媒,最好使用truncate table這個命令淆院。
5、 外鍵
MyISAM:不支持
InnoDB:支持
12句惯、有一張評論表comment(uid 用戶ID土辩,post_id 評論ID,article_id 文章ID)抢野,請寫一條sql語句查詢出提交評論最多的3個用戶id
select ?user_id ,count(post_id) as sum_post ?from comment ?group by user_id ?order by sum_post ?desc
13拷淘、怎么解決ajax跨域請求
1、允許單個域名訪問
2蒙保、允許多個域名訪問
3辕棚、允許所有域名訪問
14、請講下你對MVC的理解
15邓厕、要實現(xiàn)一個在線倒計時搶購功能逝嚎,需要注意哪些問題?怎么解決這些問題详恼?
16补君、請講下你對高并發(fā)大訪問量的網站解決方案
首先,確認服務器硬件是否足夠支持當前的流量昧互。
普通的P4服務器一般最多能支持每天10萬獨立IP挽铁,如果訪問量比這個還要大,那么必須首先配置一臺更高性能的專用服務器才能解決問題敞掘,否則怎么優(yōu)化都不可能徹底解決性能問題叽掘。
其次,優(yōu)化數據庫訪問玖雁。
前臺實現(xiàn)完全的靜態(tài)化當然最好更扁,可以完全不用訪問數據庫,不過對于頻繁更新的網站赫冬,靜態(tài)化往往不能滿足某些功能浓镜。
緩存技術就是另一個解決方案,就是將動態(tài)數據存儲到緩存文件中劲厌,動態(tài)網頁直接調用這些文件膛薛,而不必再訪問數據庫,WordPress和Z-Blog都大量使用這種緩存技術补鼻。
如果確實無法避免對數據庫的訪問哄啄,那么可以嘗試優(yōu)化數據庫的查詢SQL.避免使用Select * from這樣的語句雅任,每次查詢只返回自己需要的結果,避免短時間內的大,盡量做到"所查即所得" ,遵循以小表為主,附表為輔,查詢條件先索引,先小后大的原則,提高查詢效率.
第三增淹,禁止外部的盜鏈椿访。
外部網站的圖片或者文件盜鏈往往會帶來大量的負載壓力乌企,因此應該嚴格限制外部對于自身的圖片或者文件盜鏈虑润,好在目前可以簡單地通過refer來控制盜鏈,Apache自己就可以通過配置來禁止盜鏈加酵,IIS也有一些第三方的ISAPI可以實現(xiàn)同樣的功能拳喻。當然,偽造refer也可以通過代碼來實現(xiàn)盜鏈猪腕,不過目前蓄意偽造refer盜鏈的還不多冗澈,可以先不去考慮,或者使用非技術手段來解決陋葡,比如在圖片上增加水印亚亲。
第四,控制大文件的下載腐缤。
大文件的下載會占用很大的流量捌归,并且對于非SCSI硬盤來說,大量文件下載會消耗CPU岭粤,使得網站響應能力下降惜索。因此,盡量不要提供超過2M的大文件下載剃浇,如果需要提供巾兆,建議將大文件放在另外一臺服務器上。
第五虎囚,使用不同主機分流主要流量
將文件放在不同的主機上角塑,提供不同的鏡像供用戶下載。比如如果覺得RSS文件占用流量大淘讥,那么使用FeedBurner或者FeedSky等服務將RSS輸出放在其他主機上圃伶,這樣別人訪問的流量壓力就大多集中在FeedBurner的主機上,RSS就不占用太多資源了适揉。
17.你用什么方法檢查 PHP 腳本的執(zhí)行效率(通常是腳本執(zhí)行時間)和數據庫 SQL 的效率(通常是數據庫 Query 時間)留攒, 并定位和分析腳本執(zhí)行和數據庫查詢的瓶頸所在?
1.PHP執(zhí)行時間:??
$begin=microtime(true); //獲取程序開始執(zhí)行的時間?
// some code here 待執(zhí)行的代碼
?$stop=microtime(true);?//獲取程序執(zhí)行結束的時間?
list($m0,$s0)=explode(" ",$begin);
?list($m1,$s1)=explode(" ",$stop);
?$runtime=($s1+$m1-$s0-$m0)*1000;?
echo? ? ‘當前腳本執(zhí)行時間:’.$etime-$stime.'微秒';
?2.SQL執(zhí)行時間(其實和上面一樣):??
$begin=microtime();
?mysql_query($sql);
?$stop=microtime();?
list($m0,$s0)=explode(" ",$begin);
?list($m1,$s1)=explode(" ",$stop);?
$runtime=round(($s1+$m1-$s0-$m0)*1000,4);?
echo '當前腳本執(zhí)行時間:'.$runtime.'ms';