2009-04-01 20 views
20

CやC++のコードを記述してバイナリにコンパイルし、それらのバイナリをPHPで使用することはできますか? CとC++を使ってPHPライブラリを書くことも可能ですか?PHPのC++バイナリを使用することは可能です

もしそうなら、どうすればいいですか?

答えて

13

PHPはモジュール式で、「エンジン」と多くの拡張機能で構成されています。 「標準」拡張)、一部はオプションです。コンパイルすることも、動的にロードすることもできます(php.iniの設定またはdl()関数を使用)。

APIを習得したい場合は、C/C++で独自のPHP拡張モジュールを簡単に作成できます。 "hack the Zend Engine"のドキュメントを参照してください。

7

php内でC++コンパイル済みコードを使用するには、system()関数を使用し、オペレーティングシステム経由でプログラムを呼び出します(コマンドラインと同じように)。

+2

なぜこれがダウン投票になりましたか?それは実現可能で、問題を解決するかもしれません!ダウンボートが削除されました。 – karim79

+2

CとC++を使ってPHPライブラリを書くことは可能ですか?本当に答えはsystem()コールですか? ;)) – nothrow

+1

私は、別々のプログラムがライブラリよりもコードを共有する良い方法であるという議論を見ました。それはある状況下でも意味をなさないことがあり、プロセスの作成は、十分にうまくいくためには、Unixでは十分軽いです。 – RBerteig

3

C++でphp拡張を書くことは可能です(ただし、Cファサードも書く必要があります)。それは簡単なことではありません。私は、あなたがPHPコードを調べる代わりに尋ねると、CやPHPが内部でどのように動作しているかに精通していないこと、そしてそれが悪いドキュメントなので、 Cでライブラリを書くには

EDIT:zendに関する基本的なチュートリアルがあります。 http://devzone.zend.com/node/view/id/1021私はそれを調べているので、PHPの時間からドキュメントが変更されている可能性があります:)

0

PHPは、あらかじめ構築されたライブラリから関数の多くを呼び出しています。あなた自身のライブラリがCまたはC++で書かれている場合は、PHPバインディングを作成して他のPHP関数と同様に残りのPHPコードから呼び出すことができます。

たとえば、Mcrypt関数を使用すると、libMyCryptライブラリのPHPラッパーになります。

興味深いことに、「エンタープライズアプリケーションでは本当に必要だからです」あなたが必要とするPHPの現在のライブラリセットには何が欠けていますか?

+1

時には、たとえば並列処理が必要なアルゴリズムがあり、パフォーマンスが大きな問題で、PHPでそれを使用したい場合は、C言語で記述してPHPで使用することができます – Pooria

3

ほとんどすべての言語でエクステンションを書くことができ、動的にリンクされたライブラリを介してPHPで使用できます。

2

PHPがロードできる共有オブジェクト拡張をビルドできます。これに関する短いチュートリアルがありますhttp://devzone.zend.com/node/view/id/1021

+0

リンクが見つかりません。これは私が期待していることです。 – 2vision2

1

あなたのコードをC/C++で記述し、EXEファイルにコンパイルすることができます。その後、exec()を呼び出すことができます。 PHPから取得してコードを実行します。

11

ライブラリをラップするための一般的なツールであるSWIGをチェックして、さまざまな言語から呼び出すことができます。 PHPはSWIGとPerlやLua(私が個人的に使ったターゲット)と同様にサポートされています。SWIG websiteで機能リストから引用:

  • CLISP
  • CFFI

    • アレグロCL
    • C#
    • SWIGは現在、18個の異なる標的 言語のラッパーコード を生成します

    • チキン
    • ガイル
    • ジャワ
    • ルア
    • のModula-3
    • MzSchemeの
    • OCAML
    • オクターブ
    • パール
    • PHP
    • パイソン
    • R
    • ルビー
    • のTcl
    • UFFI

    これに加えて、解析ツリー は、XMLとLisp S式としてエクスポートすることができます。実験的な作業は、Pikeモジュールでも利用可能な です。

    、その機能の一部ごとの言語のラッパージェネレータにバックエンドのサポートに依存しているが、一般的に、それは機能の内と外のすべてのプレーン・データ値の型を渡すためのラッパーを使用して簡単に提供します。ターゲット言語に概念がある場合、通常はオブジェクトモデルもマップできます。

    関連する問題