加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

windows下用c写php扩展(加密解密php源代码)(1)

发布时间:2023-01-30 13:22:46 所属栏目:PHP教程 来源:
导读:  首先用hello world试手一下。

  下载php源码包,ext目录就是扩展目录了里面有2个重要的文件是ext_skel以及ext_skel_win32.php.

  下载cygwin.有了这个就可以方便的在windows下创建php扩展了。

 
  首先用hello world试手一下。
 
  下载php源码包,ext目录就是扩展目录了里面有2个重要的文件是ext_skel以及ext_skel_win32.php.
 
  下载cygwin.有了这个就可以方便的在windows下创建php扩展了。
 
  下载中。。。
 
  下载完后用php ext_skel_win32.php --extname=hello来编译生成我们的扩展开发目录hello
 
  然后开始写测试程序hello world
 
  在hello.c文件里添加函数定义以及函数注册语句:
 
  函数注册语句:const zend_function_entry hello_functions[] = {
 
  PHP_FE(confirm_hello_compiled,NULL)
 
  PHP_FE(sayHello,NULL)//这句是我们手动添加的
 
  {NULL, NULL, NULL}
 
  };
 
  函数定义:PHP_FUNCTION(sayHello){
 
  php_printf("Hello C extension");
 
  }
 
  好像说是一定要以PHP_FUNCTION出现的宏形式,因为如果直接裸写c代码可能会发生命名冲突或是其他的冲突。
 
  然后在php_hello.h里面添加函数声明语句:PHP_FUNCTION(sayHello);
 
  写好测试程序,编译结果出现../main/config.w32.h': No such file or directory
 
  网上查了一下,好像是要下载额外的包。。。麻烦啊
 
  将这两个包放在一起,我把它们放在win32/build目录下
 
  然后执行php源码包根目录下的buildconf.bat(最好在命令行运行,不然显示结果会一闪而过)
 
  然后把bison.exe(在刚下载的包里面)所在的目录设置为环境变量,再运行configure.bat。完后就生成/main/config.w32.h这个文件了。
 
  然后再次编译刚才hello项目结果出现一大推错误。
 
  形如:..\..\main\streams/php_stream_transport.h(85) : error C2143: syntax error : missing ')' before '*'
 
  ..\..\main\streams/php_stream_transport.h(85) : error C2081: 'socklen_t' : name in formal parameter list illegal
 
  网上说是由于找不到宏定义才会这样,那应该是socklen_t这个宏没定义了,但是它具体的宏定义应该是怎么样的呢,总不能随便写一个吧。所以打开\main\streams/php_stream_transport.h发现应该是个类型别名,而且是个int ,因为有socklen_t addrlen;addrlen按字面应该是存储长度的值。
 
  所以在这个文件中添加typedef int socklen_t;保存
 
  在编译刚才的项目,错误少了很多,但是还有7个,经检查发现是输入了中文符号。改正再编译。。。还有一个错误:
 
  LINK : fatal error LNK1181: cannot open input file "php5ts.lib"
 
  于是将寻找php5ts.lib这个文件并将它放到项目目录下或是VC6 lib文件默认搜索目录下也可以。找啊找啊找。。。
 
  tmd,用windows搜索找了好久都没找到。百度是说在php二进制代码包里面。所以先下个同版本的二进制代码包(应该就是平时写php所必须下载的那个包吧)
 
  这里先说下环境吧windows+vc6+php5.3.5(二进制代码包和源码包)+cygwin
 
  下载完毕,找到,复制 ,编译,成功!
 
  但是出现了一个很严重的问题,dll文件没出来,,,我哭
 
  创建出来的是php_hello.exp和php_hello.lib。怎么会是静态的呢??
 
  其实已经生成了,只是不在本目录下的Release_TS目录下,而是在ext上级的Release_TS目录下。
 
  然后测试。哈哈,说是未定义函数php源代码,有没可能是测试的php版本和我扩展的php版本不一样的关系呢?
 
  测试了一下也不是,只要在ini里一设置加载php_hello.dll重启apache就会出现内存不能读的错误。
 
  总觉得代码没有问题,应该还是前面配置编译的时候有问题。
 
  经过一番又一番的测试发现时php二进制包下错了我下了vc9的应该下vc6的。
 

(编辑:PHP编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!