2012 php conf slide PIXNET 如何使用 php

6,545 views

Published on

0 Comments
16 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,545
On SlideShare
0
From Embeds
0
Number of Embeds
3,588
Actions
Shares
0
Downloads
75
Comments
0
Likes
16
Embeds 0
No embeds

No notes for slide

2012 php conf slide PIXNET 如何使用 php

  1. 1. PIXNET如何使用PHP
  2. 2. Ronny Wang 王向榮● PHP 開發經驗 12 年● 現任 PIXNET 技術部副理● 負責 Pix Framework 開發Twitter: ronnywanghttp://ronnywang.pixnet.net/bloghttp://github.com/ronnywang
  3. 3. ● PIXNET Web 環境● git● Framework● log● proctitle● 開發流程
  4. 4. PIXNET 現在環境● FreeBSD 8.3 ○ ports 管理 VirtualHost 設定● Apache 2.2 (worker)● PHP 5.3 with fpm
  5. 5. PHP 5.3 用到功能
  6. 6. PHP 5.3 - anonymous function$quote_func = function($str) { return ""{$str}"";};$quoted_array = array_map( $quote_func, $array);
  7. 7. PHP 5.3 - get_called_classclass User extends Pix_Table { }class Article extends Pix_Table { }// 以下寫法在 PHP 5.3 以前做不到$user = User::find(ronnywang);$articles = Article::search(array( author_id => $user->id,));
  8. 8. PHP 5.4 升級中
  9. 9. 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];
  10. 10. PHP 5.4 - 直接呼叫新物件 method● $a = new Foo(); $a->bar(); ==> (new Foo())->bar();
  11. 11. PHP 5.4 - 直接用回傳值的 array● $a = func(); $a[3]; ==> func()[3];
  12. 12. PHP 5.4 - development web server● php -S 0.0.0.0:12345 index.php● 開http://localhost:12345
  13. 13. Git - gitolitehttps://github.com/sitaramc/gitolite● 權限管理方便(clone 出 gitolite-admin 即可)● $GL_PACKAGE_HOOKS 管理 hook template
  14. 14. Git - php syntax check● php -l (--syntax-check)● https://github. com/phpbb/phpbb3/blob/develop- olympus/git-tools/hooks/pre-commit
  15. 15. Framework● Zend Framework 1.5.3 (現 2.0.0) ○ http://framework.zend.com/● Pix Framework ○ http://framework.pixnet.net/
  16. 16. Framework 好處● 網站設定位置統一 ○ 測試環境好建立● 容易在網頁產生開始結束增加事件 ○ 記錄產生時間 ○ 處理錯誤訊息
  17. 17. Framework - model● PIXNET 的 ORM Pix_Table ○ 有用 MySQL, PostgreSQL, SQLite, Cassandra ,用法一模一樣 ○ 測試時用 SQLite 的 :memory: ○ 記錄時間較長的 query ,方便找出系統瓶頸 http://framework.pixnet.net/ 有 OSDC 的 Pix_Table slide
  18. 18. Pix Framework - Pix_Prompt● https://github.com/pixnet/pixframework- heroku/blob/master/prompt.php● > php prompt.php >> echo 1 + 3 4 >> $user = User::find(ronnywang); >> echo count($user->articles) 358 >>
  19. 19. 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 正在處理哪些網 址
  20. 20. 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/albumsho41475 www 1 50 0 429M 97312K select 12 0:19 6.98% php-fpm: PixFront: ice2006.pixnet.net/blog/post/21929859-12
  21. 21. PHP Log● php.ini 設定 error_log 位置● 用 logrotate 只留三天內 log
  22. 22. PHP Log - IRC● PIXNET 所有 web 主機的 PHP Error, Warning 都會噴到一個 IRC 上面● 可參考http://github.com/ronnywang/heroku- ircbot/
  23. 23. 開發/測試/上線● 以網址區隔● 線上: http://ronnywang.pixnet.net/blog 開發: http://ronnywang.pixnet.net.srwang.test. pixnet/blog 測試: http://ronnywang.pixnet.net.12345.staging. pixnet/blog
  24. 24. 線上環境● 用 rsync 將程式碼推上 web 機器● rsync over ssh 權限管理● 用 netgroup 管理目標主機
  25. 25. 開發環境● 把線上網址後面加上 .[開發者].test.pixnet● 利用 Apache VirtualDocumentRoot 依照不同 網址連到不同資料夾<VirtualHost *:80> ServerName pixnet.net.admin.test.pixnet ServerAlias *.pixnet.net.*.test.pixnet VirtualDocumentRoot /home/user/%-3/pixfront/webroot</VirtualHost>
  26. 26. 開發環境● VirtualDocumentRoot 直接設定在開發者家目 錄,開發者存檔後直接重新整理就可以看結果● .pixnet 是只有內部網路可以用的 domain , 不是花幾百萬買來的 Root TLD,若無技術人 力可以自己維護 DNS ,可以另開個網址來做 這件事
  27. 27. 測試環境● 把線上網址後面加上 .[issue #].staging.pixnet● Git 要有對應的 issueXXX 的 remote branch● deploy script 發現現在在 issueXXX 的 git branch ,就把 code 改推到測試環境 (Ex: 測試主機的 /srv/staging/{issue}/{project})● 搭配 VirtualDocumentRoot
  28. 28. 測試環境<VirtualHost *:80> ServerName pixnet.net.admin.staging.pixnet ServerAlias *.pixnet.net.*.staging.pixnet VirtualDocumentRoot /srv/staging/%-3/pixfront/webroot</VirtualHost>
  29. 29. 產品開發流程● 任何新產品開發,修 bug 都要在 issue system 開 issue ,得到一個 issue number● 負責的程式設計師在 .[account].test.pixnet 的 環境下開發,並在 git 開一個 issueXXX 的 branch● 完成到可 demo 的程度,就 deploy 到測試環境 .[issue #].staging.pixnet 並給其他人測試
  30. 30. 產品開發流程● 等到確認無問題後,將 issueXXX merge 進 master,並且可以 deploy 到正式環境● 完工!
  31. 31. Q&A
  32. 32. 徵才http://www.pixnet.net/careertechjob@pixnet.tw● PHP/RoR 程式設計師● Android/iOS 程式設計師

×