PHP カンファレンス 2007 レポート

  2007-09-01 に PHP カンファレンスが大田区産業プラザ (PiO) で行なわれました。
  自分が見たプログラムの内容をメモしておいたので簡単にまとめます。また、まとめながら調べたことも一緒に記述しています。

  なお、間違いがあるかもしれませんが、その際は教えていただけるとありがたいです。

- PHPカンファレンス2007プログラム概要
  http://www.php.gr.jp/seminar/20070901/prog.php

1. 基調講演「PHP の今とこれから 2007」

PHP 4.3/4.4 の利用率は 75% 程度

PHP 5 について

PHP 5.2 について

PHP 5.3 について

  • 本来は予定にはなかった
  • 2008/01 以降にリリースか?
  • PHP 6 までのつなぎのバージョン
    • Unicode サポート以外の新機能が入るかもしれない
  • ICU (国際化) 拡張
    • IBM が開発している国際化用のライブラリ
  • OpenSSL で OpenID がサポートされる
  • 名前空間も?

PHP 4.4/5.1/5.2/6.0 のベンチマーク

  • php-5.x.x/Zend/bench.php を使用
  • PHP 5.2 が今のところ一番早い

セキュリティーについて

PHP 6.0 について

  • Unicode 対応
    • ICU 3.4 をエンジンとする
    • 内部的には UTF-16
    • echo strlen('日本語'); // -> 3
    • mbstring は不要になるか? (微妙な状況)
    • エンコードの検知の精度がまだ低い
  • レガシーコードの削除
    • register_globals
    • magic_quotes_*
    • safe_mode
    • zend.ze1_compatibility_mode
  • MySQLND (MySQL Native Driver)
    • libmysql の代替ライブラリ
    • PHP 5/6 をサポート (PHP 6.0 には標準バンドル。PHP 5.3 にも?)
    • MySQL 4.1 以上をサポート
  • 新しいガベージコレクタ

Namespace (名前空間)

2. 大規模サイトの構築・運用ノウハウ (仮題)

  • ウノウ、GREE の CTO 対談
  • サーバマシンは統一する
  • テーブルは JOIN しない

ウノウの場合

GREE の場合

  • スライド中に「GREE に入りたい」のサブリミナル効果
  • ページビュー、サーバ台数、ユーザ数など (非公開っぽいので省略)
  • フレームワークはもちろん Ethna
  • TEXT を外に出す

     +-----+----------+
     | UID | 名前     |
     +-----+----------+
     |  7  | すなおか |
     +-----+----------+
        ↑
        ↓
+----+-----+-------------+
| ID | UID | 内容 (TEXT) |
+----+-----+-------------+
|  1 |  7  | ほげほげ... |
+----+-----+-------------+

  • テーブル (DB) を分割する

                            +----+-----+---------+
+-----+----------------+    | ID | UID | 内容    |
| UID | パーティション |    +----+-----+---------+
+-----+----------------+    |  1 |  7  | ...     |
|  7  |              1 | → +----+-----+---------+
+-----+----------------+
|  9  |              2 | → +----+-----+---------+
+-----+----------------+    | ID | UID | 内容    |
                            +----+-----+---------+
                            |  2 |  9  | ...     |
                            +----+-----+---------+

  • JOIN しない
  • 正規化がんばらない
  • 本番機への投入は rsync

3. PHP Framework Update

symfony

1590597869

  • 間もなく 1.1 のベータリリース

CakePHP

Piece Framework

  • ステートフルでセキュアな Web アプリケーションフレームワーク
  • 個別のライブラリだけを使用することもできる
  • Piece IDE のデモ (現在は Eclipse のプラグイン)
    • ウィザード式の画面がビジュアルに作成できる (楽しい)
    • 出力は YAML

Ethna

  • 今後の方向性
  • いろいろ直したいところとか

4. PHP at Yahoo!

Y! について

  • 13 億 3800 万ページビュー
  • 1960 万アクティブユーザ ID
  • 2007/08 現在 140 サービス

Y! と PHP の関係

  • PHP 界隈で有名な人が在籍
  • PHP のバグはまず Y! 社内にレポートされる (PHP に独自のパッチを当てているため)
  • 当初は FreeBSD 2.1 上の独自システムで構築
    • Web サーバ: Filo Server -> Apache (1996 年)
    • DB: フラットファイル -> MySQL (1998 年)
    • yScript -> PHP (2002 年)
  • Oracle も使うよ
  • FreeBSD、Apache、PHP には独自のパッチを当てている
  • C++ で書かれたライブラリを PHP 拡張から呼び出す
  • 日本ではフロントエンドはほとんどが PHP

