是甚么 ,在甚么地方用,注意甚么,特點,如何配置(相干關聯),出現的問題(缺點),引出解決辦法或另外一種方法
+-
PHP:Hypertext Preprocessor
1、get和post的區分
1. get是從服務器上獲得數據,post是向服務器傳送數據。
2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段逐一對應,在URL中可以看到。post是通過HTTP
post機制,將表單內各個字段與其內容放置在HTML HEADER內1起傳送到ACTION屬性所指的URL地址。用戶看不到這個進程。
3. 對get方式,服務器端用Request.QueryString獲得變量的值,對post方式,服務器端用Request.Form獲得提交的數據。
4. get傳送的數據量較小,不能大于2KB。post傳送的數據量較大,1般被默許為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
5. get安全性非常低,post安全性較高。但是履行效力卻比Post方法好。
2、session與cookie的區分
1、cookie數據寄存在客戶的閱讀器上,session數據放在服務器上。
2、cookie不是很安全,他人可以分析寄存在本地的COOKIE并進行COOKIE欺騙
斟酌到安全應當使用session。
3、session會在1定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能
斟酌到減輕服務器性能方面,應當使用COOKIE。
4、單個cookie保存的數據不能超過4K,很多閱讀器都限制1個站點最多保存20個cookie。
5、所以個人建議:
將登陸信息等重要信息寄存為SESSION
其他信息如果需要保存,可以放在COOKIE中
6、cookie有5個參數(名,值,有效期,服務器路徑,域名,規定是不是通過安全的 HTTPS 連接來傳輸 cookie)
3、數據庫中的事務是甚么
事務是作為1個邏輯單元履行的1系列操作,1個邏輯工作單元必須有4個屬性,稱為
ACID(原子性、1致性、隔離性和持久性)屬性,只有這樣才能成為1個事務:
原子性
事務必須是原子工作單元;對其數據修改,要末全都履行,要末全都不履行。
1致性
事務在完成時,必須使所有的數據都保持1致狀態。在相干數據庫中,所有規則都必須利用于事務的修改,以保持所有數據的完全性。
事務結束時,所有的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。
隔離性
由并發事務所作的修改必須與任何其它并發事務所作的修改隔離。事務查看數據時數據所處的狀態,要末是另外一并發事務修改它之前的狀態,
要末是另外一事務修改它以后的狀態,事務不會查看中間狀態的數據。這稱為可串行性,由于它能夠重新裝載起始數據,
并且重播1系列事務,以使數據結束時的狀態與原始事務履行的狀態相同。
持久性
事務完成以后,它對系統的影響是永久性的。該修改即便出現系統故障也將1直保持。
begin 開始1個事務
rollback事務回滾
commit事務確認
注:rollback和commit不能并列使用,當同時使用時,只有前面1個生效
MYSQL默許是自動提交的
可以通過set autocommit=0 來設置 制止自動提交
可以通過set autocommit=1 來設置 開啟自動提交
4、PHP打印 日期
<?php
echo date('Y-m-d H:i:s', strtotime('⑴ day')); //前1天
echo '<br>';
echo date('Y-m-d H:i:s', strtotime('⑴ week'));//前1周
echo '<br>';
echo date('Y-m-d H:i:s');//現在時間
echo '<br>';
echo date('Y-m-d H:i:s', strtotime('next Monday'));//下1個星期1
echo '<br>';
echo date('Y-m-d H:i:s', strtotime('last Monday'));//上1個星期1
echo “現在的時間是:” .date(h:i:sa); //a - 小寫的上午和午后(am 或 pm)
?>
/* 時間差 */
<?php
$startdate = strtotime("2012-01-01");
$enddate = strtotime("2012-02⑴4");
$days = round(($enddate-$startdate) / 86400)+1;
echo $days;
?>
先用5升的水壺裝滿水,倒入6升的水壺中.6升的水壺中還空出 1升水體積.
2.再用把盛5升水水壺裝滿水,倒入容積6升的水壺中,壺中還剩4升水.
3.把容積6升水中的水倒掉,再把容積5升的水壺倒滿水,把這些水倒入容積6升的壺中,容積5升的水壺中這時候恰好剩下3升水.
5、能夠使Html和PHP分離開的模板
smarty ,phptal ,template、 PHPlib Template 、 FastTemplate
Smarty , Dwoo , TinyButStrong , Template Lite , Savant , phemplate , XTemplate
6、$a='abcdef';請取出$a的值并打印出第1個字
echo $a[0]; echo $a{0}; echo chr(ord($a));
7、echo(),print(),print_r()的區分
echo
可以1次輸出多個值,多個值之間用逗號分隔。echo是語言結構(language construct),而其實不是真實的函數,因此不能作為表達式的1部份使用。
print()
函數print()打印1個值(它的參數),如果字符串成功顯示則返回true,否則返回false。
printf()
printf()源于C語言中的printf()。該函數輸出格式化的字符串。
print_r()和var_dump()
print_r()可以把字符串和數字簡單地打印出來,而數組則以括起來的鍵和值得列表情勢顯示,并以Array開頭
有兩個參數,第2個參數為true的時候,返回值,而不顯示。
8、PHP可以和sql server/oracle等數據庫連接嗎
<?php
$dbconn=oci_connect("你的賬號","你的密碼","你的數據庫名稱");//請把中文件設置為你的值;
$stmt=oci_parse($dbconn, "select * from scott.hallo");
oci_execute($stmt, OCI_DEFAULT);
echo $conn."----selecting\n\n";
while (oci_fetch($stmt))
{
echo ($conn."[".oci_result($stmt, "TEST")."]\n\n");
}
echo ($conn . "----done\n\n");
?>
9、php5權限控制修飾符
public(公共), private(私用), protected(繼承)
9點1:魔術方法
__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload
1、__get、__set
這兩個方法是為在類和他們的父類中沒有聲明的屬性而設計的
__get( $property )
當調用1個未定義的屬性時訪問此方法
__set( $property, $value )
給1個未定義的屬性賦值時調用
這里的沒有聲明包括當使用對象調用時,訪問控制為proteced,private的屬性(即沒有權限訪問的屬性)
2、__isset、__unset
__isset( $property )
當在1個未定義的屬性上調用isset()函數時調用此方法
__unset( $property )
當在1個未定義的屬性上調用unset()函數時調用此方法
與__get方法和__set方法相同,這里的沒有聲明包括當使用對象調用時,訪問控制為proteced,private的屬性(即沒有權限訪問的屬性)
3、__call
__call( $method, $arg_array )
當調用1個未定義的方法是調用此訪求
這里的未定義的方法包括沒有權限訪問的方法
4、__autoload
__autoload 函數,它會在試圖使用還沒有被定義的類時自動調用。通過調用此函數,腳本引擎在
PHP 出錯失敗前有了最后1個機會加載所需的類。
注意: 在
__autoload 函數中拋出的異常不能被
catch 語句塊捕獲并致使致命毛病。
5、__construct、__destruct
__construct 構造方法,當1個對象創建時調用此方法,使用此方法的好處是:可使構造方法有1個唯一無2的名稱,不管它所在的類的名稱是甚么.這樣你在改變類的名稱時,就不需要改變構造方法的名稱
__destruct 析構方法,PHP將在對象被燒毀前(即從內存中清除前)調用這個方法
默許情況下,PHP僅僅釋放對象屬性所占用的內存并燒毀對象相干的資源.
析構函數允許你在使用1個對象以后履行任意代碼來清除內存.
當PHP決定你的腳本不再與對象相干時,析構函數將被調用.
在1個函數的命名空間內,這會產生在函數return的時候.
對全局變量,這產生于腳本結束的時候.如果你想明確地燒毀1個對象,你可以給指向該對象的變量分配任何其它值.通常將變量賦值勤為NULL或調用unset.
6、__clone
PHP5中的對象賦值是使用的援用賦值,如果想復制1個對象則需要使用clone方法,在調用此方法是對象會自動調用__clone魔術方法
如果在對象復制需要履行某些初始化操作,可以在__clone方法實現
7、__toString
__toString方法在將1個對象轉化成字符串時自動調用,比如使用echo打印對象時
如果類沒有實現此方法,則沒法通過echo打印對象,否則會顯示:Catchable fatal error: Object of class test could not be converted to string in
此方法必須返回1個字符串
在PHP 5.2.0之前,__toString方法只有結合使用echo()
或 print()時 才能生效。PHP 5.2.0以后,則可以在任何字符串環境生效(例如通過printf(),使用%s修飾符),但
不能用于非字符串環境(如使用%d修飾符)。從PHP 5.2.0,如果將1個未定義__toString方法的對象
轉換為字符串,會報出1個E_RECOVERABLE_ERROR毛病。
8、__sleep、__wakeup
__sleep 串行化的時候用
__wakeup 反串行化的時候調用
serialize() 檢查類中是不是有魔術名稱
__sleep 的函數。如果這樣,該函數將在任何序列化之前運行。它可以清除對象并應當返回1個包括有該對象中應被序列化的所有變量名的數組。
使用 __sleep
的目的是關閉對象可能具有的任何數據庫連接,提交等待中的數據或進行類似的清除任務。另外,如果有非常大的對象而其實不需要完全貯存下來時此函數也很有用。
相反地,unserialize()
檢查具有魔術名稱 __wakeup
的函數的存在。如果存在,此函數可以重建對象可能具有的任何資源。
使用 __wakeup
的目的是重建在序列化中可能丟失的任何數據庫連接和處理其它重新初始化的任務。
9、__set_state
當調用var_export()時,這個靜態 方法會被調用(自PHP 5.1.0起有效)。
本方法的唯1參數是1個數組,其中包括按array(’property’ => value, …)格式排列的類屬性。
10、__invoke
當嘗試以調用函數的方式調用1個對象時,__invoke
方法會被自動調用。
PHP5.3.0以上版本有效
11、__callStatic
它的工作方式類似于 __call()
魔術方法,__callStatic()
是為了處理靜態方法調用,
PHP5.3.0以上版本有效
PHP 確切加強了對
__callStatic() 方法的定義;它必須是公共的,并且必須被聲明為靜態的。一樣,__call()
魔術方法必須被定義為公共的,所有其他魔術方法都必須如此。
10、寫1個函數,盡量高效的,從1個標準 url 里取出文件的擴大名
例如: http://www.sina.com.cn/abc/de/fg.
public string GetExtended(string url)
{
return url.Substring(url.LastIndexOf('.'));
}
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(".",$file);
return $ext[1];
}
101、php5的構造函數和析構函數是?
構造函數:__construct() 在類實例化對象的同時履行該函數;析構函數:distruct() 在類實例化的對象燒毀時履行。
102、寫1個函數,算出兩個文件的相對路徑
如 $a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
計算出 $b 相對
$a 的相對路徑應當是
../../c/d將()添上
function getRelativePath($a, $b) {
$returnPath = array(dirname($b));
$arrA = explode('/', $a);
$arrB = explode('/', $returnPath[0]);
for ($n = 1, $len = count($arrB); $n < $len; $n++) {
if ($arrA[$n] != $arrB[$n]) {
break;
}
}
if ($len - $n > 0) {
$returnPath = array_merge($returnPath, array_fill(1, $len - $n, '..'));
}
$returnPath = array_merge($returnPath, array_slice($arrA, $n));
return implode('/', $returnPath);
}
遍歷文件夾及文件:
function show($dirs){
$dir = opendir($dirs);
echo "<ul>";
while($f=readdir($dir)){
if($f!='.' && $f!='..'){
echo "<li>{$f}</li>";
if(is_dir("$dirs/{$f}")){
show("$dirs/{$f}");
}
}
}
echo "</ul>";
}
getFiles("C:\web\HTML5Upload");
//getFiles($_SERVER['DOCUMENT_ROOT']);
103、如何 實現網站靜態化
使用php的ob緩存實現頁面靜態化 引出ob緩存,1鍵生成時過期時間1致。
方法1:使用現成的插件,比如:ISAPI_Rewrite、IIS Rewrite、Apache
HTTP服務器的mod_rewrite等,它們都是基于正則表達式解析器開發的重寫引擎。它們的使用方法查看它們自帶的幫助便可。
方法2:自己寫的代碼實現動態網頁靜態化,方法也有好幾種:
1、創建FSO對象,利用此對象將所需的內容動態創建到文件中生成HTML頁面;
2、利用模板技術,將模板中特殊代碼的值替換為從表單或是數據庫字段中接受過來的值 生成HTML文件;
3、使用Server.Transfer轉換技術,
方法3:使用HttpWebRequest要求客戶真個方式,獲得返回資源,生成靜態頁面。1般這樣只需要獲得網頁內容便可,其它資源可放置在服務器上,自動加載。(注:此方法缺點明顯,需要大量更改匹配URL,建議慎用)
方法4:在asp中有IhttpModule接口。Ihttpmodule可以簡單理解為1個可以在履行像.aspx,或mvc中control/action前,添加我們自定義的操作的東西。
104、大流量的網站如何解決訪問量的問題
分類:服務器負載
確認服務器硬件是不是足夠支持當前的流量。
優化數據庫訪問。
制止外部的盜鏈
控制大文件的下載
使用不同主機分流主要流量
使用流量分析統計軟件。
105、PHP獲得客戶端和服務器IP
客戶端 $_SERVER[REMOTE_ADDR]
服務器 $_SERVER[SERVER_ADDR]
106、include和require 的區分
include和require 都能把另外1個文件包括到當前文件中
include引入文件的時候,如果碰到毛病,會給出提示,并繼續運行下邊的代碼。
require引入文件的時候,如果碰到毛病,會給出提示,并停止運行下邊的代碼。
107、如何修改session的生存時間
1:在php.ini 中設置
session.gc_maxlifetime = 1440 //默許時間
2:代碼實現
$lifeTime = 24 * 3600; // 保存1天
session_set_cookie_params($lifeTime);
session_start();
108、php根據URL取得網頁內容
$html = file_get_contents('http://www.baidu.com/');
使用URL獲得內容
使用sinope
109、在HTTP 1.0中,狀態碼401的含義是甚么;如果返回“找不到文件”的提示,用header函數
狀態碼401的含義是:未授權(Unauthorized)
如果返回“找不到文件”的提示 用:Header("http/1.0 403 Forbidden");
(1)、1字開頭:這1類型 的狀態碼,代表要求已被接受,需要繼續處理。這類響應是臨時響應,史包括狀態行和某些可選 的響應頭信息,并以空行結束。
100 發出要求
101 切換協議
(2)、2字開頭的狀態碼,要求已 成功被 器 接收、理解
200 交易成功
201 已創建
202 已接受
203 非權威性信息
204 無內存
205 重置內容
206 部份內容
207 多狀態
(3)、3字開頭:需要客戶端采取進1步的操作才能完成要求。通常,這些狀態碼用來重定向,后續的要求地址在本次響應的location域中指明
301 永久移除
302 臨時移除
(4)、4字開頭:
1、語義有誤,當前要求沒法被服務器理解。除非進行修改,否則客戶端不應當重復提交這個要求
2、要求參數有誤
400 毛病要求
401訪問被謝絕
402 【為將來可能的需求而預留的】
403制止訪問
404 沒有發現文件
(5)、代表了服務器在處理要求的進程中有毛病或異常狀態產生,也有多是服務器意想到以的軟硬件資源沒法完成對要求的處理,除非這是1個HEAD要求,澡是服務器應當包括1個解釋當前毛病狀態和這個善是臨時的還是永久的解釋 信息實體。閱讀器應當向用戶展現任何在當前響應中被 包括的實體
500 內部服務器毛病
501 頁眉值指定了未實現的配置
502 無效響應
503 服務器不可用
504 網關超時
505 服務器不支持
210、談談對MVC的認識
MVC(Model-View-Controller),即把1個利用的輸入、處理、輸出流程依照Model、View、Controller的方式進行分離,這樣1個利用被分成3個層——模型層、視圖層、控制層。
視圖(View):代表用戶交互界面,MVC設計模式對視圖的處理是限于視圖上數據的收集和處理,和用戶的要求,而不包括在視圖上的業務流程的處理。
模型(Model):業務流程/狀態的處理和業務規則的制定。業務流程的處理進程對其它層來講是黑箱操作,模型接受視圖要求的數據,并返回終究的處理結果。業務模型的設計可以說是MVC的核心。
控制(Controller):可以理解為從用戶接收要求,
將模型與視圖匹配在1起,共同完成用戶的要求,但是它卻不做任何的數據處理。
2101、php設計模式
1、單例模式 2、工廠模式 3、視察者模式 4、命令鏈模式 5、策略模式
1、 單例模式:
a) 1個類在全部利用中,只有1個對象實例的設計模式
b) 類必須自行創建這個實例
c) 必須自行向全部系統提供這個實例
3私:私有靜態成員變量、構造函數、克隆函數
1公:公共的靜態方法
2、工廠模式
可以根據輸入的參數或利用程序配置的不同1創建1種專門用來實例化并返回其它類的實例的類
3、視察者模式
視察者模式提供了組件之間緊密耦合的另外一種方法。
該模式:1個對象通過添加1個方法(該方法允許另外一個對象,即視察者注冊自己)全本身變得可視察。當可視察的對象更改時,它會將消息發送到已注冊的視察者。這些視察者使用該信息履行的操作與可視察的對象無關。
2102、HTTP & HTTPS
http ()超文本傳輸協議 |
https (Secure Hypertext Transfer Protocol)安全超文本傳輸協議 |
1、 效力更高 2、 使用端口80來和TCP/IP進行通訊, 信息明文傳輸
|
1、 安全性更高 2、 端口443,使用SSL作為HTTP利用層的子層(SSL使用40位關鍵字作為RC4流的加密算法 SSL:安全保密協議,運行在TCP/IP層之上、利用層之下 3、 使用https需要到CA申請1個用于證明服務器用處類型的證書 |
|
|
1、 http的URL以http://開頭,而https的URL以https://開頭 2、 http是不安全的,而https是安全的 3、 http標準端口80,面https?的標準商品443 4、 在OSI網絡模型中,http工作于利用層,https工作在傳輸層 5、 http沒法加密,而https對傳輸的數據進行加密 6、 http無需證書,而https需要CA機構wosign頒發的SSL證書 |
2103、MySql字符類型
2104、《索引》
(1) 唯1索引:唯1的任務就是加快訪問速度,唯1索引的目的是為了不重復的數據。
(2) 普通索引:普通索引允許被索引的數據列包括重復的值。優點1、簡化MySQL對這個索引的管理工作,使工作更有效力。2、MySQL會對新插入的數據自動檢測是不是有重復的值。 大多時候創建唯1索引的目的常常是為了不重復的數據,而不是提高訪問速度。
(3) 主索引 :即主鍵索引,關鍵字PRIMARY
(4) 外鍵索引:外鍵束縛
(5) 復合索引:索引可以覆蓋多列數據。如 INDEX(columnA,columnB)。這類索引的特點是MySQL可以有選擇的使用這樣的1個索引,比如:INDEX(A,B,C)可以當作A或(A,B )的索引來使用,但不能當作B或(B,C)來使用。
(6) 索引的長度:在為CHAR和VARCHAR類型的數據列定義索引時,可以把索引的長度限制為1個給定的字符個數,這個數字必須小于這個字段所允許的最大字符個數。
(7) 全文索引:針對內容開頭的字符進行檢索操作,如果檢索的內容是多個字段構成、數據量較大,全文索引是必要的。注解:InnoDB數據表不支持全文索引。
2105、索引的優缺點
1、優點:
a)可以保證數據庫表中每行的數據的唯1性
b)可以大大加快數據的索引速度
c)加速表與表之間的連接,物別是在實現數據的參考完事性方面特別成心義
d)在使用分組和排序子句進行數據檢索時,一樣可以顯著減少查詢中分組和排序的時間
f)通過使用索引,可以在時間查詢的進程中,使用優化隱藏器,提高系統的性能
2、缺點:
a) 創建索引和保護索引要耗費時間,這類時間隨著數據量的增加而增加
b) 索引需要占物理空間,除數據表占用數據空間以外,每個索引還要占用1定的物理空間,如果需要建立聚簇索引,那末需要占用的空間會更大
c) 以表中的數據進行增、刪、改的時候,索引也要動態的保護,這就下降了整數的保護速度
4、 建立索引的原則
a) 在常常需要搜索的列上,可以加快搜索的速度
b) 在作為主鍵的列上,強迫該列的唯1性和組織表中數據的排列結構
c) 在常常用在連接的列上,這些列主要是1外鍵,可以加快連接的速度
d) 在經常常需要根據范圍進行搜索的列上創建索引,國為索引已排序,其指定的范圍是連續的
e) 在常常需要排序的列上,國為索引已排序,這樣井底可以利用索引的排序,加快排序井底時間
f) 在常常使用在where子句中的列上,加快條件的判斷速度
2106、Myisam 和 Innodb優缺點
|
MyISAM |
InnoDB |
構成上的區分: |
每一個MyISAM在磁盤上存儲成3個文件。第1個文件的名字以表的名字開始,擴大名指出文件類型。 數據文件的擴大名為 .MYD(MYData) 索引文件的擴大名是 .MYI(MYIndex) |
基于磁盤的資源是InnoDB表空間數據文件和它的日志文件,InnoDB 表的大小只受限于操作系統文件的大小,1般為 2GB |
事務處理上方面: |
MyISAM類型的表強調的是性能,其履行數度比InnoDB類型更快,但是不提供事務支持 |
InnoDB提供事務支持事務, 外部鍵等高級數據庫功能 |
SELECT UPDATE,INSERT,Delete操作 |
MyISAM表格可以被緊縮, 而且它們支持全文搜索 不支持熱備,不支持事務
履行大量的SELECT,MyISAM是更好的選擇 |
1.如果你的數據履行大量的INSERT或UPDATE,出于性能方面的斟酌,應當使用InnoDB表 3. LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據后再改成InnoDB表,但是對使用的額外的InnoDB特性(例如外鍵)的表不適用 |
對AUTO_INCREMENT的操作 |
每表1個AUTO_INCREMEN列的內部處理。 |
如果你為1個表指定AUTO_INCREMENT列,在數據詞典里的InnoDB表句柄包括1個名為自動增長計數器的計數器,它被用在為該列賦新值。 |
表的具體行數 |
select count(*) from table,MyISAM只要簡單的讀出保存好的行數,注意的是,當count(*)語句包括 where條件時,兩種表的操作是1樣的 |
InnoDB 中不保存表的具體行數,也就是說,履行select count(*) from table | <