2009-09-16 10 views
7

C#でPHPファイルを解析するための要件が​​あります。私たちは本質的に、PHPファイルをアップロードするために他の国の開発者の一部を必要とし、一度アップロードしたらPHPファイルをチェックし、すべてのメソッドとクラス/関数などのリストを取得する必要があります。C#でPHPを高速に解析する

私は正規表現関数がクラスなどに属している場合にはトレーニングができないので、PHPファイルを解析してその関数を吐き出すというものが既に存在するのかどうか疑問に思っていました(私は完全なAST実装を書くことを避けようとしています) 。

誰もが考えていますか?私はCoco/Rを見ましたが、PHP文法ファイルが見つかりませんでした。私は.NET 2.0とC#を使用しています。

答えて

18

なぜC#でこれを行うのですか? PHPでは、これは簡単ではありません。 token_get_all()関数を使用すると、PHPファイルがレクセットのストリームに分割され、有限状態マシンを記述することによってクラスとメソッドのリストを決定するために使用できます。

あなたは何をしても、正規表現でこれを試してはいけません。それは信じられないほど退屈でエラーを起こしやすいでしょう。

編集:これを行うための3つの基本的な可能性があります。

  1. PHPでそれを行います。これは最速の(開発する)最も簡単なオプションです。
  2. コマンドラインPHPスクリプトを実行して、これを行うか、C#プログラムで解釈できる一連のトークンを生成します。これは次に簡単です。
  3. Phalanger(PHPのポート)を.Netフレームワークに使用します。これはまだすべての.Netコードですので、これは管理にとってより美味かもしれません。または
  4. Java VMにPHPのポートQuercusを使用します。

他には、PHPパーサー(多くの作業)を書くことや、信頼性の低いサポートの悪夢となる本当に薄れた正規表現を使用することが含まれます。

は、PHPのはず「セキュリティ上の欠陥」を気にするいくつかの問題があります。

  1. 任意のフレームワークや技術スタックは、セキュリティ上の欠陥を持つことができます。あなたのシステム管理者だけが.NetをJavaよりも効果的に許可するという事実は、不合理な偏見を示しているだけです。私は長年のJava開発者としてこう言っています。Java、.Net、PHPにはすべてセキュリティ上の欠陥があります。
  2. PHPをコマンドラインから実行して、HTTP要求を処理しないようにすることで、セキュリティ上の欠陥の問題を基本的にゼロにすることができます。
  3. あなたは(ボックスへのアクセス権を持つ人からの)内部セキュリティの脅威を心配している場合は、単にだけで、あなたのプログラムが入っているグループによって実行可能にPHP CLIが実行可能な制限が。
+1

こんにちは、 お返事ありがとうございます。残念ながら、この製品はC#で書かれていますが、ファイルをウェブサーバーにアップロードするだけですが、アップロードする機能を文書化する必要があります。 PHPをローカルで実行することはできません:( –

+1

なぜPHPをローカルで実行できないのですか?ウェブサーバーは必要ありません。PHP.exeなどにスクリプトを送り、コンソール出力をC#アプリケーションに取り込むだけです。 –

+0

私たちのシステム管理者は、PHPを実行することについて嫌悪感を持っています.PNAMEのセキュリティ上の欠陥を心配しています。 –

1

あなたがかもしれませんあなたの目的のためにctagsを使用することができます。 CタグはC言語で書かれているので、どのようにC#と統合するかはわかりません。

また、パーサを知っている場合は、PHPソースの文法ファイルを調べることができます。特にzend_ini_parser.yおよびzend_language_parser.yである。

最後に、最善の解決策ではありませんが、となる可能性があります。 PHPの文法は、クラスや関数に関してかなり厳しいものです。少しだけ状態を追跡する必要があるので、関数が属するクラスを知ることができます。

関連する問題