2014年1月26日 星期日

PHP - 日期的一些應用

將日期分割成年、月、日
list($syear, $smonth, $sday) = split('[/.-]', $date);

ps: 個人比較喜歡用正規示來做分割的原因是, 跟explode()比起來如果之後進來的日期格式會變動的話, 用split能減少出錯的機率. 說真的日期格式最常見的就是上面那三種.


得到某日期的Unix 時間戳
$time=mktime(0,0,0,$smonth,$sday,$syear);


得到某日期是星期幾
$week=date("w",strtotime($date));

PS:strtotime()是將日期的字串轉為Unix 時間戳.

2014年1月23日 星期四

yii framework - Cookie的操作方式

本來只想說打在 yii的實用小技巧 就好了
但是越使用越覺得Cookie這東西在開發上實在太常見, 不為此打篇說明好像不太夠
前言說夠了, 我們開始吧!

其實 官網 說很清楚了, 不過我還是把常用的列出來好了, 畢竟很多我們用不到.

寫入
$cookie=new CHttpCookie('變數名稱',變數數值);
Yii::app()->request->cookies['變數名稱']=$cookie;


讀取
$test=Yii::app()->request->getCookies(); //抓全部Cookie
echo $test['變數名稱'];

$cookieData=Yii::app()->request->cookies['變數名稱']->value; //抓指定的Cookie
echo $cookieData;


檢查某Cookie是否有值
isset(Yii::app()->request->cookies['變數名稱']);


將Cookie值清空
Yii::app()->request->cookies->clear(); //刪除全部Cookie

unset(Yii::app()->request->cookies['變數名稱']); //刪除指定的Cookie


設定過期的時間

$cookie=new CHttpCookie('變數名稱',變數數值);
$cookie->expire time()+60*60*24*30; //30天後過期


設定透過HTTPS傳輸Cookie (可在framework\web\js\source\jquery.cookie.js看到說明, 參考這篇)
'session' => array(
'cookieParams' => array(
'secure' => true,
),
),

ps: 設定的位置在/protected/config/main.php


設定httpOnly 防止 XSS攻擊 (參考這篇這篇2)
'session' => array(
'cookieParams' => array(
'httpOnly' => true,
),
),

ps: 設定的位置同上

官方說明如下:
cookie是否只允許通過HTTP協議訪問。通過設置這個屬性為true,cookie將無法訪問腳本語言, 例如JavaScript,它可以有效減少由於通過身份被盜竊而導致的XSS攻擊。注意:此屬性僅適合PHP 5.2.0以及以上版本。

ps: 沒想到從IE6 SP1就有支援了...不過有多少人真的有注意到資安問題並開啟呢?

2014年1月15日 星期三

yii framework - 使用find、findByPk、findAll、findAllByPk的注意事項

查詢資料庫可以分為查(回傳) 一或是全部資料兩種, 可用的方式如下:


find() //查找指定條件的單個活動記錄。
findByAttributes() //查找具有指定屬性值的單個活動記錄。
findByPk() //查找指定主鍵的單一活動記錄。
findBySql() //查找指定SQL語句的單個活動記錄。


findAll() //查找滿足指定條件的所有活動記錄。
findAllByAttributes() //查找具有指定屬性值的所有活動記錄。
findAllByPk() //查找指定主鍵的所有活動記錄。
findAllBySql() //查找指定SQL語句的所有活動記錄。


我們來進一步看一下官方的code: