怎么编写一个单独的 PHP 扩充

怎么编写一个单独的 PHP 扩充

创设财富文件

ext_skel 可认为您的 PHP
模块创造一些通用的代码,你也得以编写制定一些主导函数定义和 C
代码来管理函数的参数。具体音讯方可查看
READNE.EXT_SKEL。

绝不忧郁未有表率,PHP
中有众多模块供您仿照效法,选拔七个轻巧的点起来,加多你本人的代码。

注:ext_skel
能够生成好大旨模块需求的能源文件和布置文件,没有供给本人成立。

四、重启HTTP服务:

图片 1

phpinfo截图.png

合计须要编写翻译哪些软件?

总括要求编写翻译安装 4 个软件:

  • 先安装 Memcached 依赖的
    libevent;
  • 接下来安装
    Memcached 库;
  • 再安装 PHP PECL 的 Memcached 插件信赖的
    libmemcached
    库;
  • 最终安装 PHP PECL 的
    Memcached
    插件.

咳咳. 笔者早就因为混淆了 Memcached 和 PHP 的 memcached 插件,
而浪费了广大时间. 囧


编写翻译安装Apache

编写翻译安装apr和apr-util

cd /usr/local/src/lamp    
tar zxvf apr-1.5.1.tar.gz   # 解压缩命令,tar zxvf apr-xxx.tar.gz(xxx为版本号)
cd apr-1.5.1            
./configure --prefix=/usr/local/apr-httpd  #配置apr安装位置以及安装目录
make                   #编译
make install           #安装

tar zxvf apr-util-1.5.3.tar.gz
cd apr-util-1.5.1
./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/
 make
 make install

编译安装pcre

 unzip –o pcre-8.35.zip
 cd pcre-8.35
./configure--prefix=/usr/local/pcre
 make
 make install

编写翻译安装apache

tar zxvf httpd-2.4.9.tar.gz
cd httpd-2.4.9
./configure --prefix=/usr/local/apache2 \             #指定安装目录
--enable-mods-shared=all \                            #将所有模块编译为DSO模块
--enable-deflate \                                    #压缩发送给客户端的内容
--enable-speling \                                    #自动纠正url拼写中的错误
--enable-cache \                                      #基于uri键的内容动态缓冲
--enable-file-cache \                                 #提供文件描述符缓存支持,从而提高Apache性能
--enable-disk-cache \                                 #基于磁盘的缓冲管理器
--enable-mem-cache \                                  #基于内存的缓冲管理器  
--enable-so \                                         #让apache可以支持DSO模式              
--enable-expires=shared \                             #配置expires信息和cache-control信息
--enable-rewrite=shared \                             #url重写引擎模块
--enable-static-support \                             #使用静态连接编译所有二进制支持程序
--sysconfdir=/etc/httpd \                             #指定配置文件路径
--with-z=/usr/local/zlib/ \                           #指定zlib所在路径
--with-apr=/usr/local/apr-httpd/ \                    #指定apr-httpd所在路径
--with-apr-util=/usr/local/apr-util-httpd/ \          #指定apr-util-httpd所在路径
--with-pcre=/usr/local/pcre/ \                        #指定pcre所在路径    
--disable-userdir                                     #禁用用户主目录提供页面访问模块      
make
make install

至于apache便宜设置的configure详细铺排选项能够通过./configure
–help命令来进行查看

改良配置文件

无独有偶编写翻译安装的apache服务器日常是未曾配置主机名的,那将要apache首次开发银行的时候现身警告音信:

AH00558:httpd:Could not reliably determine the server's fully qualified domain
name, using::1.Set the ServerName' directive globally to suppress this message

修正apache配置文件httpd.conf,平时放在/usr/local/apache2/conf/下,配置ServerName项

ServerName localhost:80

经过调控情势

Apache运转脚本经常放在/usr/local/apache2/bin/目录下,当中httpd是可实践文件,apachectl是本子文件,apachectl脚本会将apache运转时索要的一些参数和情形变量传递给httpd文件。由此官方推荐应用apchectl调节apache的起步,结束和重启。也能够配备apchectl运转脚本中的配置项进而向httpd可实施文件中流传内定的参数。

采用脚本调节

/usr/local/apache2/bin/apachectl -k start             #启动命令
/usr/local/apache2/bin/apachectl -k restart           #强制重启
/usr/local/apache2/bin/apachectl -k graceful          #平滑重启
/usr/local/apache2/bin/apachectl -k stop              #强制关闭
/usr/local/apache2/bin/apachectl -l graceful-stop     #平滑关闭

应用实信号调节

kill -TERM `cat /usr/local/apache2/logs/httpd.pid`    #强制关闭
kill -WINCH  `cat /usr/local/apache2/logs/httpd.pid`  #平滑关闭
kill -HUP `cat /usr/local/apache2/logs/httpd.pid`     #强制重启
kill -USR1 `cat  /usr/local/apache2/logs/httpd.pid`   #平滑重启

