php扩展源码
Ⅰ php婧愮爜鏄浠涔堟剰镐
php婧愮爜鏄浠涔堟剰镐濓纻
PHP婧愮爜灏辨槸鐢≒HP鑴氭湰璇瑷缂栧啓镄勪竴娈电▼搴忥纴灞炰簬璁$畻链虹紪绋嬨备竴涓狿HP缃戦〉涓钖链埘HP浠g爜锛岄偅涔堟妸杩欎釜缃戦〉镄勬暣涓铡熷嬫枃浠剁敤缂栬緫鍣ㄦ墦寮锛屾垨钥呯敤璁颁簨链镓揿紑锛岀湅鍒扮殑灏辨槸PHP婧愮爜銆
PHP璺熷叾瀹冭瑷鐩稿规湁涓瀹氱殑浼桦娍锛
1銆丳HP鏄寮鏀剧殑婧愪唬镰侊细镓链夌殑PHP婧愪唬镰佷簨瀹炰笂閮藉彲浠ュ缑鍒般
2銆丳HP鏄鍏嶈垂镄勚傚拰鍏跺畠鎶链鐩告瘆锛孭HP链韬鍏嶈垂銆
3銆乸hp镄勫揩鎹锋э纴绋嫔簭寮鍙戝揩锛岃繍琛屽揩锛屾妧链链韬瀛︿範蹇銆傚祵鍏ヤ簬HTML锛氩洜涓篜HP鍙浠ヨ宓屽叆浜嶩TML璇瑷锛屽畠鐩稿逛簬鍏朵粬璇瑷锛岀紪杈戠亩鍗曪纴瀹炵敤镐у己锛屾洿阃傚悎鍒濆﹁呫
4銆佽法骞冲彴镐у己锛氱敱浜嶱HP鏄杩愯屽湪链嶅姟鍣ㄧ镄勮剼链,鍙浠ヨ繍琛屽湪UNIX銆丩INUX銆乄INDOWS涓嬨
5銆佹晥鐜囬珮锛歅HP娑堣楃浉褰揿皯镄勭郴缁熻祫婧愩
6銆佸浘镀忓勭悊锛氱敤PHP锷ㄦ佸垱寤哄浘镀
7銆侀溃钖戝硅薄锛氩湪php5 涓锛岄溃钖戝硅薄鏂归溃閮芥湁浜嗗緢澶х殑鏀硅繘锛岀幇鍦╬hp瀹屽叏鍙浠ョ敤𨱒ュ紑鍙戝ぇ鍨嫔晢涓氱▼搴忋
镟村歅HP鐩稿叧鐭ヨ瘑锛岃疯块梾PHP涓鏂囩绣锛
Ⅱ 如何安装php的扩展bcmath
下载或编译扩展到插件目录,在php.ini 中启用,然后重启web服务
Ⅲ 如何加载php扩展功能
当服务器上PHP已经安装好,需要额外添加PHP扩展时怎么办?不需要重新安装PHP,有了phpize我们可以在原有的PHP基础之上直接安装扩展库。
这次编译仅仅只是单独编译PHP的扩展库,接下来将编译好的扩展库加入到现在运行的php中,不对现在运行的php重新编译,所以没有一点的影响。
下面我们演示安装xsl的扩展(不一定常用,仅做为一个范例)
做法一:
1.找到当前运行的php版本的源代码目录,如php-5.2.3。进入xsl扩展库目录。
$cd /home/pkgs/php-5.3.3/ext/xsl
2.调用phpize程序生成编译配置文件。
$/home/app/php5.3.3/bin/phpize
3.编译扩展库,分别执薯仔岩行下面的configure和make命令。
$./configure-with-php-config=/home/app/php5.3.3/bin/php-config
这一步执行通过后,再执行make命令,如果configure执行不通过,则查找错误原因。
$make
#make成功执行后,生成的扩展库文件在当前目录的 moles子目录下,
如/home/php-5.3.3/ext/curl/moles/xsl.so
4.配置php.ini文件
#将编译好的扩展库文件复制到PHP的扩展目录下,可通过查看phpinfo信息。。
$ cp /home/pkg/php-5.3.3/ext/xsl/moles/xsl.so /home/app/php5.3.3/lib/php/extensions/no-debug-non-zts-20090626
#在php.ini文件中找到设置扩展目录的位置,然后将扩展路径设置到php安装目录/extension/no-debug-non....目录下,并添加扩展库位置。
extension_dir /home/app/php5.3.3/lib/php/extensions/no-debug-non-zts-20090626”
extension=xsl.so
5.重启php,查看phpinfo信息戚此,即可看到刚才添加进去的xsl扩展库。(如果有多个php-fpm进程的话,平滑重启数御主进程即可:kill -USR2 pid)
Ⅳ 如何编译安装PHP扩展
一开始安装PHP的时候,我们并不知道需要哪些扩展,所以只有等到我们真正用到的时候才想办法去安装。
安装PHP扩展最简单的办法就是
sudo apt-get install php5-xxx
但有的时候并非我们所愿,源里面并没有我们需要的扩展,这时候就需要我们下载源码自己编译安装了。
这篇文章中我将介绍在本地Linux平台下编译安装PHP扩展的方法。
现在网站根目录下创建 index.php 打印基本的配置信息,以验证我们是否安装成功。
配置编译环境
我们需要安装一些编译必须的库,还有 php-dev 版本
Ubuntu
sudo apt-get install php5-dev php5-mysql gcc libpcre3-dev
Fedora
sudo yum install php-devel php-mysqlnd gcc libtool
RHEL
sudo yum install php-devel php-mysql gcc libtool
Suse
yast2 -i php5-pear php5-devel php5-mysql gcc
安装扩展
PHP有两种可供安装的扩展:一种是PHP原生的但是默认没有安装的,另一种的第三方开发的扩展。
下面依次介绍两种扩展的安装方法:
安装之前我们需要一份和当前机器上相同版本的PHP源码
cd code
wget http://cn2.php.net/distributions/php-5.5.9.tar.bz2
tar xvjf php-5.5.9.tar.bz2
cd php-5.5.9
前往此处 下载相应的源码包。
在 /ext 目录下面可以看到所有PHP原生的扩展。
安装原生扩展
以 PHP-intl 为例,这是PHP国际化的扩展。
为了安装这个扩展我们需要先安装ICU 库
sudo apt-get install icu-devtools icu-doc libicu-dev libicu52 libicu52-dbg
ICU 安装成功之后进入/ext/intl 目录:
cd intl
phpize
./configure --enable-intl
make
sudo make install
下面解释一下上面的每个命令:
phpize : 是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块
./configure --enable-intl: 配置编译环境,相当于告诉编译器编译PHP源码的时候加上intl这个扩展。
make: 将会把源码编译成 intl.so
make install : 将会把 intl.so 移动到当前安装的 PHP 的扩展目录。
接下来我们要做的就是在php.ini中启用这个扩展,这一步将会在最后给出示例。
安装第三方扩展
将以这个 扩展为例,这个扩展主要实现了PHP识别条形码的功能。
先安装必要的依赖
sudo apt-get install pkg-config
git clone https://github.com/mongodb/mongo-php-driver
cd mongo-php-driver
phpize
./configure
make
sudo make install
将会生成一个文件,将其拷贝到PHP的扩展目录下面。
启用扩展
在php.ini中启用扩展的方式有很多:
直接在php.ini文件中添加 extension=mongo.so,这是最简单直接的方法。
也可以单独建一个ini文件,然后在php.ini中包含这些文件就可以了。
下面介绍一下第二种方法:
cd `/etc/php5/mods-available`
这个目录里可以放新建的ini文件,然后执行
sudo touch mongo.ini
echo "extension=mongo.so" | sudo tee -a mongo.ini
sudo touch intl.ini
echo "extension=intl.so" | sudo tee -a intl.ini
上面的命令将会创建ini文件,并且写如相应的配置信息。
然后执行下面的命令启用扩展即可(需要安装 php5enmod 工具):
sudo php5enmod mongo
sudo php5enmod intl
如果未安装 php5enmod 工具,则需要手动配置:
ln -s /etc/php5/mods-available/mongo.ini /etc/php5/cli/conf.d/mongo.ini
ln -s /etc/php5/mods-available/intl.ini /etc/php5/cli/conf.d/intl.ini
ln -s /etc/php5/mods-available/mongo.ini /etc/php5/fpm/conf.d/mongo.ini
ln -s /etc/php5/mods-available/intl.ini /etc/php5/fpm/conf.d/intl.ini
最后在执行一下重启操作就可以了:
sudo service nginx restart
sudo service php5-fpm restart
Ⅳ 如何获取php扩展库源代码包
您需要告诉构建系统在编译时链接到共享库。这允许依赖项存储在已编译的PHP扩展中,在第一次使用时将加载它。
为此,您需要修改config.m4以添加库。你可以通过PHP_ADD_LIBRARY宏来做到这一点。此宏将一个库添加到链接行并具有该表单PHP_ADD_LIBRARY($name,$append,$var)。第一个参数是库的名称; 这是*.so没有lib前缀的文件的名称(例如xxx)。第二个参数确定(我推测)是否附加或覆盖该行; 这应该通常设置为1。最后一个参数是存储该行的变量名称。必须将此变量替换为输出文件PHP_SUBST。
您应该将PHP_ADD_LIBRARY行放在文件中PHP_NEW_EXTENSION宏之前的某个位置config.m4。另外,PHP_ADD_LIBRARY在PHP_CHECK_LIBRARY电话中打包是个好主意。这可确保构建系统在添加库之前找到库。请参阅下面的示例。
这是另一个类似于你的SO问题。它有一些你可以遵循的工作实例。另外,我将在这里包含一个简单示例:
PHP_CHECK_LIBRARY(xxx,xxxfunction,[
PHP_ADD_LIBRARY(xxx,1,XXX_SHARED_LIBADD)],[
AC_MSG_ERROR([])],[])PHP_SUBST([XXX_SHARED_LIBADD])
注意:第二个参数PHP_CHECK_LIBRARY是一个函数,构建系统将检查它是否找到给定的库。