顯示具有 Phalcon 標籤的文章。 顯示所有文章
顯示具有 Phalcon 標籤的文章。 顯示所有文章

星期四, 10月 19, 2017

升級PHP7及Phalcon3已知問題


PHP 7

  1. COUNT field incorrect or syntax error
    placeholders must have unique names even if they have the same value
    不確認是PDO還是Phalcon,但知道placeholder不可重覆
    
    $sql = "SELECT * FROM m
    WHERE m.prod_market_sdate <= :nowDate         
    AND m.prod_market_edate >= :nowDate
    $statement = $db->prepare($sql);
    $result = $db->executePrepared(
    $statement,
    array(
    'nowDate' => date("Y-m-d H:i:s", time())
    ),
    array()
    );
    Reference: https://stackoverflow.com/questions/34089614/count-field-incorrect-or-syntax-error
  2. Static property
    
    - $this->$fileErr => $self::fileErr


Phalcon 3

  1. 不可以有重覆的andWhere
    雖然不應該有這問題...
    不過有時候條件太多,看走眼...
    
    $builder->andWhere("name = 'Peter'");
    $builder->andWhere("name = 'Peter'"); //重覆會有錯
    

星期五, 10月 23, 2015

擴充Phalcon的filter過濾 xss 攻擊


其實直接用htmlentities or htmlspecialchars就可以了
不過因為一些問題,所以得加上一些參數
見這篇 到底要用htmlenties 還是htmlspecialchars

如果各自使用htmlentities 又容易漏參數
於是想寫個helper類的來幫助

後來想想,幹脆直接擴充phalcon的filter,再透過di統一取得
如此一來就能規範大家用相同的設定也挺不錯的

service.php的設定
$di->setShared("filter", function(
    $filter = new \Phalcon\Filter();
    // Using an anonymous function
    $filter->add('xss', function ($value) {
        $flags = ENT_QUOTES;
        $encoding = "UTF-8";
        $doubleEncode = false;
        return htmlspecialchars($value, $flags, $encoding, $doubleEncode);
    });
    return $filter
));

使用方法
$filter = $di->get("filter");          //取得filter
 
//統一透過filter,寫法能夠一致
$filter->sanitize($value, "xss");      //自寫的,用specialchars
$filter->sanitize($value, "string");   //用htmlentities,不建議用
$filter->sanitize($value, "int");
$filter->sanitize($value, "email");

星期三, 10月 09, 2013

IndexController handler class cannot be loaded

Phalcon裡,只要為controller加上namespace,就會發生
"IndexController handler class cannot be loaded"

明明loader裡也有註冊namespace了,對應的路徑也沒錯...
找半天,實在是找不到問題點

幸好咱們勝揚哥有遇過,馬上就點破了~
「dispatcher那沒import,怎麼找的到這namespace下controller」
見:phalcon的mvc - single-namespace 以下截錄
//Registering a dispatcher
$di->set('dispatcher', function(){
 $dispatcher = new \Phalcon\Mvc\Dispatcher();
 $dispatcher->setDefaultNamespace('Single\Controllers\\');
return $dispatcher;
}); 

收工~

星期四, 10月 03, 2013

實作Phalcon Mssql Pdo Adapter

source: https://github.com/fishjerky/phalcon-mssql

以下是碎碎念
好不容易說服公司採用Phalcon開發專案
但大家主要的concern還是在framework太新~
如果有缺component 或有bug得等官方提供或修復~
而且Phalcon是用C寫的,要改也不容易

我是覺得真有缺的component就用php完成即可~
而且Phalcon team修bug速度還頂快的~
上次看一個issue提出,10天內就有人完成了~
便回覆大不了自己修掉,要大家放心使用~

還是發生了 ... 缺重要的component
就在專案kickoff的前二個星期發現可怕的事...
Phalcon沒有提供SQL Server adapter!!!

本想說那就用純php寫就好~
但這樣Model不能用,就等於整個ORM沒辦法用~
眼看專案就要開始了~ 只好自己下海做了~
上班還有其他事做,只能晚上自己熬夜拚~ 還有右上角這小子會來搶滑鼠鍵盤 ↗
拚了兩個星期,終於做出來了~ (泣)

原本想看Phalcon的code 應該能依樣畫葫蘆做出mssql的PDO adapter~
雖然Phalcon的C Code寫的滿Clean的
不過還真如阿土伯說的~ 除了貫C哥外,其他人說完hello後都不知要幹嘛~
幸好可利用Phalcon 有定義出abstract adapter,可用php實作~

過程中有遇到些問題,在irc上詢問phalcon team~
發現已經在開發sql server的pdo adapter, 但是使用sqlsrv( windows版 )
而且看起來未完成,還是得靠自己開發~

