カテゴリー
Computer Development Programming

PROVE2の先行販売

PROVE2エンタープライズ版の先行販売を12/25日までの期間・数量限定で行なっています。PHP5.1/5.2をご利用中でPROVE2を運用・開発に組み込みたいとお考えの方は是非この機会にご購入ください。

カテゴリー
Computer Development Programming Secure Coding Security

PROVE2の紹介動画

PROVE for PHPへ紹介動画を掲載しました。PROVEの動作・操作を3分ほどで見て頂けます。より高解像度で見れるようYouTubeにHD版もアップロードしています。

PROVE for PHPはPHPの内部動作を記録・比較し、新しいバージョンで意図通りに動作しているか確認できるテスト・ツールです。PHPプロジェクトがソースコード管理システムをGitへ移行してから、予定通り毎月新しいリリースが公開されてます。PHPを最新の状態に保つ事はセキュリティ維持の為に書かせませんが、運用中のシステムのバージョンアップは容易ではありません。PROVEはそういったバージョンアップを簡単にします。

使い方は色々あります。

  • PHPのバージョンアップ前後の動作確認
  • 再帰テスト為のリクエスト送信をWebアプリに送信
  • 実行内容を参照し問題の発生箇所を特定

PROVEはPHPの動作環境を記録した時と同じ状態にして、スクリプトを実行できます。この為、テストケースの作成はブラウザでアクセスするだけ、テストは記録したログを再生するだけで完了します。PHPのバグフィックスやセキュリティフィックスで動作が変わった場合、どこで動作が変わったのか簡単に分かります。リリースノートなどのみでは分からない動作変更も見つける事ができます。時間関数やファイル関数、データベース、ネットワークなど状態や外部リソースに依存する関数は実行をオーバーライドし、記録した時点の結果を返すことが出来ます。つまりmicrotime関数やsrand関数などに影響されずに、(PHPの動作が変わっていなければ)記録時点と同じ実行結果を得る事ができます。

PROVEのホームページで解説していない利用方法として、スマートフォンや携帯サイト開発での利用方法を紹介します。PROVEには「再帰テスト為のリクエスト送信をWebアプリに送信」する事ができます。スマートフォン、携帯サイトなどの場合、機種などの応じて異なるレスポンスを行う事が良くあります。PROVEの場合、PHPアプリにリクエストされた「リクエスト情報」がそのまま記録されます。これを再生することにより、繰り返しスマートフォンや携帯を使わずにこれらのデバイスを利用したテストを再現できます。

PROVEには前回記録した状態を再現・外部リソースに依存せずに動作する機能がありますが、この機能を利用しない状態でも利用できます。この場合、データベースやファイルなどの外部リソースをテストケース作成時と同じ状態にして実行し、PROVEによる再現機能を使わずにより広い範囲のPHP機能のテストを行う事も可能です。

プロキシやブラウザでWebアプリケーションの動作を記録するテストシステムと比べると、PHP内部の動作を全て記録するPROVEのテストは比較にならない程強力です。

PROVEの基本機能

  • ブラウザからのリクエストの記録
  • リクエストを処理した際のPHP動作の記録
    • 全てのリクエスト情報(POST、GET、COOKIEなど)
    • 出力(出力関数単位で習得可能)
    • 関数呼び出し
    • 関数戻り値
    • セッション情報
  • 記録したリクエストの再生
    • 記録した時点の状態を再現
    • 指定した関数のみ状態を再現
    • 記録時点の状態を再現せずに実行
  • 実行差分の参照
  • 記録したログの参照

新しいPROVE2のベータ版が公開中です。ご興味がある方は是非一度お試しください。

ホームページ

ベータ版ダウンロード

 

カテゴリー
Computer Development

PHPのStrict Sessionパッチ

のんびりしていた訳ではありませんが、PHP 5.4.1のブランチが作られたので慌ててStrict Sessionパッチを改訂しました。

master
https://gist.github.com/1379668

5.4
https://gist.github.com/2224196

5.3
https://gist.github.com/2224360

以前、Gistに入れていたパッチとの違いは、

  • PSモジュール(セッションセーブハンドラ)のAPIを変更しないように修正
    (これにより使っているハンドラが対策済みかどうかは見て分かるようには出来なくなりました。その代りにmemcacheなどのサードパーティのセーブハンドラのコンパイル済みバイナリとの互換性を維持しています。)
  • セッションIDのコリージョン(衝突)を検出
    (三回リトライしてもコリージョンする場合はエラー。通常、三回もコリージョンすることはまずあり得ません。)

となります。

PSモジュールを書く方(ユーザセーブハンドラ含む)はセッションをOPENする場合にセッションIDが初期化済みか、チェックする必要があります。

と、ここまで書いてパッチに多少問題がある事に気が付きました。自動生成する場合はコリージョンを検出していますが、session_regenerate_id()で生成する場合はコリージョンをチェックしていません。session_regenerate_id()を呼んだ時もチェックしないと片手落ちなので近いうちに修正します。

パッチを書いていてsession_write_close()してsession_start()をした場合、おかしくなることに気が付きました。困っている人が居るか、バグDBを検索するとやはり数人からバグレポートされていました。この件は別途に対応する事にします。

パッチを使ってみてくださる方、大募集です。ZTS、Non-ZTSの両方でUNITテストは実行していますが、Webサーバでテストしていません。動いたら、Twiterなどで良いので教えてください。よろしくお願いします。

 

このパッチについては、こちらをご覧ください。これは私が書いているのでおかしな英語があった場合、教えて頂けると助かります。

https://wiki.php.net/rfc/strict_sessions

カテゴリー
Computer Misc Programming Review

「PHP徹底構築」を頂きました

廣川類さんが執筆された「PHP徹底構築」を頂きました。3/29日発売らしくアマゾンでも予約受付中の出来たてホヤホヤの本です。書籍イメージも無かったので自分の携帯で撮った写真を載せておきます。

最新版のPHP 5.4にも対応しています。先程届いたばかりなので読むのはこれからですが、内容を簡単に紹介します。

カテゴリー
Computer Development Programming

OSC愛媛2012の資料 – PHP5.4とはどんなPHPなのか?

OSC愛媛2012の「PHP5.4とはどんなPHPなのか?」の資料を公開します。ポイントは以下の通り。

  • PHP 5.4は基本的にはベターPHP5.3
  • 互換性問題もあるが、一般に致命的な問題はない
  • 全般にPHP5.4は速い
  • 移行を考えている方は早い方が良い(使える期間が長くなる)
  • ディストリビューションのPHPを使う、という選択もある(RHEL6 PHP5.3, Ubuntu LTS PHP5.4?)

プラットフォームの選択には様々な事情がありますが、Traitsはコードを効率良く再利用するには便利な機能です。さっと移行してしまうのも良いでしょう。

ところで、Traitsの例としてアクセサの実装例を紹介しています。

https://gist.github.com/1379592

しかし、次のPHPではC#風のアクセサ文法がサポートされる可能性があります。

https://wiki.php.net/rfc/propertygetsetsyntax

こちらの方が色々便利です。利用する場合は、このような文法が実装される可能性があることを理解した上で使うと良いと思います。

カテゴリー
Computer Development Misc

PHP Git Repository

PHPのソースコードのリポジトリがSubversionからGitに移行しました。

https://wiki.php.net/vcs/gitfaq

個人的には、これで色々楽になります。

カテゴリー
Computer Development Programming

第二回 岡山PHP勉強会のスライド

第二回 岡山PHP勉強会のスライドです。

遅くなりました。多少追記したい部分があったのですが、取り敢えず公開します。