设为首页 收藏本站
查看: 414|回复: 0

[经验分享] c++开发php5 扩展

[复制链接]

尚未签到

发表于 2015-11-17 10:56:08 | 显示全部楼层 |阅读模式
  



1,准备开发环境  
  源码安装nginx, php, mysql
  nginx安装路径: /opt/server/nginx 源码路径: /home/leon/Downloads/nginx-1.5.6
  php路径: /opt/server/php 源码路径: /home/leon/Downloads/php-5.3.10
  mysql路径: /opt/server/mysql 源码路径: /home/leon/Downloads/mysql-5.1.63
  2,开发PHP扩展
  


  a) 创建扩展工程
  cd /home/leon/Downloads/php-5.3.10/ext/
  ./ext_skel --extname=php5cpp     
  cd php5cpp/
  mv php5cpp.c php5cpp.cpp
  
  b) config.m4
  
  

PHP_ARG_ENABLE(php5cpp, whether to enable php5cpp support,
Make sure that the comment is aligned:
[  --enable-php5cpp           Enable php5cpp support])
if test "$PHP_PHP5CPP" != "no"; then
PHP_REQUIRE_CXX()
PHP_SUBST(PHP5CPP_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, PHP5CPP_SHARED_LIBADD)
PHP_NEW_EXTENSION(php5cpp, php5cpp.cpp, $ext_shared)
fi


  
  c)  php_php5cpp.h
  

#ifndef PHP_PHP5CPP_H
#define PHP_PHP5CPP_H
#define PHP_VEHICLES_EXTNAME  "PHP5CPP"
#define PHP_VEHICLES_EXTVER   "0.1"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
extern "C" {
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#ifdef ZTS
#include "TSRM.h"
#endif
}
extern zend_module_entry php5cpp_module_entry;
#define phpext_php5cpp_ptr &php5cpp_module_entry
#ifdef PHP_WIN32
#define PHP_PHP5CPP_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
#define PHP_PHP5CPP_API __attribute__ ((visibility("default")))
#else
#define PHP_PHP5CPP_API
#endif

PHP_MINIT_FUNCTION(php5cpp);
PHP_MSHUTDOWN_FUNCTION(php5cpp);
PHP_RINIT_FUNCTION(php5cpp);
PHP_RSHUTDOWN_FUNCTION(php5cpp);
PHP_MINFO_FUNCTION(php5cpp);
PHP_FUNCTION(confirm_php5cpp_compiled);
PHP_FUNCTION(cpp_test_1);
#ifdef ZTS
#define PHP5CPP_G(v) TSRMG(php5cpp_globals_id, zend_php5cpp_globals *, v)
#else
#define PHP5CPP_G(v) (php5cpp_globals.v)
#endif
#endif



  
  d) php5cpp.cpp
  

#include "php_php5cpp.h"
static int le_php5cpp;
const zend_function_entry php5cpp_functions[] = {
PHP_FE(confirm_php5cpp_compiled,NULL)
PHP_FE(cpp_test_1, NULL)
PHP_FE_END
};
zend_module_entry php5cpp_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER,
#endif
"php5cpp",
php5cpp_functions,
PHP_MINIT(php5cpp),
PHP_MSHUTDOWN(php5cpp),
PHP_RINIT(php5cpp),/* Replace with NULL if there's nothing to do at request start */
PHP_RSHUTDOWN(php5cpp),/* Replace with NULL if there's nothing to do at request end */
PHP_MINFO(php5cpp),
#if ZEND_MODULE_API_NO >= 20010901
"0.1",
#endif
STANDARD_MODULE_PROPERTIES
};

#ifdef COMPILE_DL_PHP5CPP
ZEND_GET_MODULE(php5cpp)
#endif
PHP_MINIT_FUNCTION(php5cpp)
{
return SUCCESS;
}
PHP_MSHUTDOWN_FUNCTION(php5cpp)
{
return SUCCESS;
}

PHP_RINIT_FUNCTION(php5cpp)
{
return SUCCESS;
}
PHP_RSHUTDOWN_FUNCTION(php5cpp)
{
return SUCCESS;
}
PHP_MINFO_FUNCTION(php5cpp)
{
php_info_print_table_start();
php_info_print_table_header(2, "php5cpp support", "enabled");
php_info_print_table_end();
}

PHP_FUNCTION(confirm_php5cpp_compiled)
{
char *arg = NULL;
int arg_len, len;
char *strg;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return;
}
len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "php5cpp", arg);
RETURN_STRINGL(strg, len, 0);
}
PHP_FUNCTION (cpp_test_1)
{
char *arg = NULL;
int arg_len, len;
char *strg;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return;
}
len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "php5cpp", arg);
RETURN_STRINGL(strg, len, 0);
}



  
  e) 编译安装
  phpize
  ./configure --with-php-config=/opt/server/php/bin/php-config
  make
  sudo make install
  


  f) 修改php.ini
  sudo service php-fpm stop
  sudo gedit /opt/server/php/etc/php.ini
  加入 extension=php5cpp.so
  sudo service php-fpm start
  


  


  



版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140245-1-1.html 上篇帖子: Ubuntu14-04安装redis和php5-redis扩展 下篇帖子: php5-fpm以及fcgiwrap在ubuntu下的安装方法【非原创】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表