hnwの日記

PHP

Console Componentを利用したメモ

PHP

Console Componentを使った感想を記録しておきます。雑なメモですが、どなたかの参考になれば。 Console Componentとは Console ComponentはPHPのコマンドラインアプリケーション用ライブラリです。コマンドラインオプション解析や、出力に簡単に色をつける…

PHPで素数を数えて落ち着いてみた

PHP

2,3,5,7,11,13,...と素数を順に列挙することで落ち着く人が世の中にはいるようです(参考:「素数を数えて落ち着くんだ…」)。とはいえ人力では素数を100個列挙するのさえつらいので、プログラミング言語に頼った方が落ち着けるはずです。PHPには、そんな状…

第五回闇PHP勉強会でzvalをダイエットする試みについて発表しました

PHP

3月15日に開催された第五回闇PHP勉強会で発表してきました。以下が発表資料です。 僕の発表では、PHPの変数1個に対応する構造体zvalが64bit環境では24byteになるけれども、これを16byteにしたらPHPの高速化・省メモリ化ができるんじゃないか、という試みを紹…

Mavericks上での古いPHPのビルドが苦行だった

PHP

先週、MacBook Air 11inch Late 2010にMacOSX Mavericksをインストールしてみました。まだ時々違和感がありますが、もう1ヶ月もすれば細かい問題点も消えてくるのではないでしょうか。 しかし、Mavericks上でOSSをビルドしようと思うと案外苦労するかもしれ…

PHPのジェネレータはイテレータより速い

PHP

先日の記事「PHPのジェネレータの実装を調べてみた」で僕は次のように書きました。 GeneratorクラスはIteratorインターフェースを実装しており、対応するPHPメソッドを持っています。また、Cで実装した場合のみ指定できるイテレータ関数も実装しています。こ…

PHPのジェネレータの実装を調べてみた

PHP

PHP 5.5で実装されたジェネレータについて、PHPのソースコードを追いかけてみました。ボチボチ追いかけたつもりですが、間違いや説明不足に気づいた方はツッコミをお願いします。 該当箇所のgithub.comへのリンクも作ってみました。カギ括弧で囲った場所がソ…

イテレータを介して見るPHPクラスの内部構造

PHP

PHPにはイテレータの仕組みがあります。イテレータクラスのインスタンスは、配列同様にforeach文でループを作ることができます。たとえば次の例を見てみましょう。

PHPカンファレンス2013でZend OPcacheについて発表しました

PHP

9月14日に開催されたPHPカンファレンス2013で発表してきました。以下が発表資料です。

第70回PHP勉強会で浮動小数点数の話をしました

7月22日に開催された第70回PHP勉強会で発表してきました。以下が発表資料です。 浮動小数点数周りのトピックを3点紹介する内容でしたが、思ったより反応が良かったように思います。 ただ、面白おかしく話そうとして、聞いている方々に無駄に恐怖を与えてしま…

PHP extensionとZend extensionの違い

PHP

PHPのextensionにはPHP extensionとZend extensionという2種類があります。これらの違いが何なのか、PHPの実装レベルから調べてみました。 PHPのextensionについて PHPのextensionには2種類が存在します。これらは次のようにphp.iniでロード指定する構文が異…

launchdで複数バージョンのPHP-FPMを自動起動する

PHP

(2016/8/9)PHP7やHomebrewの現状に合わせるため細かい点を修正しました。 MacOSX上で5.3/5.4/5.5の3バージョンのPHP-FPMを自動起動する設定を紹介します。 各バージョンのPHP-FPMを用意する方法については、前回記事「php-buildで複数バージョンのPHP-FPM…

php-buildで複数バージョンのPHP-FPMを用意する

PHP

(2016/8/9)PHP7やHomebrewの現状に合わせるため細かい点を修正しました。 ついにPHP 5.5.0がリリースされましたね!これに関連して、php-buildを使ってPHP 5.3/5.4/5.5の3バージョンのPHP-FPM環境を用意する方法を紹介します。 この記事は「phpenv + php-b…

第66回PHP勉強会でPHP-FPMの話をしました

PHP

3月27日に開催された第66回PHP勉強会でLT発表してきました。以下が発表資料です。 発表内容は、 PHP-FPMとuWSGI+PHP pluginを試してみた話と、PHP-FPMの面白機能紹介といった内容です。 個人的にPHP-FPMの記事は絶賛記事が多すぎて気持ち悪いと感じていたの…

PHP extension中でvar_dumpデバッグする方法

PHP

誰得な内容ですので簡潔に。 #include "Zend/zend_interfaces.h" // (略) zval *zp; // (中略、この間にzpに意味のある値が入ったとする) // zpの型が何だろうと綺麗に表示! zend_call_method_with_1_params(NULL, NULL, NULL, "var_dump", NULL, zp); Z_…

第四回闇PHP勉強会でTravis CIの話をしました

PHP

3月2日に開催された第四回闇PHP勉強会で発表してきました。以下が発表資料です。 発表内容は、 Travis CIでPHP extensionのCIをする方法についてです。同じことをしている人があまり居ないように思ったので紹介してみましたが、少なくとも一部の人には好評だ…

PHP5.5のジェネレータをSPLのイテレータと組み合わせてみる

PHP

リリースが間近になったPHP5.5ではジェネレータが導入される予定です。これはイテレータを簡単に記述する文法を導入するもので、Pythonのジェネレータに非常に良く似ています。 もう少し詳しく説明しましょう。PHP5.5では、yieldというキーワードが導入され…

