Php:腳本語言,網(wǎng)站建設(shè),服務(wù)器端運(yùn)行 PHP定義:一種服務(wù)器端的 HTML 腳本/編程語言,是一種簡(jiǎn)單的、面向?qū)ο蟮?、解釋型的、健壯的、安全的、性能非常之高的、?dú)立于架構(gòu)的、可移植的、動(dòng)態(tài)的腳本語言。是一種廣泛用于 Open Source(開放源代碼)的尤其適合 Web 開發(fā)并可以嵌入 HTML 的多用途腳本語言。它的語法接近 C,Java 和 Perl,而且容易學(xué)習(xí)。該語言讓 Web 開發(fā)人員快速的書寫動(dòng)態(tài)生成的網(wǎng)頁。 PHP簡(jiǎn)介:Rasmus Lerdorf發(fā)展歷程(1994:1.0個(gè)人perl,1996:2.0C底層,1998:3.0zendEngine,2000:4.0session+輸出緩沖等,2004:5.0zend引擎2代),平臺(tái)支持(window,Linux,UNIX),數(shù)據(jù)庫(kù)支持(Sqlserver,mysql,Oracle,Access),開發(fā)環(huán)境(Apache2,mysql,php) 服務(wù)器:軟件,常見服務(wù)(HTTP,F(xiàn)TP,MySQL,telnet等) 軟件結(jié)構(gòu):c\s,b\s,PHP地位 Web訪問:IP,域名,hosts,域名服務(wù)器,網(wǎng)站,web訪問 原數(shù)據(jù)保存:php文件,數(shù)據(jù)庫(kù)文件 搭建web服務(wù)器: Wamp,lamp,Apache安裝(www.apache.org) MySQL安裝 PHP安裝(無中文路徑,CMD執(zhí)行php.exe -f,VC6和VC9),配置(Apache加載PHP模塊:LoadModule php5_module “PHP5apachedll路徑”;增加php處理:AddType application/x-httpd-php .php;加載php配置文件:windows,Apache配置文件加載PHPIniDir “PHP配置文件路徑”;配置PHP時(shí)區(qū):date.timezone) Php操作數(shù)據(jù)庫(kù):PHP開啟MySQL擴(kuò)展,指定擴(kuò)展目錄(extension_dir) Web運(yùn)行原理:靜態(tài),動(dòng)態(tài) 虛擬主機(jī)配置:基于域名虛擬主機(jī),包含vhost配置,編輯虛擬vhost文件(VirtualHost,ServerName,DocumentRoot),重啟,修改hosts文件,localhost重配
PHP腳本執(zhí)行:讀入源程序,zendEngine(詞法分析,語法分析),生成opcode,執(zhí)行opcode,解釋,與編譯的區(qū)別 PHP工作:腳本(服務(wù)端腳本,需要web服務(wù)器和瀏覽器),命令行腳本 基本語法:腳本語言(嵌入html),PHP處理(標(biāo)記識(shí)別),標(biāo)記(<?php?>, <script language=”php”></script>默認(rèn),<?短標(biāo)簽?>,<%asp標(biāo)簽%>非默認(rèn),需開啟;不建議使用),最末尾標(biāo)記可以忽略(建議忽略:Ajax返回,節(jié)省流量),PHP語句(分號(hào)結(jié)束,最后一條可以不加) 變量:$符號(hào),有效變量名(字母或者下劃線開始,大小寫敏感),變量增刪改查(unset斷開連接),命名規(guī)則(駝峰法,下劃線) 常量:定義(define),直接使用,特點(diǎn)(不能修改,區(qū)分大小寫,不能刪除,常量值只能是標(biāo)量,命名與變量同,無$),常量判斷(defined),輸出(constant(‘常量名’)) PHP注釋:行注釋,塊注釋 預(yù)定義變量:$_POST,$_GET,$_REQUEST,$_FILES,$_SESSION,$_COOKIE,$GLOBALS,$_SERVER,$_ENV 預(yù)定義常量:__FILE__,__LINE__,__DIR__,__FUNCTION__,__METHOD__,PHP_OS,PHP_VERSION,PHP_INT_SIZE,PHP_INT_MAX 可變變量 傳值:值傳遞,引用傳遞 數(shù)據(jù)類型:PHP若類型,八大數(shù)據(jù)類型(整型,浮點(diǎn)型,布爾型,字符型,數(shù)組型,對(duì)象型,資源型,空型),三大類(標(biāo)量,復(fù)合,特殊) 整型:十進(jìn)制,八進(jìn)制(0),十六進(jìn)制(0x),指定進(jìn)制輸出(printf,%d,%o,%x),整型取值范圍(PHP_INT_SIZE,PHP_INT_MAX),字節(jié),位,進(jìn)制轉(zhuǎn)換(十轉(zhuǎn)其他,除取余反??;其他轉(zhuǎn)十,求冪),整型溢出(浮點(diǎn)型),時(shí)間戳(格林威治時(shí)間,time,date) 浮點(diǎn)型:保留小數(shù)輸出(printf(‘%.2f’),float,double 布爾型:真假,TRUE,F(xiàn)ALSE(非0),布爾值輸出使用var_dump,F(xiàn)ALSE(FALSE,0,0.0,’’,’0’,空數(shù)組,null值) 字符串:?jiǎn)我?hào),雙引號(hào),區(qū)別(解析變量,轉(zhuǎn)義,{},字符串?dāng)?shù)組),定界符(初始標(biāo)記和結(jié)束獨(dú)占一行,結(jié)束標(biāo)記頂格,解析變量,轉(zhuǎn)義,實(shí)際應(yīng)用xml)
運(yùn)算符:算術(shù)運(yùn)算符(+,-,*,/,%),賦值運(yùn)算符(=,+=,-=,*=,/=,%=,.=),比較運(yùn)算符(>,<,>=,<=,==,===,!=,!==),錯(cuò)誤抑制符(@),自操作運(yùn)算符(++,--),字符串運(yùn)算符(.),三目運(yùn)算符(? :),邏輯運(yùn)算符(&&and,||or,!),位運(yùn)算符(&,|,^,~,<<,>>) 原碼反碼補(bǔ)碼:正數(shù)原碼反碼補(bǔ)碼一樣,負(fù)數(shù)符號(hào)位除外求反,+1得補(bǔ)碼 流程控制:順序結(jié)構(gòu),分支結(jié)構(gòu)(if,ifelse,ifelse[else],switch[case,break,default]),循環(huán)結(jié)構(gòu)(for,while,dowhile,foreach,continue,break) 模板語法:標(biāo)簽語法,分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu) 函數(shù):主要功能(代碼重用,模塊化編程),定義(function 函數(shù)名(參數(shù)列表)),調(diào)用(函數(shù)名(參數(shù)列表)),定義與調(diào)用無順序關(guān)系,形參,實(shí)參,參數(shù)傳遞(值傳遞,引用傳值,默認(rèn)值),返回值(return中斷執(zhí)行,單一返回值,多返回值[引用傳遞參數(shù)]),作用域(全局作用域,局部作用域,作用域針對(duì)變量,深入分析[js和PHP],超全局作用域,$GLOBALS和global) 匿名函數(shù) 偽類型:mixed,number,callback,void, 數(shù)據(jù)類型轉(zhuǎn)換:int,integer,bool,Boolean,float,string,array,object,自動(dòng)轉(zhuǎn)換(值轉(zhuǎn)換) 數(shù)據(jù)類型判斷:is_bool,is_float,is_integer,is_object,is_array,is_string,is_resource,is_scalar,is_null,is_numeric,gettype,settype 引用文件:require,include,require_once,include_once,作用(布局,包含公共文件),文件載入原理(加載非執(zhí)行,將編譯后的文件加載),require和include的區(qū)別,文件返回(配置文件) 終止腳本:return,exit,die 載入文件路徑:絕對(duì)路徑,相對(duì)路徑(./,../,/),文件載入的相對(duì)路徑問題 字符串相關(guān)函數(shù):strlen,substr,strtolower,strtoupper,strrev,strpos,strrpos,strchr,strrchr(獲取文件后綴名),trim 時(shí)間相關(guān)函數(shù):time,date,strtotime,microtime 數(shù)學(xué)相關(guān)函數(shù):abs,floor,ceil,round,rand,mt_rand
數(shù)組:概念,使用數(shù)組原因(變量關(guān)聯(lián)),PHP數(shù)組特點(diǎn)(沒有數(shù)據(jù)類型,數(shù)組下標(biāo)可為字符串[不能使用for循環(huán)遍歷],數(shù)組長(zhǎng)度可變不會(huì)溢出),數(shù)組定義(array,[]),數(shù)組不能直接echo,數(shù)組長(zhǎng)度(count,遍歷),foreach(原理:賦值+指針下移) 二維數(shù)組:定義,語法,二維數(shù)組遍歷,關(guān)聯(lián)二維數(shù)組,遍歷 Each+list:each(語法),list(語法,只能獲得索引數(shù)組元素,按照索引順序賦值),each和list組合遍歷數(shù)組,each與foreach區(qū)別(foreach原理,each原理) 數(shù)組相關(guān)函數(shù):key,current,next,prev,end ,reset,array_keys,array_values,數(shù)據(jù)結(jié)構(gòu)模擬(array_shift,array_unshift,array_push,array_pop),字符串分割(explode,implode),array_walk_recursive(回調(diào)函數(shù),按址傳遞) 數(shù)組運(yùn)算:+,array_merge 數(shù)組比較:==,=== 其他函數(shù): range,array_rand,shuffle SQL注入:原理,解決方案(addslashes,stripslashes,magic_quotes_gpc5.3前,get_magic_quotes_gpc),公共函數(shù)(array_walk_recursive對(duì)$_POST轉(zhuǎn)義) 數(shù)組算法:排序(冒泡,插入,選擇,快排),查找(自定義查找,二分法)
表單傳值:網(wǎng)站目的(數(shù)據(jù)管理:收集,整理,存儲(chǔ),發(fā)布),收集(表單實(shí)現(xiàn)),數(shù)據(jù)傳遞(url,form),傳值方式(get,post) 數(shù)據(jù)接收:$_GET,$_POST,$_REQUEST,數(shù)據(jù)處理,$_REQUEST不值得信任(覆蓋,request_order,variables_order) 點(diǎn)擊行為判斷:isset($_POST[‘submit’])/empty() 自動(dòng)配置全局變量:register_gloabals5.3 復(fù)選框使用:[],入庫(kù)(字符拼接),顯示復(fù)選框信息(checked),批量刪除 文件上傳:概念,難點(diǎn)(瀏覽器端,服務(wù)端),流程(表單post,enctype=’multipart/form-data’,PHP配置file_uploads,配置項(xiàng)說明(file_uploades,upload_max_filesize,post_max_size,upload_tmp_dir)),文件上傳流程(本地選擇文件,提交,文件發(fā)送到服務(wù)器臨時(shí)目錄,轉(zhuǎn)義臨時(shí)文件) PHP處理:$_FILES,$_FILES說明,文件移動(dòng)(copy,move_uploaded_file),驗(yàn)證文件類型(MIME),文件重命名(唯一性,可識(shí)別區(qū)分) 上傳函數(shù)封裝
文件操作:原因(保存不經(jīng)常變化數(shù)據(jù)量小的數(shù)據(jù);配置文件,流量統(tǒng)計(jì),靜態(tài)網(wǎng)頁生成,文件下載。。。) 目錄操作:opendir,readdir,rewinddir,closedir,scandir 自定義實(shí)現(xiàn)scandir函數(shù)功能 文件判斷:file_exists,is_dir,is_file,mkdir,rmdir,getcwd,chdir,文件上傳按月分類管理 循環(huán)輸出文件夾下所有文件及子文件夾:靜態(tài)變量,函數(shù)遞歸(原理,遞歸點(diǎn),遞歸出口) 文件操作:讀和寫,PHP5(file_get_contents,file_put_contents[FILE_APPEND,F(xiàn)ILE_USE_INCLUDE_PATH],array file),PHP4(fopen,Mode[r,r+,w,w+,a,a+],fgetc,fgets,fread,fputs,fwrite,fclose,fseek) 文件相關(guān)函數(shù):copy,unlink,rename,filemtime,filesize,fileperms 文件下載:html下載(a href=‘use.zip’,缺點(diǎn):文件格式簡(jiǎn)單,暴露文件完整路徑),PHP(header("Content-type: application/octet-stream"),header("Content-Disposition: attachment; filename=filename" ),輸出文件內(nèi)容) 第二部分 0你Mysql擴(kuò)展庫(kù),PHP操作mysql PHP操作mysql數(shù)據(jù)庫(kù)的主要擴(kuò)展庫(kù):mysql(面向過程),mysqli(面向過程和對(duì)象),pdo(面向?qū)ο螅?/p> 配置mysql擴(kuò)展庫(kù):php.ini加載extension,配置擴(kuò)展路徑extension_dir PHP操作mysql:原理, 連接數(shù)據(jù)庫(kù)(mysql_connect[host,user,pass,new_link]), 關(guān)閉連接(mysql_close), 選擇數(shù)據(jù)庫(kù)(mysql_select_db), 發(fā)送sql(mysql_query,不同類型sql的返回值不同), 解析結(jié)果集資源(mysql_num_rows結(jié)果集行數(shù),mysql_fetch系列獲得結(jié)果集中數(shù)據(jù),結(jié)果集指針,遍歷結(jié)果集) 其他相關(guān)函數(shù):受影響行數(shù)(mysql_affected_rows),新增數(shù)據(jù)的ID(mysql_insert_id),設(shè)置結(jié)果集指針(mysql_data_seek) 注冊(cè)成功跳轉(zhuǎn)功能,分頁功能(一次性獲取,按頁獲取)
HTTP協(xié)議:超文本傳輸協(xié)議,b/s架構(gòu)項(xiàng)目遵循的基本協(xié)議,瀏覽器服務(wù)器通信的基本原理(請(qǐng)求連接(TCP/IP協(xié)議),連接成功,瀏覽器發(fā)送請(qǐng)求,服務(wù)器處理請(qǐng)求,瀏覽器處理結(jié)果,關(guān)閉連接),HTTP協(xié)議兩部分(請(qǐng)求,響應(yīng)),url,特點(diǎn)(支持客戶/服務(wù)器模式,簡(jiǎn)單快速[只需請(qǐng)求方法和路徑],靈活[任意數(shù)據(jù)],無連接[每次連接只處理一個(gè)請(qǐng)求],無狀態(tài)[事務(wù)處理沒有記憶能力]) HTTP請(qǐng)求: 四部分(請(qǐng)求行,請(qǐng)求頭,空行,請(qǐng)求主體) 請(qǐng)求行(請(qǐng)求方式,請(qǐng)求文件,協(xié)議/版本) 請(qǐng)求頭(host,accept-encoding,referer,connection,accept-language,cookie,user-agent,accept,content-length(post),if-modified-since(get),content-type(post)) 空白行 請(qǐng)求主體(post請(qǐng)求數(shù)據(jù)) telnet模擬請(qǐng)求 HTTP響應(yīng): 四部分(狀態(tài)行,響應(yīng)頭,空行,響應(yīng)主體), 狀態(tài)行(協(xié)議/版本,狀態(tài)碼,狀態(tài)說明), 響應(yīng)頭(server,date,last-modified,content-length,content-type,location,refresh,content-encodeing,cache-control), 空行, 響應(yīng)主體(內(nèi)容),header之前不能輸出,header設(shè)置cookie 函數(shù)調(diào)用前不能輸出的函數(shù):session_start,setcookie,header,output_buffering 常用回應(yīng)狀態(tài)信息: 1XX(服務(wù)器接收請(qǐng)求,繼續(xù)處理), 2XX(成功,200), 3XX(重定向,302重定向,304沒有修改), 4XX(請(qǐng)求錯(cuò)誤,404找不到,403禁止), 5XX(服務(wù)器錯(cuò)誤,502無效響應(yīng)) PHP模擬響應(yīng)和請(qǐng)求: 響應(yīng)(跳轉(zhuǎn),刷新,發(fā)送圖片,下載(application/octet-stream,content-disposition:attachment;filename), 請(qǐng)求(fsockopen,fwrite,feof,fgets,get請(qǐng)求,post請(qǐng)求)
面向?qū)ο螅好嫦蜻^程(操作流程)和面向?qū)ο螅ú僮髦黧w),oop(一種軟件設(shè)計(jì)架構(gòu)思想) 基本概念:類(對(duì)象的抽象),對(duì)象(類的實(shí)例化/類類型(自定義數(shù)據(jù)類型)),實(shí)例化,成員(類中的變量,函數(shù),常量) 語法操作: 定義類(class), 實(shí)例化(new,帶括號(hào),不帶括號(hào)), 強(qiáng)制轉(zhuǎn)換(object),stdClass(空類), 訪問修飾限定符(var,public,protected,private,區(qū)別), 對(duì)象訪問成員(->), 類中成員只有三個(gè)(屬性,方法和常量,不能echo), 屬性定義的值必須是固定值,如何訪問私有屬性(方法,$this) 內(nèi)存說明:類,對(duì)象,方法,屬性(從空間使用上劃分,非內(nèi)存劃分) 魔術(shù)方法:構(gòu)造方法(初始化),析構(gòu)方法(釋放資源,unset對(duì)象),構(gòu)造方法私有化 構(gòu)造方法兼容:類名方法 大小寫區(qū)分:屬性,數(shù)組下標(biāo)和變量 對(duì)象傳遞:引用傳遞 對(duì)象比較:==(同類對(duì)象且屬性值相同),===(同一對(duì)象) DB類:類文件命名(類名.class.php) 自動(dòng)加載:實(shí)例化對(duì)象前必須有類定義,自動(dòng)加載(__autoload),自動(dòng)加載原理,自動(dòng)加載沖突(spl_autoload_register) 類常量:定義(const),內(nèi)存劃分,訪問(類訪問,范圍解析操作符,對(duì)象訪問(方法)),self關(guān)鍵字,self和this區(qū)別 靜態(tài)成員:定義(static),屬性,方法,訪問(范圍解析操作符),靜態(tài)屬性與常量的訪問區(qū)別 靜態(tài)方法與非靜態(tài)方法區(qū)別($this) 魔術(shù)方法:__toString()(echo對(duì)象),__clone()(復(fù)制成不同對(duì)象,克隆不走構(gòu)造方法,阻止克隆(private)) 單例模式:概念(一個(gè)類只有一個(gè)對(duì)象),原因(省資源),原理(三私一公) 工廠模式:概念(產(chǎn)生對(duì)象),原因(方便管理),工廠單例模式
面向?qū)ο蟛灰欢ㄓ蓄悾╦s) Oop三大特性:封裝,繼承,多態(tài) 封裝:數(shù)據(jù)和數(shù)據(jù)操作,制作類的過程,隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié)(私有化),對(duì)外提供使用接口(限制讀和寫) 繼承:一個(gè)對(duì)象直接使用另一個(gè)對(duì)象的屬性和方法,減少代碼的重復(fù)性 多態(tài):接口的多種不同的實(shí)現(xiàn)方式,PHP中沒有 繼承:語法(extends),繼承原理,繼承成員控制(protected),繼承訪問(子類訪問父類,父類訪問子類) 繼承沖突:重寫,控制級(jí)別(子類弱于父類),訪問父類同名方法(parent) PHP單繼承,鏈?zhǔn)嚼^承(多繼承),繼承的使用(表類繼承DB類) 特殊類:不能被繼承的類和只能被繼承的類,final類,final方法(可以被繼承但不能別重寫),abstract類(不能實(shí)例化),abstract方法 項(xiàng)目設(shè)計(jì):項(xiàng)目大,團(tuán)隊(duì)多(接口規(guī)范,抽象類規(guī)范),項(xiàng)目?。ú皇褂茫?/p> 接口:專門規(guī)定類的結(jié)構(gòu),語法(interface),接口體(常量和方法,不能實(shí)現(xiàn)方法,只能public),實(shí)現(xiàn)接口(implements),子類必須實(shí)現(xiàn)接口所有方法,實(shí)現(xiàn)多個(gè)接口 面試題:PHP是否支持多繼承?如何模擬?接口是不是類?接口是不是抽象類? PHP重載:用戶操作不存在或者不可用的成員屬性或者方法時(shí)的處理 屬性重載:__get(),__set(),__isset()(isset和empty時(shí)調(diào)用),__unset()(unset調(diào)用) 方法重載:__call(),__callStatic() 重載意義:限定用戶操作的條件,糾錯(cuò)
對(duì)象保存與還原:file_put_contents保存,file_get_contents獲取,對(duì)象不能直接保存 序列化:serialize 反序列化:unserialize,PHP_Incomplete_Class,得不到原對(duì)象原因(資源釋放),引入類文件即可得到原對(duì)象,自動(dòng)加載類,數(shù)據(jù)庫(kù)連接失效 對(duì)象保存與還原:__wakeup(),__sleep() 對(duì)象判斷:instanceof,繼承對(duì)象同屬于子類和父類 對(duì)象涉及方法:class_exists,interface_exists,method_exists,get_class(得到對(duì)象類名),get_parent_class(得到父類名) 對(duì)象遍歷:屬性遍歷,常規(guī)foreach遍歷,類內(nèi)foreach遍歷($this),類內(nèi)具體屬性遍歷(iterator預(yù)定義接口)
【PDO】:PDO,功能(方便移植),原理,配置(擴(kuò)展) PDO主要類:PDO(數(shù)據(jù)庫(kù)連接,sql傳輸),PDOStatement(結(jié)果集,預(yù)處理),PDOException(PDO異常處理) PDO類:構(gòu)造函數(shù)(dsn數(shù)據(jù)源,用戶名,密碼),對(duì)象銷毀(沒有提供,unset,null),執(zhí)行SQL(無結(jié)果集exec(增刪改),lastInsertId;有結(jié)果集PDOStatement query),錯(cuò)誤處理(errorCode,errorInfo) PDOStatement類:相關(guān)函數(shù)(rowCount,columnCount),遍歷結(jié)果集(fetch[FETCH_ASSOC,F(xiàn)ETCH_NUM,F(xiàn)ETCH_BOTH,F(xiàn)ETCH_OBJ,F(xiàn)ETCH_BOUND],bindColumn,fetchAll,fetchColumn,fetchObject,setFetchMode),預(yù)處理(prepare,execute[array參數(shù)],bindParam[推薦,先綁定后賦值],bindValue[不推薦,先賦值后綁定,每次都要綁定]),事務(wù)處理(beginTransaction,commit,rollBack) PDO屬性設(shè)置:setAttribute,getAttribute,屬性名與值(PDO::ATTR_AUTOCOMMIT(1,0),PDO::ATTR_CASE(PDO::CASE_LOWER,PDO::CASE_UPPER,PDO::CASE_NATURAL),PDO::ATTR_ERRMODE(PDO::ERRMODE_SILENT,PDO::ERRMODE_WARNING,PDO::ERRMODE_EXCEPTION),PDO::ATTR_PERSISTENT(TRUE,F(xiàn)ALSE)) PDOException類:try-catch-throw 反射:reflection反射機(jī)制,反射(ReflectionClass::export(類)),反射類內(nèi)部(new ReflectionClass(類),getConstants,getProperties,isStatic,getMethods)
Ecshop安裝:虛擬主機(jī),gd庫(kù)擴(kuò)展,配置數(shù)據(jù)庫(kù),配置后臺(tái)管理員,安裝測(cè)試數(shù)據(jù),訪問后臺(tái) 購(gòu)物系統(tǒng):仿造ecshop制作一個(gè)小型的商品管理與購(gòu)物系統(tǒng) 功能:后臺(tái)用戶登錄(表單,session,cookie,驗(yàn)證碼),商品分類管理(無限極分類),商品管理(文件處理,縮略圖,水印處理,分頁,商品批量管理,所見即所得編輯器使用),時(shí)間允許(前臺(tái)商品瀏覽,購(gòu)物車動(dòng)作,用戶管理等) 設(shè)計(jì)項(xiàng)目:從項(xiàng)目管理者角度設(shè)計(jì)項(xiàng)目(項(xiàng)目架構(gòu)(框架,源碼,開發(fā)模式),代碼結(jié)構(gòu)(項(xiàng)目目錄劃分,功能劃分) 當(dāng)前流行開發(fā)模式:二次開發(fā),框架開發(fā) 數(shù)據(jù)架構(gòu):數(shù)據(jù)大小,更新頻率;兩大數(shù)據(jù)庫(kù)陣營(yíng)(SQL,NOSQL),初級(jí)架構(gòu)(表,表功能,表結(jié)構(gòu),表內(nèi)數(shù)據(jù)關(guān)系) 前臺(tái)和后臺(tái):前臺(tái)(用戶看,顯示數(shù)據(jù)),后臺(tái)(管理員看,管理數(shù)據(jù)),前后臺(tái)按功能劃分,美工和程序員按工作內(nèi)容劃分 項(xiàng)目目錄結(jié)構(gòu),代碼分部:項(xiàng)目分前臺(tái)后臺(tái),admin為后臺(tái)目錄;前后臺(tái)公共部分前臺(tái)includes下,后臺(tái)公共文件admin/includes,前后臺(tái)都有默認(rèn)訪問入口index.php 項(xiàng)目代碼設(shè)計(jì):數(shù)據(jù)是核心,代碼是訪問和管理數(shù)據(jù);數(shù)據(jù)存放在mysql里,PHP通過db.class.php訪問數(shù)據(jù)庫(kù)(includes下);邏輯與顯示分開;公共功能用類封裝(文件上傳,圖片處理,分頁) 后臺(tái)用戶登錄功能設(shè)計(jì):登錄表單(登錄,驗(yàn)證碼,退出,找回密碼,記住密碼),admin/templates/login.php,代碼由簡(jiǎn)單到復(fù)雜;一類事務(wù)請(qǐng)求一個(gè)PHP文件(登錄:admin/privilege.php) 后臺(tái)項(xiàng)目初始化:運(yùn)行環(huán)境(錯(cuò)誤級(jí)別,錯(cuò)誤顯示),基本目錄常量,配置文件系統(tǒng),公共代碼(自動(dòng)加載函數(shù),跳轉(zhuǎn)等),admin/includes/init.php Admin/includes/init.php:編碼設(shè)置(header),目錄常量(__DIR__,反斜杠處理,ROOT_DIR,ADMIN_DIR,INCLUDE_DIR,ADMIN_INCLUDE_DIR,ADMIN_TEMPLATE_DIR),5.3低版本目錄常量(__FILE__) 配置文件系統(tǒng):/config/config.php,數(shù)據(jù)庫(kù)連接信息,二維數(shù)組(便于區(qū)分) 加載配置文件:admin/includes/init.php,配置文件目錄常量,配置文件全局化($GLOBALS[‘config’]) 運(yùn)行環(huán)境設(shè)置:ini_set()(error_reporting,display_errors),錯(cuò)誤級(jí)別關(guān)系 登錄界面:從ecshop拿,js文件,image文件,css文件 登錄功能:privilege.php實(shí)現(xiàn),引入初始化文件,引入login.php文件,action(區(qū)分動(dòng)作),if分支判斷動(dòng)作 用戶登錄表單設(shè)計(jì):請(qǐng)求privilege.php,設(shè)計(jì)隱藏域act,$_REQUEST(GPC,request_order,variables_order) 驗(yàn)證用戶信息:設(shè)計(jì)管理員表(庫(kù),表,字段(id,用戶名,密碼,注冊(cè)時(shí)間,上次登錄時(shí)間和IP)),插入一條數(shù)據(jù),接收用戶提交數(shù)據(jù)進(jìn)行驗(yàn)證,數(shù)據(jù)庫(kù)操作(使用DB類,每張表一個(gè)類(/includes/adminTable.class.php)) 表類設(shè)計(jì):繼承db類,屬性(table_name,fields) 驗(yàn)證調(diào)用表類:自動(dòng)加載(/includes/function.php),初始化文件引入公共函數(shù)庫(kù),實(shí)例化表對(duì)象(傳入數(shù)據(jù)庫(kù)連接信息,連接數(shù)據(jù)庫(kù)),修改實(shí)例化方式(db類中自動(dòng)調(diào)用配置文件),使用用戶名和密碼驗(yàn)證用戶(正確得到用戶信息,錯(cuò)誤返回FALSE),修改用戶密碼(md5加密) 工作原理分析:用戶請(qǐng)求到得到驗(yàn)證結(jié)果 驗(yàn)證結(jié)果處理:界面跳轉(zhuǎn)(PHP中header,js中document.location.href,HTML中refresh),創(chuàng)建跳轉(zhuǎn)模板/admin/templates/redirect.php,跳轉(zhuǎn)函數(shù)admin_redirect在/includes/function.php,privilege中調(diào)用跳轉(zhuǎn)函數(shù)
驗(yàn)證用戶是否登錄:定義變量判斷,get傳參,會(huì)話數(shù)據(jù) 開啟會(huì)話機(jī)制:默認(rèn)關(guān)閉(php.ini的session.auto_start),session_start開啟,$_SESSION(訪問會(huì)話數(shù)據(jù)),session實(shí)現(xiàn)用戶登錄判斷 Session原理:session_start()開啟session并讀取session文件內(nèi)容到$_SESSION,腳本結(jié)束將$_SESSION內(nèi)容寫到session文件,然后釋放$_SESSION變量 會(huì)話周期:瀏覽器關(guān)閉session失效,瀏覽器與服務(wù)器會(huì)話流程 Cookie會(huì)話技術(shù):服務(wù)器在瀏覽器保存數(shù)據(jù),cookie原理,session與cookie的區(qū)別 Cookie使用:設(shè)置cookie,獲得cookie($_COOKIE和$_REQUEST),修改$_COOKIE(再次訪問無效),cookie變量有效期,session失效原理,清除cookie(setcookie),cookie目錄區(qū)分,cookie跨域,cookie變相保存數(shù)組 Session文件:存儲(chǔ)(php.ini中session.save_path) Cookie文件:瀏覽器指定的存儲(chǔ)目錄,IE和FF區(qū)別,F(xiàn)F查看cookie文件 Session登錄判定:用戶登錄時(shí)session記錄用戶信息,index.php中判定session信息,初始化文件開啟session 模擬session實(shí)現(xiàn)跨腳本 框架布局后臺(tái):使用ecshop后臺(tái)布局,index.php Index.php實(shí)現(xiàn):與privilege.php處理方式一致,使用ecshop的模板 退出登錄:清楚session,跳轉(zhuǎn)到privilege.php登陸頁,top.php(target屬性) 用戶信息顯示:$_SESSION,用戶上次登錄時(shí)間(登錄后修改上次登錄時(shí)間) Session深入:$_SESSION只能是關(guān)聯(lián)數(shù)組,session可以保存對(duì)象,session過期受cookie影響,session文件銷毀(session_destroy,$_SESSION,setcookie),session分層(session.save_path,手動(dòng)建立文件夾) 禁用cookie后session使用(其他方式讓瀏覽器帶sessionID),a標(biāo)簽自動(dòng)攜帶sessionID(session.use_trans_id,session.use_only_cookie),PHP腳本傳遞(手動(dòng)添加,session_id(),session_name())
驗(yàn)證碼:驗(yàn)證碼意義(防惡意請(qǐng)求),原理(Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自動(dòng)區(qū)分計(jì)算機(jī)和人類的圖靈測(cè)試),將驗(yàn)證碼內(nèi)容放到圖片上),驗(yàn)證碼流程(生成,保存到session中,添加到圖片上,用戶輸入,驗(yàn)證),對(duì)比ecshop驗(yàn)證碼 GD庫(kù):圖像處理擴(kuò)展,GD處理圖片流程(創(chuàng)建圖片資源(已有或者新建),操作圖片(裁剪圖片,修改圖片,填充圖片,縮略圖,寫驗(yàn)證碼),保存或者輸出,釋放資源) 制作驗(yàn)證碼:獲得驗(yàn)證碼內(nèi)容,驗(yàn)證碼寫到session,驗(yàn)證碼寫到圖片,驗(yàn)證碼圖片顯示到表單 封裝驗(yàn)證碼類:復(fù)雜化驗(yàn)證碼方法(背景顏色隨機(jī),文字顏色隨機(jī),添加像素點(diǎn),添加干擾線) 項(xiàng)目應(yīng)用驗(yàn)證碼:請(qǐng)求動(dòng)作獲得驗(yàn)證碼圖片,驗(yàn)證用戶登錄時(shí)使用驗(yàn)證碼,新增驗(yàn)證驗(yàn)證碼方法(驗(yàn)證碼類內(nèi)),點(diǎn)擊驗(yàn)證碼圖片更換驗(yàn)證碼(js) 保存用戶登錄信息:cookie存儲(chǔ)記錄標(biāo)識(shí)(用戶ID),判斷用戶是否登錄(判斷session,判斷cookie),增加通過用戶ID獲取用戶信息方法,危險(xiǎn)
制作商品分類:數(shù)據(jù)表設(shè)計(jì)(主鍵,分類名,排序,父ID),插入數(shù)據(jù),category.php,商品分類列表界面,修改連接(menu),商品分類類,調(diào)用商品分類的方法,模板顯示分類數(shù)據(jù) 無限極分類:原理(找頂級(jí)分類,找子分類),非遞歸實(shí)現(xiàn)(指定父分類),遞歸(遞歸點(diǎn),遞歸出口),遞歸原理,縮進(jìn)(層級(jí)標(biāo)識(shí)),根據(jù)排序字段排序 構(gòu)造表全名:表名,db類表前綴,db類中增加表名構(gòu)造,表類中使用 給字段屬性賦值:添加獲得表結(jié)構(gòu)方法(獲得所有鍵,主鍵) 分類文件訪問驗(yàn)證:將登錄驗(yàn)證放到init.php,引入init.php文件驗(yàn)證,分離需要驗(yàn)證的請(qǐng)求(登錄相關(guān)不需要驗(yàn)證,$_SERVER[‘SCRIPT_NAME’],basename(),dir_name()) 分類操作:增加分類(新增表單,提交表單,處理表單數(shù)據(jù),分類入庫(kù)),分類指定上級(jí)分類,數(shù)組接收數(shù)據(jù)提交數(shù)據(jù),刪除分類(提示用戶(js),判斷分類是否可被刪除(是否末級(jí)),刪除分類)
編輯分類功能:流程(用戶點(diǎn)擊菜單進(jìn)入編輯,顯示分類數(shù)據(jù),用戶編輯操作,提交表單,處理編輯數(shù)據(jù)) 重封裝通過id獲取數(shù)據(jù)方法(重復(fù),放到db類),表單添加隱藏分類ID 商品分類完成:沒有商品數(shù)量,分類列表緩存(判斷緩存,更新緩存),無限極分類縮放 商品管理:數(shù)據(jù)表設(shè)計(jì)(仿照ecshop),數(shù)據(jù)插入,goods.php,完善商品列表(菜單連接,動(dòng)作處理,數(shù)據(jù)對(duì)象操作,列表模板,圖標(biāo)) 分頁:流程(確定數(shù)據(jù)顯示數(shù)量,確定頁數(shù),limit),分頁跳轉(zhuǎn)(首頁,上一頁,下一頁,末頁,數(shù)字頁,下拉頁) 項(xiàng)目分頁:修改配置文件(每頁顯示數(shù)據(jù)條數(shù)),修改列表功能(頁碼,每頁顯示數(shù)目參數(shù)),修改列表功能(獲得總記錄數(shù),數(shù)據(jù),二維數(shù)組),修改調(diào)用列表功能 分頁類:?jiǎn)为?dú)分頁不含數(shù)據(jù)處理(參數(shù)),HTML(標(biāo)簽,ID) 刪除商品:處理方法(回收站),增加刪除標(biāo)志(修改數(shù)據(jù)表),刪除流程(確認(rèn)(js),修改刪除標(biāo)志,修改列表功能,更新列表) 回收站操作:分頁顯示(配置文件,分頁類使用),恢復(fù)
新增商品:流程(連接,動(dòng)作,表方法,模板,選項(xiàng)卡功能) 插入功能重復(fù):新增插入方法(db類,驗(yàn)證數(shù)組信息,數(shù)組拼湊SQL,返回插入結(jié)果),調(diào)用插入功能 文件上傳:post,enctype(mutipart/form-data),$_FILES(專門接收文件數(shù)據(jù),字段說明,錯(cuò)誤說明(0沒有問題,1超出大小,2超出大小,3部分上傳,4沒有上傳,6沒有臨時(shí)文件夾,7文件寫入臨時(shí)文件夾出錯(cuò))),文件上傳原理(PHP服務(wù)端),移動(dòng)臨時(shí)文件(move_uploaded_file),文件驗(yàn)證(大小,類型,重命名,strrchar) 圖片上傳類:配置文件(上傳大小,上傳類型(字符串),上傳路徑),上傳命名規(guī)則(不重復(fù),保持原來后綴,易于識(shí)別(前綴)),文件上傳流程(錯(cuò)誤判斷,文件大小判斷,文件類型判斷,重命名,是否上傳成功,返回新文件名),文件處理失敗商品仍上傳(錯(cuò)誤提示) 商品插入流程回顧:收集表單數(shù)據(jù),設(shè)置初始值(點(diǎn)擊量),上傳文件判斷,制作縮略圖判斷,調(diào)用模型,插入數(shù)據(jù)
制作縮略圖:流程(獲得圖片資源(原始圖,目標(biāo)圖),處理(采用,復(fù)制),保存或者輸出,釋放資源),采樣(矩形區(qū)域確定) 封裝縮略圖制作:數(shù)據(jù)獲?。ㄔ瓐D大小,目標(biāo)圖大小,函數(shù)類型使用),縮略圖比例(寬高比),縮略圖制作流程細(xì)化(計(jì)算原圖寬高和縮略圖最大尺寸,確定縮略圖大小,創(chuàng)建圖片資源(原圖,縮略圖),采樣復(fù)制,保存輸出,銷毀資源) 縮略圖補(bǔ)白:縮略圖大小固定(不夠的地方補(bǔ)白,制作縮略圖背景)優(yōu)劣(方便設(shè)計(jì)顯示,與原圖不一致) 水印制作:圖片上的標(biāo)識(shí),兩種(文字,圖片),基本流程(原圖,水印圖,合并) 項(xiàng)目水?。号渲梦募鞒淘敿?xì)(獲得原圖資源,判斷水印圖資源,獲得水印圖資源,獲得圖片寬高,判斷水印位置,計(jì)算水印位置,判斷合并結(jié)果,保存,返回水印圖名稱),修改上傳圖片的名字為水印圖 MVC:軟件設(shè)計(jì)典范(模型Model,視圖View,控制器Controller),輸入處理和輸出的分離,MVC框架(功能劃分M,V,C),PHP代碼發(fā)展(混編,顯示和邏輯分離,數(shù)據(jù)邏輯與業(yè)務(wù)邏輯分離),action(C處理一類事務(wù),C包含多個(gè)Action),區(qū)分(模塊module,模型model,模板template) 自動(dòng)安全更新方法:拼湊sql語句,更新,流程(清理無效字段,拼湊sql語句(更新部分,條件),強(qiáng)制設(shè)定條件(判斷條件,自動(dòng)分析條件),返回執(zhí)行結(jié)果) 自動(dòng)刪除:根據(jù)ID進(jìn)行刪除(單個(gè)=,數(shù)組in),流程(參數(shù)添加引號(hào),拼湊刪除條件,返回刪除結(jié)果)
Session入庫(kù):session入內(nèi)存,session入庫(kù)(修改session存儲(chǔ)機(jī)制),session入庫(kù)原理,修改session系統(tǒng)(session讀寫功能),修改流程(準(zhǔn)備讀寫方法,告知session系統(tǒng)(session_set_save_handler()) Session表設(shè)計(jì):字段(sessionID,數(shù)據(jù),過期時(shí)間) Session方法完善:讀(根據(jù)sessionID數(shù)據(jù)庫(kù)查詢),寫(根據(jù)sessionID,session數(shù)據(jù)寫入或者更新數(shù)據(jù)),開啟(提取公共連接數(shù)據(jù)庫(kù)代碼),數(shù)據(jù)庫(kù)連接資源作用域,銷毀(根據(jù)sessionID刪除數(shù)據(jù)),回收(根據(jù)配置清理過期session,expire字段),session配置(gc_maxlifetime,gc_probobility,gc_divisor) 封裝session類:構(gòu)造函數(shù)(設(shè)置session處理器,數(shù)組傳遞參數(shù),開啟session,開啟父類構(gòu)造函數(shù)),完善各個(gè)方法 Session方法執(zhí)行順序(讀在回收前),修改讀方法(不讀取過期數(shù)據(jù),讀判斷expire),session銷毀(停止執(zhí)行寫方法)
在線編輯器:ckeditor,簡(jiǎn)介,引入(js引入,調(diào)用),保存編輯數(shù)據(jù),配置ckeditor(高度,工具欄),ckfinder,配置文件上傳(開啟上傳,上傳目錄)
|
|