首頁 >php框架 >ThinkPHP >tp 框架開發整理總結

tp 框架開發整理總結

步履不停
步履不停原創
2019-06-21 14:37:563876瀏覽

tp 框架開發整理總結

tp3.2文檔 http://www.php.cn/xiazai/shouce/31

大寫字母的用法

  • A函數用於實例化控制器
  • 格式:[資源://][模組/]控制器A($name,$layer='',$level ='')
    @param string $name 资源地址
    @param string $layer 控制层名称
    @param integer $level 控制器层次
    @return Controller|false

B執行某個行為B($name,$tag='',&$params=NULL)

@param string $name 行为名称
@param string $tag 标签名称(行为类无需传入)
@param Mixed $params传入的参数 @return void

這是隨著行為應運而生的新生函數,可以執行某個行為,例如B('app_begin');
就是在專案開始之前,執行這個行為定義的所有函數,支援2個參數,第二個參數支援需要接受一個陣列

例如

B('app_begin',array("name"=>"tdweb","time"=>time()));

#C 讀取及設定組態參數C($name= null,$value=null,$default=null)

@paramstring|array $name 配置变量
@param mixed $value 配置值
@param mixed $default 默认值
@return mixed

取得值:  

  • 取得所有設定:C(); 不傳遞任何參數,傳回一個包含所有設定的陣列。
  • 取得指定配置:C('URL_MODEL') 這樣就能得到URL_MODEL的設定資訊
  • 取得指定二維陣列配置:C("array.name"),這樣就傳回數組array下的key為name所對應的值

設定值:

  • 為二維陣列賦值C("array.name", "value"),原理同上(取得array.name的值),後邊的value是值
  • 批次賦值:
    $test=array("URL_MODEL"=>1,"THIN_MODEL"=>true");
    C($test);  这样直接将数组里的值赋值了

    判斷是否賦值:

    C("?URL_MODEL")这样前边加个"?",如果已经赋值,则返回true

    需要說明的是,這裡雖然更改了配置的值,但是僅僅是這個頁面做了更改,到下個頁面就不起作用了,
    如果想改就永久更改,那麼需要配合F函數,將設定檔寫入config. PHP才行。


D函數用於實例化模型類別格式[資源://][模組/]模型D($name='',$ layer='')

@param string $name 资源地址
@param string $layer 模型层名称
@return Model

D函數有2個優點:

  • 一是如果之前實例化過這個Model,那麼就不再實例化了,省資源;
  • 二是方便除錯,如果不存在這個Model,會拋出TP異常,非常人性化。
    如果訪問本項目的Model直接D("Model名稱");就可以了,如果打算跨項目訪問,就使用D("Model名稱","項目名稱");

E拋出例外處理E($msg, $code=0)

@param string $msg异常消息
@param integer $code 异常代码默认为0
@return void

F快速檔案資料讀取與儲存針對簡單型別資料字串、陣列F($name, $value='',$path=DATA_PATH)

@param string $name 缓存名称
@param mixed $value 缓存值
@param string $path 缓存路径
@return mixed
  • 快速儲存資料:F("mydata","這裡是要儲存的資料"),這樣就在專案Data目錄下儲存了一個名叫mydata.php的文件,裡邊的內容就是該函數的第二個參數。
  • 指定保存時間 :F("mydata","這裡是要保存的資料","60"),這樣,如果下次再訪問,間隔大於60秒則刪除次快取檔案。
  • 指定儲存目錄:F("mydata","這裡是要儲存的資料","60",DATA_PATH) ,這樣就指定儲存在data目錄下
  • 立即刪除快取: F("mydata",null),第二個參數傳遞一個null值,這樣就刪除了mydate這個快取
  • 讀取快取資料:F("mydata"),這樣就讀取這個快取了

G記錄和統計時間(微秒)和記憶體使用情況

G($start,$end='',$dec=4)

使用方法:

G('begin'); // 记录开始标记位 // ... 区间运行代码
G('end'); // 记录结束标签位
echo G('begin','end',6); //统计区间运行时间精确到小数后6位
echo G('begin','end','m'); // 统计区间内存使用情况 如果end标记位没有定义,则会自动以当前作为标记位

其中統計記憶體使用需要MEMORY_LIMIT_ON 常數為true才有效

@param string $start 开始标签
@param string $end 结束标签
@paraminteger|string $dec小数位或者m
@return mixed

#I取得輸入參數支援過濾和預設值

I($name,$default='',$filter=null)

使用方法:

I('id',0); //获取id参数自动判断get或者post
I('post.name','','htmlspecialchar s'); //获取$_POST['name']
I('get.'); //获取$_GET

#L()取得與設定語言定義(不區分大小寫)

L($name=null,$value=null)
@paramstring|array $name 语言变量
@param mixed $value 语言值或者变量
@return mixed

語言定義函數,L("intro")取得定義成intro的語言,l("intro" ,"介紹")為intro賦值


M函式用來實例化一個沒有模型檔的Model

M($name='',$tablePrefix='',$connection='')
@param string $name Model名称支持指定基础模型例如MongoModel:User
@param string $tablePrefix表前缀
@param mixed $connection  数据库连接信息
@return Model

N設定與取得統計資料

N($key,$step=0,$save=false)

使用方法:

N('db',1); // 记录数据库操作次数
N('read',1); // 记录读取次数
echo N('db'); // 获取当前页面数据库的所有操作次数
echo N('read'); // 获取当前页面读取次数
@param string $key 标识位置
@param integer $step 步进值
@return mixed

#R遠端呼叫控制器的操作方法URL 參數格式[資源://] [模組/]控制器/操作

R($url,$vars=array(),$layer='')
@param string $url调用地址
@paramstring|array $vars调用参数支持字符串和数组
@param string $layer 要调用的控制层名称
@return mixed

T取得模版檔案格式資源://模組@ 主題/控制器/操作

T($template='',$layer='')
@param string $name 模版资源地址
@param string $layer 视图层(目录)名称
@return string

#U()URL組裝支援不同URL模式

U($url='',$vars='',$suffix=true,$domain=false)
@param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...'
@paramstring|array $vars传入的参数,支持数组和字符串
@param string $suffix 伪静态后缀,默认为true表示获取配置值
@paramboolean $domain 是否显示域名
@return string

#使用方法:

  • 取得当前模块的Action地址 :U("/nowMethod");
  • 取得当前模块的Action地址,并传递参数:U("/nowMethod?params=test");
  • (如果不习惯上边那种方式,可以使用U("/nowMethod",array("params"=>"test");这样的数组方式传递参数,效果是一样的)
  • 访问其他模块的方法:U("Other/otherMethod"),这样就是访问Other模块下的otherMethod方法

跨项目访问:

U("appname://Other/otherMethod");

使用路由访问:

U("appName://routeName@moduleName/actionName?params");

另外,如果想直接跳转,那么就在第二个参数写1

U("/nowMethod",1)

这样就直接调转到指定URL了


W渲染输出Widget

W($name,$data=array())
@param string $name Widget名称
@param array $data 传入的参数
@return void

S缓存管理

S($name,$value='',$options=null)
@param mixed $name 缓存名称,如果为数组表示进行缓存设置
@param mixed $value 缓存值
@param mixed $options 缓存参数
@return mixed
  • 全局缓存读写函数,和C类似,不过是直接写成文件,写在Temp目录下,不过在缓存有一点需要注意,
  • 如果缓存名称是aaa,那么缓存生成的文件名称就是md5("aaa")的值。

技术

防止xss攻击

简单的防止

当网站不涉及复杂的用户交互时,可以对用户所有提交的文本进行htmlspecialchars函数处理。

  • 版本为:3.2
  • 步骤:
    • 一:在项目配置文件中添加配置: 'DEFAULT_FILTER' => 'htmlspecialchars', //默认过滤函数
    • 二: 使用框架带的I方法获取来自用户提交的数据;
  • 例子

    • M('Member')->save(array('content'=>I('post.content')));

对COOKIE进行IP绑定

  • cookie的信息一但被别人通过XSS攻击获取后也一样等同于把自己的帐号密码给了别人。
  • 对cookie进行IP绑定,(当然也可以获取用户客户端更多的其它信息进行同时绑定)可以根据用户的IP来判断这个cookie是不是来原始授权用户。

示例

  • 用户设置了自动登录时保存自动登录信息:
    $auto=I('post.auto');//用户设置了自动登录
    if(!empty($auto)){
    cookie('auto',encrypt(serialize($data)));//将登录信息保存到cookie,其中$data里含有加密后的帐号,密码,和用户的IP,这里的cookie已在全局中设置过期日期为一周
    }
  • 用户关闭浏览器再次访问网站时,进行自动登录
    if (!is_login()) {//是否未登录状态?
    $auth=cookie('auto');
        if(!empty($auth)){//是否未有自动登录cookie?
            $data=unserialize(decrypt($auth));
                if(!empty($data) && !empty($data['username']) && !empty($data['password']) && !empty($data['last_login_ip'])){
                    $user=M('Member')->where(array('username'=>$data['username'],'password'=>$data['password']))->find();
                        if(!empty($user['id'])&&($user['last_login_ip']==get_client_ip())){//cookie帐号密码是否有效?//IP来源是否相同?
                            login_session($user['id'], $user['username'], $data['last_login_ip']);//用户自动登录成功
                        }
                }
        }
    }
  • 优点:大多数场景下可使被XSS攻击盗取的cookie失效。
  • 缺点:由于IP存在多台电脑共用的可能,对绑定做不到十分精细

为COOKIE添加httponly配置

可以保证cookie只在http请求中被传输,而不被页面中的脚本获取,现市面上绝大多数浏览器已经支持。

HTML5的新特性:

<iframe src="http://alibaba.com" sandbox>

为iframe的增加的sandbox属性,可以防止不信任的Web页面执行某些操作.相信这个方法以后会被广泛使用。

富文本过滤

5.0文档 

http://www.php.cn/xiazai/shouce/32

以上是tp 框架開發整理總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn