您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 使用C++11开发PHP7扩展
  所属分类: PHP
  开发工具:
  文件大小: 4mb
  下载次数: 0
  上传时间: 2019-03-04
  提 供 者: danyi******
 详细说明:1. PHP 可以用 C++ 扩展实现多线程 2. PHP-X 支持 Windows 平台,可以开发Windows的PHP扩展 3. 程序中大量运算的逻辑可以改为 C++ 扩展实现 4. 使用 PHP-X 开发商业软件,避免源码泄漏PHP的扩展加载过程 1.zend引擎的 php load extension函数 2.加载并执行So中 get module函数,返回 zend module entry 3. struct中设置了M(R)N|T、M(R) SHUTDOWN4个函数指针 4.执行 zend startup module ex函数启动扩展 5.PHP扩展加载依赖gibc的d库,是标准的 Linux动态链接库 if (type = MODULE_ PERSISTENT)i extension dir INI STR("extension dir"); extension dir PG(extension dir) if (type = MODULE_TEMPORARY)i error type E WARNING; else t error type E CORE WARNING; / Check if passed filename contains directory separators * if (strchr(filename,'/')!= NULL strchr(filename, DEFAULT SLASH)!=NULL)[ / Passing modules with full path is not supported for dynamically loaded extensions * if (type = MODULE_ TEMPORARY)( php error docref(NULL, E_WARNING, " Temporary module name should contain only filename") turn FAIlure ibpath estrup(filename) else if (extension dir & extension dirle]t int extension dir len =(int)strlen(extension dir); if (IS SLASH(extension dir [extension dir len]))( spprintf(&libpath, 0,%s%s", extension dir, filename );/ SAFE * spprintf(&libpath, 0,%s%c%s", extension dir, DEFAULT SLASH, filename);/* SAFE * / load dynamic symbol */ handle DL LOAD(libpath) if ( handle)[ #ifdef PHP WIn32 char *err GET DL ERRORO) f(err&&(*er!='\0"){ php error docref (NUll, error type, Unable to load dynamic library %s-%s", libpath, err) LocalFree(err) f else t php error docref (NUll, error type, Unable to load dynamic library %s-%s", libpath,"Unknown reason") #else php error docref(NUll, error type, Unable to load dynamic library %s-%s", libpath, GET DL ERRORO) GET DL ERROR O;/ free the buffer storing the error */ #endif efree (libpath) return FAIlUre efree (libpath) get module =(zend module entry *(*)(void)) DL FETCH SYMBOL(handle,"get module"); Some oS prepend to symbol names while their dynamic linker k does not do that automatically. Thus we check manually for get module. * if (!get module)i get module =(zend module entry *(*)(void))DL FETCH SYMBOL(handle,"get module"); if (!get module) f if (DL FETCH SYMBOL(handle, zend extension entry") DL FETCH SYMBOL(handle, " zend extension entry" ))t DL UNLOAD(handle); php_error_docref(NULL, error_type,"Invalid library (appears to be a Zend Extension, try loading using z return FAILURE, DL UNLOAD(handle) php error docref(NUll, error type,"Invalid library (maybe not a Php library) %s", filename ); return FAIlUre module entry get module if ((module entry zend register module ex(module entry )== NULl)[ DL UNLOAD(handle) return FAILUre if((type =MODULE TEMPORARY start now )& zend startup module ex(module entry)==FAILURe)[ DL UNLOAD (handle) return FAILURE j if ((type = MODULE TEMPORARY start now )&& module entry->request startup func)f if (module entry->request startup func(type, module entry->module number)== FaIlure[ php error docref(NULl, error type, Unable to initialize module %s", module entry->name) DL UNLOAD(handle) return FAIlure return SUCCESS; 创建PHP的扩展工程 1.扩展骨架生成工具: ext skel 2.编辑 config,n4 3.修改 extension. h头文件定义扩展的函数 4.修改 extension.c源文件,实现函数的逻辑 5. phpize、 configure、make、 make install 6.建议:参考其他扩展的源码 编写PHP扩展-基本类型 zvaL a3 Sa=1234; ZVAL_ LONG(&a, 1234); sb=1234.56; zval b ZVAL DOUBLE(&b, 1234.56) sc= hello wor ldI zvaL ci ZVAL_STRING(&c,"hello wor ld") sd= array o: zval d se= false; array_init(&d); zval ej ZVAL BOOL (&e, o) 编写PHP扩展-类型推断 zval xvalue is_int(Svalue); Z-TYPE_P(value)== IS_LONG; is_float(Svalue); Z TYPE P(va lue) IS STRING is string(svalue) Z TYPE P(value)== IS ARRAY is_array(Svalue) Z TYPE P(value)== IS DOUBLE is_bool(Svalue); Z TYPE P(value) IS TRUE is object(Svalue) Z TYPE P(value) 工 S FALSE Z TYPE P(value)== IS_OBJECT
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: c++开发php扩展
 输入关键字,在本站1000多万海量源码库中尽情搜索: