2012 php conf slide pixnet 如何使用 php

32
PIXNET如何使用PHP

Upload: ronnywangtw

Post on 07-May-2015

5.980 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: 2012 php conf slide   PIXNET 如何使用 php

PIXNET如何使用PHP

Page 2: 2012 php conf slide   PIXNET 如何使用 php

Ronny Wang 王向榮

● PHP 開發經驗 12 年● 現任 PIXNET 技術部副理● 負責 Pix Framework 開發

Twitter: ronnywanghttp://ronnywang.pixnet.net/bloghttp://github.com/ronnywang

Page 3: 2012 php conf slide   PIXNET 如何使用 php

● PIXNET Web 環境● git● Framework● log● proctitle● 開發流程

Page 4: 2012 php conf slide   PIXNET 如何使用 php

PIXNET 現在環境

● FreeBSD 8.3○ ports 管理 VirtualHost 設定

● Apache 2.2 (worker)● PHP 5.3 with fpm

Page 5: 2012 php conf slide   PIXNET 如何使用 php

PHP 5.3 用到功能

Page 6: 2012 php conf slide   PIXNET 如何使用 php

PHP 5.3 - anonymous function

$quote_func = function($str) { return "\"{$str}\"";};

$quoted_array = array_map( $quote_func, $array);

Page 7: 2012 php conf slide   PIXNET 如何使用 php

PHP 5.3 - get_called_class

class User extends Pix_Table { }class Article extends Pix_Table { }

// 以下寫法在 PHP 5.3 以前做不到$user = User::find('ronnywang');$articles = Article::search(array( 'author_id' => $user->id,));

Page 8: 2012 php conf slide   PIXNET 如何使用 php

PHP 5.4 升級中

Page 9: 2012 php conf slide   PIXNET 如何使用 php

PHP 5.4 - array 簡寫

● $list = array(1, 2, 3);==> $list = [1, 2, 3];

● $list = array();==> $list = [];

● $list = array('one' => 1, 'two' => 2);==> $list = ['one' => 1, 'two' => 2];

Page 10: 2012 php conf slide   PIXNET 如何使用 php

● $a = new Foo(); $a->bar();==> (new Foo())->bar();

PHP 5.4 - 直接呼叫新物件 method

Page 11: 2012 php conf slide   PIXNET 如何使用 php

PHP 5.4 - 直接用回傳值的 array

● $a = func(); $a[3];==> func()[3];

Page 12: 2012 php conf slide   PIXNET 如何使用 php

PHP 5.4 - development web server

● php -S 0.0.0.0:12345 index.php● 開http://localhost:12345

Page 13: 2012 php conf slide   PIXNET 如何使用 php

Git - gitolite

https://github.com/sitaramc/gitolite● 權限管理方便(clone 出 gitolite-admin 即可)● $GL_PACKAGE_HOOKS 管理 hook template

Page 14: 2012 php conf slide   PIXNET 如何使用 php

Git - php syntax check

● php -l (--syntax-check)● https://github.

com/phpbb/phpbb3/blob/develop-olympus/git-tools/hooks/pre-commit

Page 15: 2012 php conf slide   PIXNET 如何使用 php

Framework

● Zend Framework 1.5.3 (現 2.0.0)○ http://framework.zend.com/

● Pix Framework○ http://framework.pixnet.net/

Page 16: 2012 php conf slide   PIXNET 如何使用 php

Framework 好處

● 網站設定位置統一○ 測試環境好建立

● 容易在網頁產生開始結束增加事件○ 記錄產生時間○ 處理錯誤訊息

Page 17: 2012 php conf slide   PIXNET 如何使用 php

Framework - model

● PIXNET 的 ORM Pix_Table○ 有用 MySQL, PostgreSQL, SQLite, Cassandra

,用法一模一樣○ 測試時用 SQLite 的 :memory:○ 記錄時間較長的 query ,方便找出系統瓶頸

http://framework.pixnet.net/ 有 OSDC 的 Pix_Table slide

Page 18: 2012 php conf slide   PIXNET 如何使用 php

Pix Framework - Pix_Prompt

● https://github.com/pixnet/pixframework-heroku/blob/master/prompt.php

● > php prompt.php>> echo 1 + 34>> $user = User::find('ronnywang');>> echo count($user->articles)358>>

Page 19: 2012 php conf slide   PIXNET 如何使用 php

Framework - 搭配 pecl-proctitle

● http://pecl.php.net/package/proctitle● void setproctitle(string $title);● Ex:

setproctitle("Web: {$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}");

● 可搭配 ps, top 來看目前 PHP 正在處理哪些網址

Page 20: 2012 php conf slide   PIXNET 如何使用 php

