PHP
PHP 5.3.0以降、PHPのround関数の挙動はChristian Seilerさんが提案したRFCに従って一新されています。この新しいround関数の仕様上の問題もしくはバグを見つけました。 以前の記事「PHP5.3.0alpha3のround関数の実装がPHP5.2.6と変わった」でこの新しい実装…
PHPのstrtotime関数やDateTimeクラスは、様々なフォーマットの日付文字列を解釈し、時刻として取り扱うことができます。たとえば次のような文字列を解釈することができます。 "Wednesday July 23rd, 2008"(=2008年7月23日) "first Wednesday July 23rd, 2…
直前の記事「mb_ereg_replace関数でe修飾子を使う際の注意点」で利用しているmb_ereg_search_ナントカという関数群は特徴的な関数ですが、あまり使用例を見ない関数です。今回はこの関数群の概要を紹介します。 この関数群は正規表現マッチを行うmb_ereg系関…
mb_ereg_replace関数でe修飾子を使ってevalする場合の注意点をまとめてみました。 概要 マニュアルの下記引用部にもあるとおり、mb_ereg_replace関数はe修飾子の指定があっても特にエスケープなどを行いません。 信頼できない入力に対しては、絶対に e 修正…
tz database(zoneinfo database、Olson Databaseとも)とは、世界のタイムゾーン名と、時差およびサマータイムの運用情報をまとめたファイル、もしくはそれをまとめるプロジェクト名のことです。プログラミング言語およびOSでの利用を想定して作られたもの…
うるう秒とは、地球の自転と時刻とのずれを補正するために、特定の日を1秒だけ長くしたり短くしたりして調整するものです。私たちが日常的に利用している時刻は原子時計を基準にしていますが、地球の自転する速度は僅かながら変化し続けているので、観測に基…
本日付でPHP 5.3.4がリリースされました。ChangLogを眺めたところではそれほど大きなツッコミどころは無さそうです。 ところで、このPHP 5.3.4からChangeLogにも載っていないバグ #52826 が修正されています。これは僕が報告したバグで、php -iすると嘘のス…
先週の土日にPHPMatsuriに行ってきました。ナイスなイベントでしたね。その感想はまた改めて書きますが、Nate Abeleによるセッション「Practical PHP 5.3」で触れられていたPSR-0を適当に訳してみました。これはPHP5.3の名前空間とクラス名に関する標準化の…
9月24日、25日の両日、PHPカンファレンス2010が開催されました。僕は25日のテックデイで、PHPのストリームについて発表してきました。また、最初のPHPを作った開発者であり今もPHPのコアデベロッパーであるRasmusとHipHop for PHPの開発者Scottを招いての発…
補足(2010/08/24 15:00):rename関数について言えば、同一ファイルシステム上であればrenameシステムコールを利用するのでこの問題は起こりません。さらに蛇足ですが、ファイルシステムをまたがってrename関数を利用するとコピーしてから削除することになり…
(2015/04/19追記)e修飾子はPHP 5.5からdeprecatedになっています。また、PHP7からは廃止されます。PHPのpreg_replace関数では、e修飾子が利用できます。これはPerlから輸入された機能で、置換後パターンの文字列をPHP文法に従って評価する(evalする)とい…
Perl正規表現で利用できる便利なエスケープシーケンスとして、\Qと\Eがあります。これはメタ文字の解釈を止めたり、その解釈を再開したりするものです。「man perlre」には次のような例が出てきます。 /$unquoted\Q$quoted\E$unquoted/ この正規表現は変数$u…
(2015/6/12追記)PHP7から、64bit環境であれば2GB以上の長さの文字列が扱えるようになります。やったね! PHPの文字列型は、一般には文字列長の制限が無いとされています。PHPマニュアルにも次のように書いてあります。 注意: 文字列が非常に大きくなっても…
PHP bugs #49332で指摘されているのですが、PHP5.2.10以前およびPHP5.3.0をSnow Leopard(MacOSX 10.6)でビルドしようとすると、リンク時に下記のようなエラーが出てビルドに失敗します。 Undefined symbols: "_res_9_search", referenced from: _zif_dns_get…
非常に今更ですが、「WEB+DB Press」でPHPの連載記事を書きはじめました。連載タイトルは「PHP転ばぬ先の杖」ということで、PHP初心者から中級者をターゲットに、PHPではまりやすい落とし穴や便利なtipsなどを紹介していきたいと思っています。 Vol.56掲載の…
(2010-04-24 17:40)内容を補足する意味で「グレゴリオ暦が採用された時期とプログラミング言語の対応」「ユリウス暦を扱いたい場合」を追記しました。 PHPの日付まわりの処理にバグを見つけました。1599年以前の日付の75%程度の曜日を誤判定するバグがPHP …
(4/17追記)twitter経由でタレコミがありまして、恥ずかしいミスをコッソリ直しました(32bit整数の範囲について)。どなたかわかりませんが、ありがとうございます! PHPの整数(integer型)はCのlong型をそのまま利用しています。つまり、32bit環境であれ…
先週のPHP勉強会の僕のプレゼン「64bit PHPの罠」に間違いがありました(参照:「第51回PHP勉強会@関東に参加してきました」)。全体の主張はそれほど変わりませんが、下記の通り訂正いたします。 誤:「PHPのinteger型はCのint型」「64bit環境ではPHPのinte…
(2016/04/01追記) 本バグはPHP 5.5.20以降、およびPHP 5.6.4以降で修正されています。 64bit環境のPHPで過去の曜日を調べてみたら「知らんよ」って言われました。
追記(2010-04-04):ごめんなさい、プレゼン内容に一部嘘が混ざってました。「64bit環境とPHP」も併せてご覧下さい。 第51回PHP勉強会@関東に参加して、15分ほどのプレゼンをしました。勉強会の会場は、毎度おなじみトライコーン株式会社さんでした。suzukiさ…
PHPにはctype_digitやctype_lowerなど、ctype_XXXXという関数が多数あります。本記事の話題はこれらctype関数の挙動と注意点についてです。ctype関数のマニュアルには下記のような記述があります。 これは、256 より小さな整数が指定された場合、指定した範…
PHPは他の言語と同様に、時刻を扱う際にunix epochからの経過秒数(いわゆるunix time)を利用しています。PHP5.2.6以降では、64bit環境であればunix timeも64bitに拡張されています。これで2038年問題も過去のものになるというわけです。 一方、unix timeが…
大仰なタイトルですが、約1年前の記事「PHPのsort関数は相当おかしい」の補足記事です。僕が何を根拠にPHPのsort関数(の第二引数のデフォルト値)がおかしいと思ったかを説明します。一言でいうと、PHPの全ての値とSORT_REGULAR(言い換えるとPHPの)の組み…
PHP5.3.0から実装されたSplFixedArrayというSPLクラスがあります。これはマニュアルによれば下記のようなクラスです。 SplFixedArray クラスは配列の主要な機能を提供します。 SplFixedArray と通常の PHPの配列との主な違いは、 SplFixedArray は固定長であ…
特定の日時のunixtimeが知りたくなった時って皆さんどうしてますか?例えば2009/09/26 23:00:00 JSTであれば次のワンライナーで求められます。 $ php -r 'echo mktime(23,0,0,9,26,2009);' 1253973600 いやいや、ワンライナーって言ったらPerlだろうとも思っ…
9月5日に、PHPカンファレンス2009のライトニングトーク枠でphpallについて喋ってきました。資料は下記です。 発表資料:「phpall:PHPの全バージョンの挙動を試す」(PDF) Ustream録画:http://www.ustream.tv/recorded/2107844 (他の方のLTも含んでいる動画…
第45回PHP勉強会@関東に参加して、5分ほどLTをしました。勉強会の会場は、はてな@六本木さんでした。店名がイカス。そして幹事のgusagiさん毎度ありがとうございます。 発表資料 : 「バグレポしようぜ!」(PDF) 以前の記事「PHPへのバグ報告の手順」の焼き…
何番煎じかわからないですが、PHP 5.3からは無名関数が実装されたということで、試しに使ってみました。 見なくても何となく使えるようなものだと思いますが、ドキュメントが「PHP: 無名関数 - Manual」にありますので、ざっと目を通した方がいいと思います…
Symfony Event Dispatcher とは Symfony Event DispatcherというのはPHPフレームワークであるsymfonyに含まれるライブラリで、GoF*1のObserverパターンの変種です。 このクラスは現在Symfony Event Dispatcherという名前で単体公開されていますので、symfony…
(2011/05/19追記)CentOS5のpcreパッケージについて言えば、2010年7月以降Unicode文字プロパティが有効になっているそうです。安心ですね!(via「 CentOS5.5でCakePHP1.3系のInflector::slugを正常動作させる方法 - Lism.in * blog - nekoya (id:studio-m)…