PHP
筆者の周囲だけかもしれませんが、さいきんGoogle App Engine Standard Environment(以下GAE/SE)が再注目されつつあるように思います。今回筆者もgVisorベースのGAE/SE PHP 7.2環境に触ってみたので、その内容を紹介します。 GAE/SEとは GAE/SEは元祖PaaS…
本稿は私が前職の技術ブログで執筆した記事「そのis_numeric()は適切ですか?」を改題・再編集して掲載するものです。前職には許可を取ってあります*1。 本稿ではPHPの関数is_numeric()の使いどころについて問題提起をしてみます。 is_numeric関数とは さて…
エイプリルフールなので(?)、PHPの日付処理の細かい挙動がひっそり変わった話の解説をします。ちなみに本稿はSlackグループ「PHPユーザーズ」の#randomチャンネルでの議論をまとめ直したものです。議論のきっかけを下さったmsngさん、tadsanさん、do_akiさん…
なんとなくPHPマニュアルを眺めていたところ、リフレクション機能に下記のようなメソッドを見つけました。 ReflectionMethod::getPrototype — メソッドのプロトタイプを (存在すれば) 取得する http://php.net/manual/ja/reflectionmethod.getprototype.php …
2015年12月にPHP 7.0.0がリリースされてから2年と少し経ってしまいました。今月頭には無事PHP 7.2.0がリリースされたわけですが、皆様の参加プロジェクトのPHP 7導入は進んでいるでしょうか?まだPHP 5系なんだよね、という方もPHP 7が高速だという噂くらい…
PHP Advent Calendar 2017の3日目です。公開が遅くなってしまいました、ごめんなさい。 筆者はphp-timecopというPHP拡張を5年間ほどメンテナンスしています。このPHP拡張はCで書かれているのですが、Travis CIやAppVeyorなど複数のクラウドCIサービスを組み…
10月8日に開催されたPHPカンファレンス2017でLT発表をしました。以下が発表資料です。 PECLは登録までの敷居が高そうな印象があったので、以前は自作のPHP拡張を登録するなんて考えもしなかったのですが、やってみたら案外あっさり登録できた、という内容を…
PHP+PDO+MySQLの環境では、PHP-MySQL間の通信についてzlibを使った圧縮プロトコルを利用することができます。この機能は、DBサーバのCPU利用率に十分余裕があり、かつPHP-MySQL間のネットワーク帯域が逼迫している状況で有用です。 MySQLの圧縮プロトコルと…
筆者はPHPの現在時刻を上書きするPHP拡張モジュールphp-timecopを開発しているため、PHPの時間がらみのテストを世間一般の人より多く書いていると思います。テストケース中でusleep関数を多用しているのは世界中でも筆者くらいかもしれません。ところで、先…
かれこれ5年ほどメンテしている拙作のPHP拡張「php-timecop」ですが、このたびPECLに登録しました(PECL :: Package :: timecop)。 PECLというのはPHP本体に含まれないPHP拡張を提供する公式のリポジトリです。PECLのアカウントは承認制になっており、誰で…
表題の通りですが、PHPの特定のバージョンにおいて、生成したDateTimeオブジェクトに対して時刻の操作を行うと期待と1時間ずれてしまうことがあります。 format('c')); // string(25) "1970-01-01T00:00:00+00:00" $dt->modify('+0 days'); var_dump($dt->fo…
プログラムを書いていると、入力値が辞書に含まれているかを調べたいようなことがあります。たとえば、ユーザーに都道府県名を入力させて、それが正しい都道府県名であるかどうかを調べたい、というようなことがあるかもしれません。このような内容をPHPで書…
PHPのシンボルテーブルというのはC実装のレベルの用語で、その時点で有効な変数テーブルのことを指します。つまり、グローバルスコープならグローバル変数を管理する変数テーブル、関数スコープならローカル変数を管理する変数テーブルの意味になります。 今…
最近のWindows 10にはLinuxバイナリをそのまま動かすような仕組みが導入されています。これは Windows Subsystem for Linux (WSL) とか Bash on Ubuntu on Windows (BoW) などと呼ばれているもので、VM実行でなくWindowsネイティブでLinuxを動かすという意欲…
日付関連のテストケースを書いていたら、ロサンゼルスの1970年4月1日0時はサマータイムではないけれど、2012年4月1日0時はサマータイムであることに気づきました。何かの間違いじゃないかと思って改めて調べてみたところ、ロサンゼルスで4月1日がサマータイ…
本日はエイプリルフールなので、ウソでも本当でも誰も困らないPHPのバグの話をします。 PHP 7.1.0からPHPのDateTimeクラスでマイクロ秒の扱いを強化しているようで、挙動やコードの変更がチラホラ見受けられます。(参考:「PHP 7.1からDateTimeが現在時刻の…
CLI版のPHPをgdb上で動かしつつ、内部的なデータ構造を覗き見ることができるようなDockerイメージを作ってDocker Hubにアップロードしました。Docker環境さえあればすぐに動かすことができます。 このイメージを動かせばCのコードを書かなくてもPHP内部のデ…
昨日12月11日に第七回闇PHP勉強会を開催いたしました。私を含め発表者6人ということで、とても盛り上がった勉強会になりました。発表者の皆さま、またご参加いただいた皆さま、本当にありがとうございました。また会場提供いただいたピクシブ株式会社さまに…
筆者がPHPをさわり始めたころ、「PerlのコレはPHPではどうやるんだろう?」と思うことが頻繁にありました。一部の疑問については解説を見つけたり自分でソースコードを読んだりして解決したものの、考えるのをやめてしまったものもあります。その一つが正規…
(2016/10/5 20:40 追記)誤解を招いている部分がありそうなので文末に補足を追記しました。巨大なプログラムを食わせただけでPHPが死ぬわけではありません。 毎度おなじみ、意図的に重箱の隅をつついてみたよって話です。あるPHPプログラムを実行したら次の…
昨日8/27にLLoTの「Language Update」の10分枠でPHPの話をしました。発表資料は以下です。 会場にPHPの人はほとんどいない前提だったので、他の言語の人に「最近のPHPってこんな感じですよ」をお伝えするつもりで資料作成しました。言いたかったことはだいた…
(7/3 14:05追記)Javaに関する記述について誤認があったので盛大に書き換えました。Java 6、Java 7、Java 8それぞれで実装が変わっていたようです。(7/13 23:55追記)本記事中ではroundを四捨五入と言い切ってしまっています。これは筆者がC99のroundを基…
自作のPHP拡張であるphp-timecopをPHP 7に対応させてみました。この機会に改めてphp-timecopの紹介をしてみます。 php-timecopとは php-timecopというのは筆者が4年ほど前に作ったPHP拡張で、現在時刻に紐付いた値を返すPHP関数について、基準となる現在時刻…
(2016/01/01 02:20追記)mbstring.func_overloadの章を盛大に書き換えました。なぜか廃止されたと思い込んでたんですが、特に廃止もされてなくて、PHP 7でも動くことは動きます。ただ、仕組み上strlenだけ言うことを聞かなくなっていますので、使い道として…
このエントリは闇PHP Advent Calendar 2015の23日目です。 先日の記事「PHPのインターン化文字列とは何か」でインターン化文字列について紹介しましたが、記事だけでは実際にどう使われているかピンと来なかった方も多かったかもしれません。今回、PHP 7.0.1…
このエントリは闇PHP Advent Calendar 2015の14日目です。 本稿では、PHP7のzend_string構造体導入によるメリットの話をします。 PHP5とPHP7の文字列型の扱い PHP5では、文字列型の変数は次のようにメモリに割り当てられます(横幅いっぱいが8バイト)。 文…
このエントリは闇PHP Advent Calendar 2015の11日目です。 strdumperというPHP拡張モジュールを作りました。 現時点では、この拡張モジュールは下記の3つの関数を実装しています。 str_dump void str_dump(mixed $var) $varが文字列型だった場合に、詳細の情…
12/6のGo Conference 2015 WinterでGoでPHP拡張モジュールを書いたよ、という内容のLTをしてきました。 ざっくり言うと、Goって言ってもCのレベルに落ちてくれば連携なんて簡単でしょって思ってたけど、GoもPHP拡張もビルドプロセスが隠蔽されてるので、落と…
このエントリは闇PHP Advent Calendar 2015の3日目です。なぜか@do_akiさんによる4日目の記事「ZEND_TICKS と tick 関数」を読んだ後で書いています。 本稿では、あまり日本語での説明を見たことがないPHPのインターン化文字列(interned strings)について紹…
このエントリは闇PHP Advent Calendar 2015の2日目です。3日目までは僕が書く予定ですが、4日目以降の援軍を絶賛募集中です。 PHPの+演算子で文字列連結できないか? PHPの+演算子は算術加算の演算子です。つまり、オペランドを整数または浮動小数点数として…