精心这里/usr/local/apache2/logs/httpd.pid文件保留的是apache主进程的长河id。有关软重启与硬重启,软关闭与硬关闭的做事形式在重复补充。

测量试验安装结果

按照以上调控方法,大家运行apache服务器,推荐应用apachectl脚本。

/usr/local/apache/bin/apachectl -k start

开垦浏览器,在地方栏中输入主机的IP地址,此次安装为:
works!则表明Apache服务器能够运用。

后续管理专门的学业

各样服务器软件都有必不可少制作而成开机时自动运维,Apache服务器开机自动运转,只要在“/etc/rc.d/rc.local”文件,加上Apache服务器的运营命令就能够。能够直接张开“/etc/rc.d/rc.local”文件,在终极一行写入Apache运转命令,也足以用echo命令追加进来,如下命令行示:

echo "/usr/local/apache243/bin/apachectl -k start" >> /etc/rc.d/rc.local

对于linux系统中的服务有时候会动用service命令或chkconfig命令进行田间管理,那多个工具的操作目录是/etc/init.d/下,因而为了将apache服务归入,大家将apache服务器的运营脚本复制到该目录下,并其设置开机自动运转。

cp /usr/local/apache/bin/apachectl /etc/init.d/httpd     #复制执行脚本
chmod +x /etc/init.d/httpd                               #赋予执行权限
chkconfig –add httpd                                     #设置开机自动启动

概念二个新扩充

大家给示例扩大命名字为 “foobar”。

新扩大饱含五个财富文件:foo.c 和
bar.c(还会有一部分头文件,但这么些不只有主要)。

示范扩充不引用任何外部的库(这一点非常重大,因为如此顾客就无需特地钦赐一些编写翻译选项了)。

LTLIBRARY_SOURCES
选项用于钦点财富文件的名字,你能够有私自数量的财富文件。

注:上面说的是 Makefile.in 文件中的配置选项,可以参照他事他说加以考查
xdebug。

二、与 UNIX 构建系统相互: config.m4

扩展的 config.m4 文件报告 UNIX 创设系统怎么样扩张 configure
选项是支撑的,你须要如何扩大库,以致哪些源文件要编写翻译成它的一有的。

参照小说

  • PHP 官方文书档案 –
    Memcached
  • 手动为php安装memcached扩大模块
  • StackOverflow – not able to install php-devel in aws centos ec2
    instance for php version
    5.6.22
  • Linux 编译 常用PHP 扩展
  • Linux下 config/configure/Configure、make 、make test/make
    check、sudo make install
    的作用
  • Centos/RedHat
    7/6/5切换Ali云源并设置EPEL/IUS/REMI饭馆
  • Linux 编写翻译软件的步调

条件希图

修改自定义模块

将 config.m4 文本和财富文件放到同三个目录中,然后施行 phpize (PHP 4.0
以上的版本编写翻译 PHP 的时候都安装了 phpize)。

万一您的 phpize 不在系统情状变量中,你需求钦命相对路线,举例:

$ /php/bin/phpize

本条命令会自动复制必得的创设文件到当前目录并依附 config.m4
创设布局文件。

通过以上的步骤,你曾经有了多少个独立的扩充了。

autoconf 语法简要介绍

config.m4 文件使用 GNU autoconf
语法编写。简单来说,正是用刚劲的宏语言巩固的 shell 脚本。注释用字符串
dnl 分隔,字符串则放在左右方括号中间(举个例子,[ 和
])。字符串可按要求屡次嵌套引用。

什么样寻觅 phpize 命令和 php-config 命令?

使用 whereis 命令, 比如:

whereis phpize #会显示类似路径, 像这样 phpize: /usr/bin/phpize /usr/share/man/man1/phpize.1.gz
whereis php-config #会显示类似路径, 像这样 php-config: /usr/bin/php-config /usr/share/man/man1/php-config.1.gz

抑或采纳 find 命令:

sudo find / -name phpize
sudo find / -name php-config

PS. php-config 是得到所设置的 PHP 配置音讯的一声令下行脚本.
在编写翻译扩充时,假诺设置有多少个 PHP 版本,能够在安排时用
–with-php-config 选项来内定使用哪一个本子编写翻译,该选取钦赐了相对应的
php-config 脚本的路径.


添加openssl扩展

cd /root/php-5.5.15/ext/openssl
/usr/local/webserver/php/bin/phpize
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
./configure --with-openssl \
--with-php-config=/usr/local/webserver/php/bin/php-config
make && make install
Build complete.
Don't forget to run 'make test'.

编译完毕后将调换的openssl.so增添到php.ini中,重启apache,重启完结后就能够调用openssl库中的方法生成公钥、私钥对。

预备好系统工具

想要扩大能够在系统上编写翻译并成功运营,须求未雨打算转以下工具:

  • GNU autoconf
  • GNU automake
  • GNU libtool
  • GNU m4

上述这几个都足以从 获取。

