FuelPHP 1.6 がリリースされました
多くの改良とバグ修正を含む FuelPHP 1.6 が 5/3 にリリースされました。変更点の詳細は Changelog をご覧ください。
主な変更点
Composer
1.6 から公式に Composer 対応されました。
インストール/アップグレードの後に、以下のコマンドを実行し、Composer から必要なパッケージ (FuelPHP のパッケージではなく、Composer のパッケージ) をインストールする必要があります。
$ php composer.phar update
oil コマンドを使っている場合は、再インストールすると oil create で上記のコマンドが自動実行されるようになります。
なお、FuelPHP 1.6 に必要なバージョンは PHP 5.3.3 以上とされています。Composer でチェックされるので上記コマンドを実行すれば、要件を満たさない場合はエラーが報告されます。なお、Composer 自体は PHP 5.3.2 以上が必要とされています。
また、Composer から FuelPHP のパッケージをインストールすることも可能です。
Log パッケージ
1.5 で導入された Log パッケージは廃止され、Core クラスに Log クラスが復活しました。Log クラスは裏で Monolog を使用しています。これは、FuelPHP が Composer 対応したため、Monolog は Composer からインストールされるように変更されたものです。Log パッケージも裏では Monolog を使っていましたので実質的には変わりません。
アップグレードの場合は、config.php の always_load.packages から log を削除し、fuel/packages/log フォルダを削除してください。
セキュリティフィルタ
セキュリティフィルタのデフォルト設定が、core/config/config.php から app/config/config.php に移動されました。アップグレードの場合で、app/config/config.php にセキュリティフィルタの設定を記述していない場合は、追加する必要があります。
Parser パッケージ
Mustache、Twig、MtHaml、Smarty は Composer 経由でインストールするように変更されました。
Auth
コーディング標準に準拠するため、SimpleAuth クラスの名前が Simpleauth クラスに変更されました。
同じく、Auth_Login_SimpleAuth クラスは Auth_Login_Simpleauth クラスに変更されています。
一部バグがあるもよう。
Upload クラス
Upload クラスは、裏で FuelPHP 2.0 の Upload パッケージを使うように変更されています。
どうやら、Upload::process() はデフォルトで自動で呼ばれるため、自分で記述する必要はなかったようです。1.6 で二度コールされることが顕在化されエラーになるようです。
関連
- FuelPHP 1.6 の Composer での依存ライブラリを含めた Zip ファイルを作成してみた - A Day in Serenity @ kenjis
- 3分でできる FuelPHP 1.6 テスト環境 - A Day in Serenity @ kenjis
- FuelPHP 1.5 がリリースされました - A Day in Serenity @ kenjis
- FuelPHP 1.4 がリリースされました - A Day in Serenity @ kenjis
- FuelPHP 1.3 がリリースされました - A Day in Serenity @ kenjis
- FuelPHP 1.2.1 がリリースされました - A Day in Serenity @ kenjis
- FuelPHP 1.2 が正式リリースされました - A Day in Serenity @ kenjis
主要 PHP フレームワークの開発への日本からの参加状況
日本での 5大フレームワークについて、GitHub のリポジトリで日本人っぽい Contributors を探してみました。そのフレームワークの Top 100人の Contributors の中に日本人が何人くらいいるか?みたいな感じです。
ただし、目視で調べただけなので見落としがあるかも知れません。名前も写真も外人っぽい人がいたらわかりません :-) 間違っているという情報がありましたら、お知らせいただけるとありがたいです。
更新情報
@kenji_s 少なくともCakeは5人いますね。
— cakephperさん (@cakephper) 2013年4月25日
@kenji_s Symfony は別途Contributorsのリストがあり、700人以上いて全部見れてないですが少なくとも8人はいますね github.com/symfony/symfon…
— Masao Maedaさん (@brtriver) 2013年4月25日
- ただし、Top 100 には 2人しか確認できず。
@kenji_s Zend Framework の contributor には、少なくとも4人見つかりますよ framework.zend.com/participate/co…
— Satoru Yoshidaさん (@strysd) 2013年5月5日
- Top 100 に 1人確認できました。
XAMPP 1.7.7 for Linux の PHP を 5.3.24 にバージョンアップする
Ubuntu 12.04 で XAMPP 1.7.7 for Linux の PHP を 5.3.20 にバージョンアップしました。
まず、コンパイルに必要なパッケージを追加します。
$ sudo apt-get install libltdl-dev libreadline6-dev
PHP のソースを展開します。
$ tar xvf php-5.3.24.tar.bz2 $ cd php-5.3.24
phpinfo() から Configure Command をコピーし、環境変数 EXTRA_LIBS="-liconv -lstdc++" を追加して、ペーストします。
$ EXTRA_LIBS="-liconv -lstdc++" './configure' '--prefix=/opt/lampp' '--with-apxs2=/opt/lampp/bin/apxs' '--with-config-file-path=/opt/lampp/etc' '--with-mysql=mysqlnd' '--enable-inline-optimization' '--disable-debug' '--enable-bcmath' '--enable-calendar' '--enable-ctype' '--enable-exif' '--enable-ftp' '--enable-gd-native-ttf' '--enable-magic-quotes' '--enable-shmop' '--disable-sigchild' '--enable-sysvsem' '--enable-sysvshm' '--enable-wddx' '--with-gdbm=/opt/lampp' '--with-jpeg-dir=/opt/lampp' '--with-png-dir=/opt/lampp' '--with-freetype-dir=/opt/lampp' '--with-zlib=yes' '--with-zlib-dir=/opt/lampp' '--with-openssl=/opt/lampp' '--with-xsl=/opt/lampp' '--with-ldap=/opt/lampp' '--with-gd' '--with-imap-ssl' '--with-imap=/opt/lampp' '--with-gettext=/opt/lampp' '--with-mssql=/opt/lampp' '--with-sybase-ct=/opt/lampp' '--with-mysql-sock=/opt/lampp/var/mysql/mysql.sock' '--with-mcrypt=/opt/lampp' '--with-mhash=/opt/lampp' '--enable-sockets' '--enable-mbstring=all' '--with-curl=/opt/lampp' '--enable-mbregex' '--enable-zend-multibyte' '--enable-exif' '--with-bz2=/opt/lampp' '--with-sqlite=shared,/opt/lampp' '--with-sqlite3=/opt/lampp' '--with-libxml-dir=/opt/lampp' '--enable-soap' '--enable-pcntl' '--with-mysqli=mysqlnd' '--with-iconv' '--with-pdo-mysql=mysqlnd' '--with-pdo-sqlite' '--enable-intl' '--with-icu-dir=/opt/lampp' '--enable-fileinfo' '--enable-phar' --with-xmlrpc --with-readline
以下のオプションは削除しました。
'--with-interbase=shared,/opt/interbase'
'--with-oci8=shared,instantclient,/opt/lampp/lib/instantclient'
'--with-pdo-pgsql=/opt/lampp/postgresql'
'--with-pgsql=shared,/opt/lampp/postgresql'
'--enable-intl'
以下のオプションを追加しました。
--with-xmlrpc
--with-readline
コンパイルしてインストールします。コンパイルは手許の環境では 5分59秒かかりました。
$ time make $ sudo make install
おしまい。
関連
- XAMPP 1.8.1 for Linux の PHP を 5.4.13 にバージョンアップする - A Day in Serenity @ kenjis
- GitHub からソースを取得して PHP をコンパイルする - A Day in Serenity @ kenjis
- XAMPP 1.7.7 for Linux の PHP を 5.3.20 にバージョンアップする - A Day in Serenity @ kenjis
- XAMPP 1.7.7 for Linux の PHP を 5.3.19 にバージョンアップする - A Day in Serenity @ kenjis
- XAMPP 1.7.7 for Linux の PHP を 5.3.17 にバージョンアップする - A Day in Serenity @ kenjis
あの徳丸本にも間違いはある! 自分で確認することが大切です
徳丸本に間違いを見つけましたので、少々大げさに公表してみようと思います。
徳丸本の誤った記述
まずは、問題の記述をご覧ください。これを見ただけでどこが問題かわかった人は、かなりするどいです。普通は見逃します。
これは、ご本人によるスライド 徳丸本に載っていないWebアプリケーションセキュリティ の 1ページであり、「徳丸本に載っていない」というタイトルに反して、徳丸本に載っている内容も一部記載されています。
ここで問題となるのは(徳丸本P63)の header() 関数のコードです。
実際にこのコードを検証してみましょう。
<?php // 徳丸本 P.63 に掲載されているコード header('X-FRAME-OPTIONS', 'SAMEORIGIN'); // 送信しようとしているヘッダを表示 var_dump(headers_list());
手許の環境でこのコードを実行してみると、以下のような結果になりました。
array 0 => string 'X-Powered-By: PHP/5.3.23' (length=24)
おかしいですね。肝心の X-FRAME-OPTIONS ヘッダがありません。
念のため、Live HTTP headers でも確認してみましょう。
やはり、X-FRAME-OPTIONS ヘッダはありません。困りましたね。このヘッダを出力することにより、クリックジャッキングを防ごうというサンプルコードが期待したように動きません。これでは、クリックジャッキングを防ぐことができません。
しかも、あの徳丸本のコードをそのまま使っているのに! 正誤表も 100回見たが載っていない。これは自分の環境の問題なのか?! と眠れない夜を過ごした方もいるかも知れません。しかし、ヘッダが出ないということは、自分の環境では対策できていないということで、これを放置するのは危険です。
こんなとき、どうしたらいいのでしょう?
そうです。PHP にはあの PHP マニュアルがあります。とりあえず、PHP マニュアルを見ましょう。
答えは(今回は)すべて PHP マニュアルにありました。
header() 関数の使用法は以下のとおりです。
void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
もうおわかりですね。第1引数はフィールド名ではなく、第2引数もフィールドの値ではありません。
というわけで、正しいコードは、以下のようになります。
header('X-FRAME-OPTIONS: SAMEORIGIN');
そのように修正すると、めでたく以下のように X-FRAME-OPTIONS が出力されるようになりました。
array 0 => string 'X-Powered-By: PHP/5.3.23' (length=24) 1 => string 'X-FRAME-OPTIONS: SAMEORIGIN' (length=27)
コピペの弊害
問題のあるコードが、検証されることなくコピペされ伝播していくという可能性が PHP ではとくに懸念されているわけですが、とりあえずググってみました。
幸か不幸か、クリックジャッキング自体がまだあまり浸透していないこともあってか、このコードはそれほど浸透していないようです。以下に 1件、徳丸本と同じ記述をしているページがあるだけでした。
http://zeijaku.net/blog_history/?search=201111082318
ただし、外部に出ないコードに徳丸本のコードがそのままコピペされているという可能性は残りますので、コードレビューや監査などをしている人はチェックするといいかも知れません。
FuelPHP入門ハンズオン vol.1 を開催しました
4/13 に PHP に関する基本的な知識がある方を対象に、FuelPHP のインストールから使い始めることができるようになるまでを目標とする、本格的なハンズオンを名古屋で開催しました。
いくつかトラブルや不手際がありましたが、定員10人満席で無事完了することができました。
以下、印象に残ったこと。
- vim ユーザが 4割という異常な高率
- ユニットテストを書いている人がいない!
- Mac ユーザが 8割
- CodeIgniter ユーザは 0
- ほとんどの人が開始時刻前に集合しており、遅れる人も連絡があるという礼儀正しさ! (東京の人にもみならって欲しい)
- 味仙が異常に込んでいた。17:20 に入店したのにすでに順番待ち。少し待ったら座れたが、帰りには店の前にすごい人があふれていた
ハンズオンで使った FuelPHP の紹介プレゼン資料は、以下で公開しました。