但也發現開發中的phalcon 2.0已全面使用zephir實作
這zephir比c語言親切多了,滿像PHP的
從中"參考"了許多寫法,省了不少實作的時間

Phalcon的unit test寫的滿完整的
這樣寫出來的code也比較放心

再來有時間會利用zephir實作mssql pdo adapter~
這樣效能會更好些~

星期六, 8月 17, 2013

Phalcon Webtools只能在local machine使用

因安全問題只能在localhost上用 webtools...
用其他ip連webtools就會出現以下訊息
Phalcon\Exception: WebTools can only be used on the local machine

習慣裝在linux上開發...
因此都用vm模擬,再用pietty連進去開發
所以一定不會是localhost~ 杯具...

解決方法
  • 改config
    開啟[project]/public/webtools.config.php
    define('PTOOLSPATH', '/home/phalcon/phalcon-devtools');
    /* you can set ADMINIP as IP 192.168.0.1 or SUBNET 192. or 10.0.2. or 86.84.124. */
    define('ADMINIP', '192.168.');  //改成自己的ip就可以了
    

  • 終極解決方法
    看了一下Webtool的code~ 就偷偷改一下,跳開檢查
    記得上production要改回去捏...
    不然開了個大後門....

    file: phalcon-devtools/scripts/Phalcon/Web/Tools/controllers/ControllerBase.php
    截錄檢查程式碼
    就在直接else的那段加上return false囉~ = =+

Install Phalcon Developer Tools

也滿簡單的就照github上的README安裝步驟走~
不過在手動安裝需要微調一下,以便多人共用
以下針對手動安裝調整為自己的寫法
  1. Installation via PEAR
  2. Installation via Composer
  3. 手動安裝
    cd /opt #以便所有人可以共用
    git clone https://github.com/phalcon/phalcon-devtools.git
    ln -s /opt/phalcon-devtools/phalcon.php /usr/bin/phalcon
    chmod ugo+x /usr/bin/phalcon

這樣應該就可以用了,試一下
# phalcon //應該就有反應了
  1. Basic
    指令查詢
    # phalcon
  2. Project
    建立Project  #phalcon project [project]
    啟動webtools
    #phalcon webtools enable  //在phalcon project的根目錄裡執行指令
    指令是這麼寫,但我試會發生
    Error: Document root cannot be located
    指定實際路徑就可以了 --directory=[phalcon project path]
    ex. store為 phalcon project
    # phalcon webtools enable --directory=/var/www/html/store
    再用browser開啟 http://[ip]/store/webtools.php
    就可以看到webtools的畫面的
  3. Controller
    建立 Controller
    #phalcon controller [controller name]
  4. Model
    產生model
    #phalcon model [model name]
    產生CRUD
    #phaclon scanfold --table-name [table]
  5. View
    沒提供哩....
    透過CRUD直接產生action及對應的model及view吧

星期五, 8月 16, 2013

Phalcon.so 無法載入

不知為何大於v1.2.1的Phalcon一直發生以下錯誤
Fatal error: Class 'Phalcon\Config' not found in /var/www/html/store/app/config/config.php on line 3
查到是因為phalcon.so沒載入
但compile都成功,而v1.2.0以下也都可以成功載入Phalcon.so

後來發現也有人遇到相同的問題 - Phalcon installation on CentOS
就回覆在 /etc/php.d/裡新增個zzzzz.ini,內容如下
extension=phalcon.so
restart apache就可以了...

太神奇了... 真的這樣就成功了....
又可以fly with Phalcon了...

仔細讀一下
原來v1.2.1後 改用native JSON
因此會出現
undefined symbol: php_json_decode_ex in Unknown on line 0
難怪只有v1.2.0以下才會正常...

而將phalcon.so放到zzz.ini的原因是...
要在json.ini後,讀phalcon.ini,才不會衝到
可以試著吧zzz.ini改成aaa.ini,php_json_decode_ex的問題會再發生


雖然安裝phalcon真的是滿簡單的~
不過還是遇到小問題,還是記錄一下好了

==env==
OS: CentOS 6
PHP Version: 5.4
  1. download
    # git clone git://github.com/phalcon/cphalcon.git
    或者是用載的
    # wget https://github.com/phalcon/cphalcon/archive/master.zip
    # unzip cphalcon-master.zip
  2. install
    # cd cphalcon-master/build
    # sudo ./install 
  3. add extension
    # vi /etc/php.d/phalcon.ini #不要加在/etc/php.ini裡 !!!會有json錯誤
    extension=phalcon.so #加最後面
  4. Restart apache
    # service httpd restart
  5. 驗證
    # php –m | grep phalcon #有出現就表示完成