注:以上这个都以类 Unix 境况下技术选取的工具。

因为天性化推荐系统的支出,是布局组与战术组的跨小团队合营,所以战略方不愿意公开自身的代码,所以就只能使用大家提供系统成效,对方提供计谋部分.so文件来兑现(战术团队以C/C++作为重要语言)。

设置 PHP 增加的通用流程

  • 1.下载解压

cd /usr/local/src #诚如把第三方软件的源码放在这里个目录
wget http://xxx.com/
#软件源码下载地址
tar -zxvf 压缩包 #解压缩. 依据不一样品种的压缩包,使用差别的解压缩命令,
例如 “.gz 压缩包”使用 -zx , “.bz 压缩包”使用 -jx
“`

  • 2.编写翻译安装

cd /解压缩后/的文件夹
/usr/local/bin/phpize #用 phpize 命令生成 configure 配置文件
./configure –with-php-config=/usr/local/php/bin/php-config #配置
make #编译
sudo make install #安装
“`

  • 3.修改 php.ini

    在 php.ini 中添加:

extension=名称.so # “名称”为扩张的名称. 或许能够用重定向的授命校正php.ini sudo echo extension=名称.so >> /etc/php.ini
“`

  • 4.重启服务

php -m | grep 扩大名称 #证明是或不是科学安装上了扩充
sudo systemctl reload php-fpm nginx #systemctl 是 CentOS 7 的命令
“`


添加mysql扩展

cd /root/php-5.5.15/ext/mysql
/usr/local/webserver/php/bin/phpize 
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
./configure --with-php-config=/usr/local/webserver/php/bin/php-config \
 --with-mysql=/usr/local/webserver/mysql/
make && make install
Build complete.
Don't forget to run 'make test'.
Installing shared extensions:     /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-
20121212/

mysql.so会自动加多extension_dir所指目录中,修正php.ini增加extension=mysql.so 重启apache就可以调用mysql扩大。

纠正 m4 后缀的安顿文件

m4
配置文件能够内定一些附加的反省。对于贰个单身扩张来讲,你只要求做一些宏调用就能够。

PHP_ARG_ENABLE(foobar,whether to enable foobar,
[  --enable-foobar            Enable foobar])

if test "$PHP_FOOBAR" != "no"; then
  PHP_NEW_EXTENSION(foobar, foo.c bar.c, $ext_shared)
fi

PHP_ARG_ENABLE 会自动安装好正确的变量以确认保障扩展能够被
PHP_NEW_EXTENSION 以共享模式运营。

PHP_NEW_EXTENSION
的首先个参数是扩大的称号,第4个参数是能源文件。第四个参数 $ext_shared
是由 PHP_ARG_ENABLE/WITHPHP_NEW_EXTENSION 设定的。

请始终使用 PHP_ARG_ENABLEPHP_ARG_WITH
实行安装。纵然你不筹算公布你的 PHP 模块,那一个设置也足以确定保证令你的模块和
PHP 主模块的接口保持紧凑。

注:PHP_ARG_ENABLEPHP_ARG_WITH
应该是用来定义模块是动态增加依旧静态编写翻译进 PHP 中,就跟编写翻译 PHP 时选取的
--enable-xxx--with-xxx 一样。

一、ext_skel 脚本

PHP
扩充由多少个公文组成,那么些文件对具有扩充来讲都是通用的。区别扩大之间,这一个文件的居多细节是日常的,只是要费时去复制每一种文件的内容。幸运的是,有脚本能够做有所的伊始化职业,名叫ext_skel,自 PHP 4.0 起与其一起分发。

不带参数运维 ext_skel 在 PHP 5.6.24(最新规范版本) 中会产生以下输出:

./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-svn
  --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

通常来讲,开垦四个新扩充时,仅需关怀的参数是 –extname 和
–no-help。除非已经驾驭扩大的协会,不要想去使用 –no-help;
钦定此参数会引致 ext_skel 在转换文书里差相当少非常多实用的注释。剩下的
–extname 会将扩张的称号传给 ext_skel。”name”
是二个全为小写字母的标志符,仅包涵字母和下划线,在 PHP 发行李包裹的 ext/
文件夹下是头一无二的。*** 官方网址说了:别的参数不用领会,也毫无尝试。 ***

编写翻译 Memcached 进度中踩过的坑

防火墙和SELinux配置

编辑/etc/sysconfig/iptables文件,配置防火墙,加多如下两条法规并保留退出

-A INPUT –m state –state NEW –m tcp –p tcp –dport 80 –j ACCEPT
-A INPUT –m state –state NEW –m tcp –p tcp –dport 3306 –j ACCEPT

出于SELINUX的拉开大概会对MySQL产生一定的熏陶,所以提前关闭SELINUX

编辑/etc/selinux/config文件,修正如下内容:

#SELINUX=enforcing      #将该行注释
#SELINUXTYPE=targeted   #将该行注释
SELINUX=disabled        #增加内容

姣好上述操作后,重启系统

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图