- blogs:
- cles::blog

PHP の内容を AST で解析する



PHP のファイルが静的解析したくなったので、ソースから AST を得る方法を調べてみました。
以前、Eclipse の ASTParser を使う話を書いたことがありましたが、それの PHP 版になります。
今回の作業にあたって、以下のスライドがとても参考になりました。
PHP は 7 になってから内部的に AST が利用されているため、以前よりも AST を得るのは簡単になっています。
既に以下のような extension が提供されているので、いずれかをインストールすれば大丈夫です。
- nikic/php-ast: Extension exposing PHP 7 abstract syntax tree
- sgolemon/astkit: Parser kit for PHP7 ASTs
今回はマニュアルが充実している前者の nikic/php-ast を入れてみることにしました。
以下、構築メモになります。

Windows 10 でコマンドプロンプトから MySQL (MariaDB) を使うと文字化けする?


Windows 10 のコンソール上から MySQL (MariaDB) にログインすると、文字コードをきちんと CP932 や SJIS にしていても日本語が文字化けすることがあるようです。
「することがある」とちょっとぼやかした書き方なのは、同じバージョンの Windows 10 と MySQL (MariaDB) の組み合わせで導入しても文字化けする端末とそうでない端末があり、僕が調べた限りでは再現条件が不明です。確認方法は簡単で、以下のようなテーブルを使わない SQL を打ち込んでみるだけです。嘘のような話ですが、こんな単純なSQLですら文字化けします。
いろいろ調べてみると Windows 10 1809 のコンソールには以下のバグがあり、今のところ Fix されていないようです。この指示に従って文字化けしているマシンの cmd.exe の設定をレガシーコンソールモードにしてみると、文字化けが解消することが確認できました。こういうのが OS のバグというのは困ったものです。
バージョン 1809 の OS 上でコンソール出力が正しく表示されない問題について
本問題は対象のバージョンの OS で導入された新しいコンソールの不具合に起因して発生しています。
出力ストリームに紐づけられた内部的なコードページ テーブルの初期化処理に不足があり、内部処理でマルチバイト文字を正しく認識することができず、正しくコンソール出力を行えない問題が発生します。
2 . 年次の人間ドックへ(94918)
3 . 福岡銀がデマの投稿者への刑事告訴を検討中(94840)
4 . 三菱鉛筆がラミーを買収(94513)
5 . 2023 年分の確定申告完了!(1つめ)(94486)