用C+扩展PHP+;? 我有一个性能密集的例程,它是用PHP编写的,我想把它移植到C++中,以提高性能。有没有办法用C++编写一个插件或扩展,或者用它和PHP接口?没有手动编辑实际的PHP源代码?
PHP本身就是一个松散相关库的集合。请参阅教程,如何编写自己的。 < P>我在C++中编写了一个PHP插件。这是可行的,但可能需要一段时间才能适应SWIG编译周期。你可以从这个开始 更新用C+扩展PHP+;? 我有一个性能密集的例程,它是用PHP编写的,我想把它移植到C++中,以提高性能。有没有办法用C++编写一个插件或扩展,或者用它和PHP接口?没有手动编辑实际的PHP源代码?,php,c++,plugins,php-extension,Php,C++,Plugins,Php Extension,PHP本身就是一个松散相关库的集合。请参阅教程,如何编写自己的。 < P>我在C++中编写了一个PHP插件。这是可行的,但可能需要一段时间才能适应SWIG编译周期。你可以从这个开始 更新 正如@therefromhere所提到的,我强烈建议你买这本书。在网上几乎找不到任何文档(至少在2008年末、2009年初我做PHP插件时没有)。我一切都得依靠这本书。尽管有时Google代码搜索有助于查找示例代码。As,但您可以使用Zend API使用C/C++扩展PHP。作者的链接教程是一个很好的开端,同一
正如@therefromhere所提到的,我强烈建议你买这本书。在网上几乎找不到任何文档(至少在2008年末、2009年初我做PHP插件时没有)。我一切都得依靠这本书。尽管有时Google代码搜索有助于查找示例代码。As,但您可以使用Zend API使用C/C++扩展PHP。作者的链接教程是一个很好的开端,同一作者的书更详细地介绍了这个主题 <>但是,值得注意的是,这两个(以及我在网上找到的几乎所有其他东西)都集中在C上,并且不真正地覆盖C++扩展的工作需要的一些调整。 <> > <代码> COMFI.M4< /Cord>文件中,需要显式链接到C++标准库:
PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY(stdc++, 1, PHP5CPP_SHARED_LIBADD)
<> >任何C++库在PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,,
[
AC_MSG_ERROR([lib $LIBNAME not found.])
],[
-lstdc++ -ldl
])
编辑-下面是如何指定g++:
最后,尤其是,在构建扩展时选择C++而不是C编译器/链接器,<强>第六参数>代码> PHPNeNeXExpUnsiple()/Cube >应该是代码>“是”< /COD>。即:
PHP_NEW_EXTENSION(your_extension,
your_extension.cpp,
$ext_shared,
,
"-Wall -Werror -Wno-error=write-strings -Wno-sign-compare",
"yes")
从中,参数为:
$ext\u shared
,调用PHP\u ARG\u WITH()时由configure确定的值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
想必有一个命令会使这种攻击变得不必要。
值得注意的是,这里有一个非常类似的问题:用这种方式设置编译器标志是一种不好的做法。这使得不可能使用不同的编译器。要么使其依赖于编译器,要么将其提供给用户。该选项可用于常见选项,如-D。此外,很可能,WALW和Werror会制造麻烦。PHP是用C和C++编写的,在某些情况下,有点严格,所以可能会失败PHP报头。我们在5.4中解决了很多问题,但是一些C++警告可能仍然会发生。@约翰尼斯足够公平,这个项目只是内部使用,所以这对我来说不是问题。如果有一天你切换到一个不同的平台或编译器,它可能成为一个问题。例如,叮当声现在很流行。我主要是为将来的开发者添加的,点击这个页面:-)