PHP 5.3.4以降ではヌルバイト攻撃が成立しにくくなった

PHP

今回はWebセキュリティの話題です。実はid:t_komuraさんの記事で既報なんですが、案外知られていない気がしたので改めて紹介します。 PHPアプリケーションに特化した攻撃手法として、ヌルバイト攻撃というものがあります。PHPの大半の関数がヌル文字\0(0x00…

PHPカンファレンス2012でphp-timecopについてLT発表しました

PHP

9月15日に開催されたPHPカンファレンス2012でLT発表してきました。以下が発表資料です。 発表資料:「php-timecopを実戦投入してみた」(slideshare版)(PDF版) ただ、利用シーンがイマイチわからないという声を何件か頂戴しましたので、本稿で改めて補足しま…

第三回闇PHP勉強会でPHPエクステンションの話題を発表しました

PHP

9月1日に開催された第三回闇PHP勉強会で発表してきました。以下が発表資料です。 発表資料:「PHPエクステンションの開発tips」(slideshare版)(PDF版) 闇PHP勉強会というのは@anatooさんが開催している謎の集まりで、他のPHPの勉強会ではウケが悪そうなネタ…

phpenv+php-build環境の構築と運用

PHP

(2013-03-25追記)下記PHPのビルドにはgcc、autoconf、automake、libtool、bison、re2c、libmcrypt、jpeg、libpng、flex(PHP 5.2.17のみ)などのインストールが必要です。PHPのバージョンを色々揃えたいというニーズは多くの人がお持ちだと思います。これを…

HerokuのBuildpackを利用してmbstringが有効なPHPサーバを立ててみた

PHP

HerokuといえばRubyのPaaSという印象が強いのは僕だけでしょうか。しかし、Herokuの現在の最新環境であるCedarでは下記の7つのプラットフォームをサポートしているんだそうです。(出典:The Celadon Cedar Stack | Heroku Dev Center) Clojure Facebook Ja…

第59回PHP勉強会でPHPのマルチバイト処理の分類について発表しました

PHP

去る25日の金曜日に第59回PHP勉強会@東京で発表してきました。以下が発表資料(少し修正しました)です。 発表資料:「PHPのマルチバイト処理 ― 分類と落とし穴」(slideshare版)(PDF版) 久々のPHP勉強会だったので張り切って発表しに行ったのですが、他の人…

PHPの対話モードでuseしたら1行後には忘れられてた

PHP

PHPの対話モードに関する小ネタです。PHPコマンドは-aオプションつきで起動すると対話モードになります。libreadlineかlibeditを有効にしてビルドしたPHPであれば、下記のようにプロンプトが表示されて入力を促されます。 $ php -a Interactive shell php > …

PHPのロケールに関するまとめ

PHP

5/3 17:45追記:t_komuraさんに指摘いただいた関数と、さらに僕が調べ直したものを含め、「ロケール設定に従う関数一覧」に25個ほど追加しました。かなり見落としがありましたね…。 PHPのロケール*1まわりについて調査したので、これをまとめてみます。 この…

WebスクレイピングライブラリGoutteで遊んでみる

PHP

新年あけましておめでとうございます。今年もボチボチやっていきます。本稿ではPHP製のWebスクレイピングライブラリGoutteを紹介します。 Goutte(グット)とは Goutteは必要十分な機能を持ったWebスクレイピングライブラリです。そもそもWebスクレイピング…

浮動小数点数の丸め処理を見比べてみる

各種プログラミング言語には、切り上げ・切り捨て・四捨五入など浮動小数点数を丸める関数が何種類もあります。こうした丸め処理を利用する際、「ceilとfloorどっちがどっちだっけ?」「マイナスの数が来た時の挙動って大丈夫なんだっけ?」などと不安になる…

PHPの新しいround関数を読み解く (2)pre-roundingの意味

(2011/10/18 01:50)「他の言語で試してみる」「誰が正しいのか?」を追記しました。また、初心者への対策と強調しすぎて誤解を招いた気がしたため、少し表現を変更しました。 前回記事「PHPのround関数を読み解く (1)丸め桁数が大きすぎ・小さすぎる場合」に…

PHP5.3.4から5.3.6までのround関数がときどき丸めすぎてたのが直った

PHP5.3.4から5.3.6のround関数に問題があるんじゃないか、と僕がバグ報告していた件(PHP :: Bug #54334)が、PHP5.3.7から修正されています。僕のバグレポには特に返事もないので、全く独立に修正されたんだと思います。PHP5.3.7のChangeLogには次のような…

PHPのround関数を読み解く (1)丸め桁数が大きすぎ・小さすぎる場合

PHPのround関数はPHP5.3.0で一新されましたが、その挙動は複雑です。以前の記事「PHP5.3.0alpha3のround関数の実装がPHP5.2.6と変わった」では典型的な挙動を紹介しましたが、実際はもう少し細かい場合分けがあります。僕自身の整理も兼ねて、RFC*1およびPHP…

第4回Symfony2勉強会でLT発表してきました

PHP

去る6月4日、第4回Symfony2勉強会でLT発表してきました。以下が発表資料です。 発表資料:「PHPUnitのMockObjectの紹介」(slideshare版)(PDF版) 僕だけSymfony2と何の関係があるの?という感じのタイトルでしたが、案外好評だったように思います。懇親会でも…