質問

PHP で書かれたパフォーマンス重視のルーチンがあり、パフォーマンス向上のために C++ に移植したいと考えています。C++を使用してプラグインや拡張機能などを作成し、PHPからそれとインターフェースする方法はありますか?実際の PHP ソースを手動で編集せずに?

役に立ちましたか?

解決

私は次の助けを借りて C++ で PHP プラグインを作成しました。 スイグ. 。実行可能ですが、SWIG コンパイル サイクルに慣れるまでに時間がかかるかもしれません。から始めることができます PHP の SWIG ドキュメント.

アップデート
@therefromhere が述べているように、この本を入手することを強くお勧めします。 PHP の拡張と埋め込み. 。オンラインで見つかるドキュメントはほとんどありません (少なくとも、私が PHP プラグインを作成した 2008 年末から 2009 年の初めにはドキュメントはありませんでした)。私はすべてを本に頼らなければなりませんでした。ただし、サンプル コードを見つけるのに Google コード検索が役立つ場合もあります。

他のヒント

として リーマスは言う, 、Zend API を使用して PHP を C/C++ で拡張できます。リンクされたチュートリアル サラ・ゴーレモン 良いスタートであり、この本は PHP の拡張と埋め込み 同じ著者によるこの主題については、さらに詳しく説明されています。

ただし、これらの両方 (およびオンラインで見つけた他のほとんどすべて) は C に焦点を当てており、C++ 拡張機能を機能させるために必要な調整については実際にはカバーしていないことに注意してください。

の中に config.m4 C++ 標準ライブラリに明示的にリンクする必要があるファイル:

PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY(stdc++, 1, PHP5CPP_SHARED_LIBADD)

すべての C++ ライブラリのコンパイル チェックは、 config.m4 ファイルには C++ ライブラリをリンクする必要もあります。

PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,,
[
  AC_MSG_ERROR([lib $LIBNAME not found.])
],[
  -lstdc++ -ldl
])

編集 - g++を指定する方法は次のとおりです。

最後に、拡張機能を構築するときに C コンパイラー/リンカーではなく C++ を選択するには、 6位 パラメータを PHP_NEW_EXTENSION() あるべきです "yes". 。つまり:

PHP_NEW_EXTENSION(your_extension,
                  your_extension.cpp, 
                  $ext_shared, 
                  ,
                  "-Wall -Werror -Wno-error=write-strings -Wno-sign-compare",
                  "yes")

から PHPビルドシステムマニュアル, 、パラメータは次のとおりです。

  1. 拡張機能の名前
  2. 拡張機能の一部であるすべてのソース ファイルのリスト。
  3. (オプション) $ext_shared, 、 PHP_ARG_WITH() が呼び出されたときにconfigureによって決定された値
  4. (オプション) 「SAPI クラス」。特に CGI または CLI SAPI を必要とする拡張機能にのみ役立ちます。それ以外の場合はすべて空のままにしておく必要があります。
  5. (オプション) 拡張機能の構築中に CFLAGS に追加されるフラグのリスト。
  6. (オプション) ブール値。「yes」の場合、$CC の代わりに $CXX を使用して拡張機能全体が強制的に構築されます。

gcc の代わりに g++ をコンパイラー/リンカーとして設定するためのconfigure スクリプトを取得する方法が見つからなかったので、最終的に sed コマンドで Makefile をハッキングして、bash ビルド スクリプトで検索置換を実行することになりました。

phpize
./configure --with-myextension
if [ "$?" == 0 ]; then
# Ugly hack to force use of g++ instead of gcc
# (otherwise we'll get linking errors at runtime)
   sed -i 's/gcc/g++/g' Makefile
   make clean
   make
fi

おそらく、 オートメイク このハックを不要にするコマンド。

PHP自体緩く関連のライブラリのコレクション。書く方法チュートリアルの http://devzone.zend.com/article/1021するを参照してください。あなた自身ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top