我有一个PHP编写的性能密集型程序,我想移植到C ++的性能提升。 有什么办法编写使用C ++和界面进行自PHP一个插件或扩展还是什么? 无需手动编辑实际的PHP源?
Answer 1:
我用C ++写一个PHP插件的帮助下痛饮 。 这是可行的,但它可能需要一段时间才能习惯的SWIG编译周期。 你可以用开始SWIG文档的PHP 。
更新
正如@therefromhere已经提到的,我非常建议你买到书扩展和嵌入PHP 。 几乎没有文档在网上找到(至少有在2008年底,2009年初,当我做我的PHP的插件是不是)。 我不得不依靠这本书的一切。 虽然有时谷歌代码搜索是寻找示例代码很有帮助。
Answer 2:
由于莱姆斯说 ,你可以用C / C ++使用Zend API扩展PHP。 通过链接的教程萨拉Golemon是一个良好的开端,这本书扩展和嵌入PHP由同一作者涵盖了更详细的主题。
不过,值得注意的是,这两个(和几乎一切我在网上找到的)焦点定位在C并不能真正覆盖你需要得到C ++的扩展工作的一些调整。
在config.m4
的文件,你需要明确地链接到C ++标准库:
PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY(stdc++, 1, PHP5CPP_SHARED_LIBADD)
任何C ++库编译检查中config.m4
文件还需要链接C ++ lib目录下:
PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,,
[
AC_MSG_ERROR([lib $LIBNAME not found.])
],[
-lstdc++ -ldl
])
编辑 - 这里是如何确定G ++:
最后,而不是最少,以选择C ++而不是建设的延长,6个参数来当C编译器/连接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构建系统手册 ,参数是:
- 扩展的名称
- 所有的源文件,这是扩展的一部分名单。
- (可选)
$ext_shared
,其通过配置来确定当PHP_ARG_WITH()被调用一个值 - (可选)“SAPI类”,仅对于需要的CGI或CLI SAPIs具体扩展有用的。 它应该在所有其他情况下是空的。
- (可选)标志的列表,以在构建扩展被添加到CFLAGS。
- (可选)一个布尔值,如果“是”,将迫使整个扩展使用$ CXX代替$ CC来构建。
我不能工作了如何获得配置脚本来设置G ++的编译器/连接器,而不是GCC,所以结束了黑客的Makefile用sed命令做在我的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
大概有一个automake的命令,这将使这个技巧是不必要的。
Answer 3:
PHP本身松散的联系库的集合。 见http://devzone.zend.com/article/1021的教程如何编写你自己的。
文章来源: Extending PHP with C++?