Framework - pecl-proctitle + top84651 www 1 4 0 436M 99M sbwait 9 3:35 8.06% php-fpm: PixFront: nymtzh.pixnet.net/blog (php-fpm)31006 www 1 4 0 420M 90248K accept 12 2:47 7.76% php-fpm: PixFront: null (php-fpm)66715 www 1 4 0 420M 89584K accept 0 1:00 7.76% php-fpm: PixFront: null (php-fpm)30577 www 1 4 0 420M 91448K accept 7 2:43 7.47% php-fpm: PixFront: null (php-fpm)77276 www 1 50 0 426M 95000K CPU9 9 4:32 7.37% php-fpm: PixFront: seohyun2100.pixnet.net/blog/post/528913255391 www 1 4 0 420M 91004K accept 8 3:27 7.28% php-fpm: PixFront: null (php-fpm)92126 www 1 4 0 420M 89644K accept 3 1:07 6.98% php-fpm: PixFront: go3d.pixnet.net/blog/plugindata/albumsho

41475 www 1 50 0 429M 97312K select 12 0:19 6.98% php-fpm: PixFront: ice2006.pixnet.net/blog/post/21929859-12

Page 21: 2012 php conf slide   PIXNET 如何使用 php

PHP Log

● php.ini 設定 error_log 位置● 用 logrotate 只留三天內 log

Page 22: 2012 php conf slide   PIXNET 如何使用 php

PHP Log - IRC

● PIXNET 所有 web 主機的 PHP Error, Warning 都會噴到一個 IRC 上面

● 可參考http://github.com/ronnywang/heroku-ircbot/

Page 23: 2012 php conf slide   PIXNET 如何使用 php

開發/測試/上線

● 以網址區隔● 線上: http://ronnywang.pixnet.net/blog

開發: http://ronnywang.pixnet.net.srwang.test.pixnet/blog測試:http://ronnywang.pixnet.net.12345.staging.pixnet/blog

Page 24: 2012 php conf slide   PIXNET 如何使用 php

線上環境

● 用 rsync 將程式碼推上 web 機器● rsync over ssh 權限管理● 用 netgroup 管理目標主機

Page 25: 2012 php conf slide   PIXNET 如何使用 php

開發環境

● 把線上網址後面加上 .[開發者].test.pixnet● 利用 Apache VirtualDocumentRoot 依照不同

網址連到不同資料夾<VirtualHost *:80>

ServerName pixnet.net.admin.test.pixnetServerAlias *.pixnet.net.*.test.pixnetVirtualDocumentRoot /home/user/%-3/pixfront/webroot

</VirtualHost>

Page 26: 2012 php conf slide   PIXNET 如何使用 php

開發環境

● VirtualDocumentRoot 直接設定在開發者家目錄,開發者存檔後直接重新整理就可以看結果

● .pixnet 是只有內部網路可以用的 domain ,不是花幾百萬買來的 Root TLD,若無技術人力可以自己維護 DNS ,可以另開個網址來做這件事

Page 27: 2012 php conf slide   PIXNET 如何使用 php

測試環境

● 把線上網址後面加上 .[issue #].staging.pixnet● Git 要有對應的 issueXXX 的 remote branch● deploy script 發現現在在 issueXXX 的 git

branch ,就把 code 改推到測試環境(Ex: 測試主機的 /srv/staging/{issue}/{project})

● 搭配 VirtualDocumentRoot

Page 28: 2012 php conf slide   PIXNET 如何使用 php

測試環境

<VirtualHost *:80>ServerName pixnet.net.admin.staging.pixnetServerAlias *.pixnet.net.*.staging.pixnetVirtualDocumentRoot /srv/staging/%-3/pixfront/webroot

</VirtualHost>

Page 29: 2012 php conf slide   PIXNET 如何使用 php

產品開發流程

● 任何新產品開發,修 bug 都要在 issue system 開 issue ,得到一個 issue number

● 負責的程式設計師在 .[account].test.pixnet 的環境下開發,並在 git 開一個 issueXXX 的 branch

● 完成到可 demo 的程度,就 deploy 到測試環境 .[issue #].staging.pixnet 並給其他人測試

Page 30: 2012 php conf slide   PIXNET 如何使用 php

產品開發流程

● 等到確認無問題後,將 issueXXX merge 進 master,並且可以 deploy 到正式環境

● 完工!

Page 31: 2012 php conf slide   PIXNET 如何使用 php

Q & A

Page 32: 2012 php conf slide   PIXNET 如何使用 php

http://www.pixnet.net/[email protected]

● PHP/RoR 程式設計師● Android/iOS 程式設計師

徵才