php扩展开发环境搭建
首先要安装编译php时要的几个扩展库
(1)libxml2,若无php安装一些解析xml的扩展时会提示xml2-config not found
- sudo apt-get install libxml2 libxml2-dev libxslt-dev
(2)libevent1.4.11及以上版本,安装php的fpm模块时需要
- sudo apt-get install libevent-1.4-2 libevent-dev
(3)libcurl,安装curl扩展需要
- sudo apt-get install libcurl4-openssl-dev
(4)GD库,安装gd图片处理扩展需要
- sudo apt-get install libgd2-xpm libgd2-xpm-dev
(5)zlib1g-dev,安装zlib和bz2扩展或编译mysqld阶段需要
- sudo apt-get install zlib1g-dev libbz2-dev
(6) configure: error: mcrypt.h not found. Please reinstall libmcrypt.
- sudo apt-get install libmcrypt-dev
编译参数:
- sudo ./configure --prefix=/usr/local/php --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc --enable-cli --with-config-file-path=/usr/local/php/etc --with-openssl --with-kerberos --with-zlib --enable-bcmath --with-bz2 --enable-calendar --with-curl --enable-exif --enable-ftp --with-gd --enable-gd-native-ttf --enable-magic-quotes --enable-mbstring --enable-mbregex --enable-json --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql-sock=mysqlnd --with-sqlite --with-pdo-sqlite --enable-pdo --enable-dba --enable-shmop --enable-soap --enable-sockets --enable-wddx --enable-fpm --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-iconv --with-xsl --enable-zend-multibyte --enable-zip --with-pcre-regex --enable-dom --enable-gd-native-ttf --enable-posix --enable-fileinfo --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-libxml --with-xmlrpc --enable-xml --enable-xmlwriter --enable-xmlreader --enable-maintainer-zts --enable-debug
说明:如果是apache,请加上
-with-apxs2=/usr/local/apache/bin/apxs
–enable-maintainer-zts 支持apache的worker或event这两个MPM
说明:这里为了支持apache的worker或event这两个MPM,编译时使用了–enable-maintainer-zts选项。
# 注:其中最后一个参数–enable-maintainer-zts在安装PHP5.4最新版本时必须添加(5.3貌似不需要),表示打开PHP进程安全Thread Safe,默认不添加为NON Thread Safe,开启apache服务会报错…..
编译通过就执行安装过程
- sudo make -j 4
- sudo make install
今天尝试了我的第一个php扩展开发,记录下过程以及遇到的问题
一、环境准备
以前我已经用以下命令安装过php了
- $ sudo apt-get install php5
其安装位置是
- $ whereis php
- php: /usr/bin/php /usr/lib/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
这种方式安装的php并不能直接进行php扩展开发,我们还需要
(1)安装php5-dev,不然没有编译扩展需要的phpize
- $ sudo apt-get install php5-dev
- $ whereis phpize
- phpize: /usr/bin/phpize /usr/bin/X11/phpize /usr/share/man/man1/phpize.1.gz
(2)下载php5源码, 我准备保存在 ~/code/ 目录下
- $ cd ~/code/
- $ sudo apt-get source php5
下载的文件如下
- $ ls
- php5-5.4.9 php5_5.4.9-4ubuntu2.dsc
- php5_5.4.9-4ubuntu2.debian.tar.gz php5_5.4.9.orig.tar.xz
二、生成扩展骨架文件
进入php的ext目录- $ cd ~/code/php5-5.4.9/ext/
执行一下命令
- $ ./ext_skel --extname=xw
发现没有ext下权限没有权限创建目录,于是修改ext目录的权限
- $ chmod 0777 ~/code/php5-5.4.9/ext
再次执行
- $ ./ext_skel --extname=xw
ext下正常生成了xw目录,但目录中没有c文件,这和网络上教程所说有些不一样啊,仔细看了看命令的输出,发现有些报错说一些文件没有找到
- cannot open /skeleton.c: No such file
vim 打开ext_skel文件
搜索“skeleton.c”,得
- sed -f sedscript < $skel_dir/skeleton.c > $extname.c
继续搜索“skel_dir”
- if test -z "$skel_dir"; then
- skel_dir="/usr/lib/php5/<span style="font-family: Arial, Helvetica, sans-serif;">"</span>
- fi
原来是这个路径,查看我的电脑确实没有这个目录,那搜索一下是否是在其他地方呢
- $ locate /skeleton
- /usr/share/php5/skeleton
这个路径应该是可以配置的,试试help看看
- $ ./ext_skel --help
- ./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]]
- [--skel=dir] [--full-xml] [--no-help]
- --extname=module module is the name of your extension
- --proto=file file contains prototypes of functions to create
- --stubs=file generate only function stubs in file
- --xml generate xml documentation to be added to phpdoc-cvs
- --skel=dir path to the skeleton directory
- --full-xml generate xml documentation for a self-contained extension
- (not yet implemented)
- --no-help don't try to be nice and create comments in the code
- and helper functions to test if the module compiled
明白了,修改原来的命令,增加--skel参数再次执行
- $ ./ext_skel --extname=xw --skel=/usr/share/php5/skeleton
ok了,生成的文件正常了
三、编译扩展
进入xw目录 ,vim config.m4 把
- dnl PHP_ARG_ENABLE(xw, whether to enable xw support,
- dnl Make sure that the comment is aligned:
- dnl [ --enable-xw Enable xw support])
这3行前面的“dnl”注释去掉,变成
- PHP_ARG_ENABLE(xw, whether to enable xw support,
- Make sure that the comment is aligned:
- [ --enable-xw Enable xw support])
依次执行
- $ phpize
- $ ./configure
- $ make
- $ sudo make install
若执行成功了,会显示
- Installing shared extensions: /usr/lib/php5/20100525/
这时你在 /usr/lib/php5/20100525/ 目录找到 xw.so
四、修改php配置,运行检测
修改php.ini 配置文件,把xw.so扩展加入进去(这个就多不多说了)。若你不知道ini文件在哪,可以执行以下命令查看
- $ php -ini
重启后,执行
- $ php -r 'echo confirm_xw_compiled("xw"),"\n";'
若你能看到如下输出则你的扩展编译安装配置成功了
- Congratulations! You have successfully modified ext/xw/config.m4. Module xw is now compiled into PHP.
其实,这句话就是xw.c里面函数返回给php的,你可以找到,并尝试修改它,然后重复 make和make install 步骤
函数confirm_xw_compiled()是扩展骨架自带的一个自定义函数,是一个例子,也可用于检查是否安成功安装了扩展。其中“xw”是扩展名
php扩展开发环境搭建的更多相关文章
- 基于Visual c++ 2012的php扩展开发 - 环境搭建
软件准备 Apache2.4 php-5.6.20-Win32-VC11-x86 php-5.6.20-src mysql-5.5.45-win32 vcredist_x86.exe vs2012旗舰 ...
- Eclipse中Python开发环境搭建
Eclipse中Python开发环境搭建 目 录 1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...
- python学习之python开发环境搭建
Python简介 Python是一种面向对象.解释型计算机程序设计语言.Python语法简洁而清晰,具有丰富和强大的类库等等众多的特性,这是来自百度百科的介绍,在百度百科还能看到它的更详细的介绍信息, ...
- (转载)JAVA敏捷开发环境搭建
整个软件项目分为四个环境 开发本地环境.开发环境.测试环境.IDC环境.和传统C++开发不一样的模式是多了第一个开发本地环境.这是为什么呢,因为目前大部分开发人员还是比较熟悉windows下开发.对于 ...
- C++学习之开发环境搭建篇(一)
由于C++是一门非跨平台语言,其开发的程序编译生成的可执行文件,只能在相应的操作系统中被执行,离开此系统环境将无法执行. 主要原因是不同的操作系统,可执行文件的结构不同,最为常见的操作系统是有:MAC ...
- (转)微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(采用 Baidu Eclipse)
原文传送门(http://blog.csdn.net/bingtianxuelong/article/details/17843111) 版本说明: V1: 2014-2-13 ...
- iOS开发教程之:iPhone开发环境搭建
安装条件: 硬件:一台拥有支持虚拟技术的64位双核处理器和2GB以上内存的PC. 注意:运行MAC OS,需要电脑支持虚拟技术(VT),安装时,需要将VT启动,在BIOS中开启. 软件: Window ...
- SDL2.0的VS开发环境搭建
SDL2.0的VS开发环境搭建 [前言] 我是用的是VS2012,VS的版本应该大致一样. [开发环境搭建] >>>SDL2.0开发环境配置:1.从www.libsdl.org 下载 ...
- 转:Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。
原文来自于:http://www.ituring.com.cn/article/128439 Windows下的PHP开发环境搭建——PHP线程安全与非线程安全.Apache版本选择,及详解五种运行模 ...
随机推荐
- (三)js循环结构
1.循环结构 a) 当循环 语法:while(condition){ code... } do(){ code... } while(); ...
- Supervisor进程监控
安装 yum install -y python-setuptools easy_install supervisor echo_supervisord_conf > /etc/supervis ...
- 模仿Masonry链式编程思想
使用masonry 也将近一年多了,它的链式编程方式一直是很吸引我的. 之前一直没空好好思考它是如何实现,直到现在正好自己有空,因此写下链式编程的基本思路. 链式基本的编程形式如 a.property ...
- 剑指offer-第二章数据结构(数组,字符串,链表,树,栈与队列)及例题
一.数组(最简单的数据结构) 定义:占据一块连续内存并按照顺序存储数据.创建时先指定大小,分配内存. 优点:时间效率高.实现简单的hash(下标为key,对应的数据为value) 缺点:空间效率差.如 ...
- 利用Github免费搭建个人主页(个人博客)
之前闲着, 利用Github搭了个免费的个人主页. 涉及: Github注册 Github搭建博客 域名选购 绑定域名 更多 一 Github注册 在地址栏输入地址:http://github.co ...
- js对象原型链
JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象.这个对象的所有属性和方法,都会被构造函数的所拥有. 这也就意味着,我们可以把所有对象实例需要共享的属性和方 ...
- python 的日志logging模块
1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message')logging.info('This is info messag ...
- ④SpringBoot之thymeleaf使用
本文介绍SpringBoot使用的模板技术thymeleaf以及通过webJar进行前端资源的引入以及使用thymeleaf介绍简单说, Thymeleaf 是一个跟 Velocity.FreeMar ...
- dockerfile初试之tomcat8封装
前面学习了一些docker相关资料,有看到dockerfile这个东东,一时没看得太明白,理论给合实践是最好的学习方法,自己做一下就行了嘛.主要步聚记录如下: 0)环境 10.202.105.96 ...
- Python学习笔记之os模块
Python中的os提供了非常丰富的方法用来处理文件和目录,下面我们将详细的介绍os相关的一些方法和函数: os 路径相关的函数: 1.os.listdir(dirname):列出dirname目录下 ...