Movatterモバイル変換


[0]ホーム

URL:


BLOGTIMES

cles::blog

平常心是道
« :: »
2019/05/09

PHP の内容を AST で解析する

  php  softwareengineering  tutorial 
このエントリーをはてなブックマークに追加

PHP のファイルが静的解析したくなったので、ソースから AST を得る方法を調べてみました。
以前、Eclipse の ASTParser を使う話を書いたことがありましたが、それの PHP 版になります。

今回の作業にあたって、以下のスライドがとても参考になりました。

PHP は 7 になってから内部的に AST が利用されているため、以前よりも AST を得るのは簡単になっています。
既に以下のような extension が提供されているので、いずれかをインストールすれば大丈夫です。

今回はマニュアルが充実している前者のnikic/php-ast を入れてみることにしました。
以下、構築メモになります。

準備

基本的には全てマニュアルに書いてあります。

Linux の場合には pecl を使えば簡単ですが、Windows の場合には対応するバイナリを手動で入れる必要があります
面倒なので XAMPP を使っている場合に設定を自動的に行う bat を組んでみました。

phpast_setup.bat

cd C:\xampp\php\extcurl -s https://frippery.org/files/busybox/busybox.exe --output busybox.execurl https://windows.php.net/downloads/pecl/releases/ast/1.0.1/php_ast-1.0.1-7.3-ts-vc15-x64.zip --output php_ast-1.0.1-7.3-ts-vc15-x64.zipbusybox unzip php_ast-1.0.1-7.3-ts-vc15-x64.zip php_ast.dllbusybox grep extension=php_ast.dll C:\xampp\php\php.ini > nulif %ERRORLEVEL% == 1 ( busybox sed -e "s/^;extension=xsl/;extension=xsl\n\n#php-ast\nextension=php_ast.dll/" < C:\xampp\php\php.ini > C:\xampp\php\php.ini.new move C:\xampp\php\php.ini C:\xampp\php\php.ini.old move C:\xampp\php\php.ini.new C:\xampp\php\php.ini)del busybox.exe php_ast-1.0.1-7.3-ts-vc15-x64.zip

動作確認

今回は以下のように結果を単純に JSON に出力するようにしてあります。
種別やフラグをデコードするためには付属の ast_stub.php, util.php の内容が参考になります。

ast_json_dump.php

<?php$code = <<<'EOC'<?php$var = 42;EOC;echo json_encode(ast\parse_code($code, $version=50), JSON_PRETTY_PRINT);/*OUTPUT: { "kind": 132, //AST_STMT_LIST "flags": 0, "lineno": 1, "children": [ { "kind": 517, // AST_ASSIGN "flags": 0, "lineno": 2, "children": { "var": { "kind": 256, // AST_VAR "flags": 0, "lineno": 2, "children": { "name": "var" } }, "expr": 42 } } ]} */

    byhsur at 23:31[5年前][4年前][3年前][2年前][1年前][1年後][2年後][3年後][4年後][5年後] |
    こんな記事もあります 「静的解析 抽象構文木 php-ast
    PHP7 が正式版に
    const int *p と int * const p の違い
    ソースコードから作者を特定する研究
    Android アプリ(.apk) のセキュリティチェックをするツールが登場
    簡単な再帰下降構文解析プログラムを書いてみた
    GPL 検出ツールと プロプライエタリソフトウェア
    Coverity が Android の評価結果を公表
    Eclipse の ASTParser を単体で使う
    JJmltはjava5に対応していないようだ
    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10954
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL:Yahoo! JAPAN IDでログイン

    « :: »
    Copyright © 2004-2023 by CLES All Rights Reserved.
    サイト内検索
    検索ワードランキング
    へぇが多いエントリ
    閲覧数が多いエントリ
    1 .アーロンチェアのポスチャーフィットを修理(99701)
    2 .年次の人間ドックへ(99110)
    3 .福岡銀がデマの投稿者への刑事告訴を検討中(99103)
    4 .三菱鉛筆がラミーを買収(98708)
    5 .2023 年分の確定申告完了!(1つめ)(98679)
    最新のエントリ
    cles::blogについて
    誰が書いてる?
    最近行った場所
    サイトポリシー
    タグ一覧
    検索ワードランキング

    Referrers

      Powered by CLES
      Nucleus CMS v3.31SP3/w memcached
      21376887(W:7512 Y:1720 T:0986)
      cles::blogのはてなブックマーク数
      benchmark


      [8]ページ先頭

      ©2009-2025 Movatter.jp