2012 php conf slide   PIXNET 如何使用 php
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

2012 php conf slide PIXNET 如何使用 php

on

  • 5,664 views

 

Statistics

Views

Total Views
5,664
Views on SlideShare
2,591
Embed Views
3,073

Actions

Likes
14
Downloads
71
Comments
0

6 Embeds 3,073

http://brooky.cc 3045
http://webcache.googleusercontent.com 12
http://blog.brooky.cc 12
http://digg.com 2
http://www.plurk.com 1
http://translate.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

2012 php conf slide PIXNET 如何使用 php Presentation Transcript

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