なぜ PHP を採用したか

  • Web 用の言語
  • 高いパフォーマンス
  • 大きなコミュニティ
  • ライブラリが充実している、拡張性がある
  • ツールが豊富 (IDE、プロファイラ、デバッガ)
  • トレーニングコストが低い

現在の PHP

  • フレームワークはほとんど使っていない
    • HTML ページ: 5% PHP
    • ヘルパー (ヘッダ出力など): 50% PHP
    • ビジネスロジック: 100% PHP
    • コア: C/C++
  • PHP は最低限でビルド

$ ./configure --disable-all

  • 必要なモジュールは共有モジュールとしてインストール
    • 不必要な依存性を下げる
    • メモリの使用量を下げる
    • 再コンパイルが不要
    • しかし、Apache 起動時に若干のオーバーヘッドが

PHP 5 への移行について

  • 日本では 4.4 系がメイン
    • 2007 年末までに 5 系へ
    • 2008 年には 5.2 系へ移行する

セキュリティについて

  • 開発ルール・プラットフォームの整備による開発
  • Scanmus
    • Rasmus が開発した XSS 検出ツール
  • open_basedir を設定
  • allow_url_fopen = Off、allow_url_include = Off
    • 必要があれば libcurl を利用
  • safe_mode = Off
  • display_errors = Off
    • しかし log_errors = On でログには残す
  • error_reporting = E_ALL
  • ユーザからの入力値はフィルタリングする
  • PHP 5.2.0 からのフィルタ拡張を利用する
    • Y! から PHP コミュニティに還元した拡張
    • Y! 社内では PHP 4 でも利用できるように PHP 自体にパッチを当てている
  • CSRF 対策は Crumb (セッション追跡用の秘密情報) を利用

パフォーマンス

  • APC を利用 (Rasmus が携わっているため)
    • xdebug + WinCacheGrind・KCacheGrind
  • PHP 拡張の開発
    • C/C++ に PHP を埋め込んで利用することも (Web アプリではない)
  • セッションの利用を避ける
  • Cookie を利用して画面遷移に必要な情報は POST で (hidden) で埋め込む
  • r3 (テンプレート管理ツール) を開発
    • 日本語の解説がある (どこだろう?)
  • OSS のフレームワークのはあまり利用しない
    • 汎用的すぎてパフォーマンスに問題があるので
  • 実装はエンジニアに委ねる
    • プロダクトに特化した独自のフレームワークを利用している場合も
    • トップページ専用の CMS とか
  • Smarty はオーバーヘッドが Y! では無視できないので利用しない
  • symfony は使い始めた
    • Yahoo! Bookmarks
    • del.icio.us
    • Yahoo! Answers (Yahoo! 知恵袋)
    • いろいろカスタマイズしている
  • CakePHP
    • 検討中
    • ただし、利用実績も予定もなし

まとめ

  • 5 年ほど PHP を使っている
    • いろいろカスタマイズしている
  • PHP 拡張を多用している
  • OSS のフレームワークはあまり使っていない
    • symfony は使い始めた
  • IDE は使っていない
  • CVS を使っている

5. ライトニングトーク

  • 人が多すぎで 6F から 2F に移動

モバイル開発における PHP の利用方法と Tips

  • 資料
  • 携帯サイトと PC サイトの違い
  • PEAR Net_UserAgent_Mobile
  • 文字コード
    • sjis-win、eucjp-win を利用する
    • DB は cp932
  • 絵文字
  • Cookie は使えない

Usagi Project

  • OpenPNE 2.4系の派生プロジェクト
  • PHP ライセンス
  • いっしょに開発しませんか

PEAR DB_DataObject 開発ケーススタディ

  • DB をまたぐテーブルの結合をサポートした
  • テスト重要

PHP で画像処理をしてモテようかなと思って

PHP プログラマのための恋愛術

  • ふつうに恋愛論
  • PHP の話は出ない

code なにがしについて

  • 資料PDF
  • ググれといわれない場を
  • みんな優しい

ケータイキット for Smarty について

  • モバイルサイトに特化した Smarty
  • モバイルサイト開発の問題点を解消
  • 個人利用は無償

PHP でシェルを作る

  • /dev/null T シャツ
  • PHP で書かれた phsh を開発
    • もうじき公開? -> 公開されました
  • ログインシェルにもできる
  • eval で処理してるっぽい
  • シェルは偉大

6. スペシャルセッション

  • Piece IDE のデモのリベンジ
  • 基調講演の続き
    • 開発体制
    • ユーザ会など

以上、大雑把ですがまとめてみました。講師のみなさんありがとうございました。
懇親会にも出席していろいろな方と名刺交換・お話ができて充実した一日でした。

最後に戦利品です。

1. Yahoo! JAPAN さんに頂いたメモパッド

メモパッド

2. Asial さんに頂いた時計

時計

3. アイデアマンズさんに頂いた LED

LED