curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。在xampp集成环境中,curl自带,只不过默认关闭。vim /etc/php.ini注:此处的/etc/php.ini 请找到自己的php.ini路径所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。然后找到:;extension=php_curl.dll在Vim下搜索字符串方法如下:1、命令模式下输入“/字符串”,例如“/Section 3”。2、如果查找下一个,按“n”即可。要自当前光标位置向上搜索,请使用以下命令:/pattern Enter将;extension=php_curl.dll的注释去掉,保存退出:x 写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。最后重启服务即可service httpd restart
php安装好后,可能在初次安装时,会有些模块会有遗漏,但是我们又不想重新编译php,因为耗时是比较长的。我们可不可以在不重新编译安装php的情况下,来为php单独添加某一个模块呢?查找资料,发现还是有方法的,重点就是phpize了,于是写了这篇文章.下面我们就以单独为php加载mysqli模块为例,演示如何动态为php添加模块。1、找到php原码安装文件2、cd /home/php/ext/myslqi3、运行 /usr/local/php/bin/phpize4、/configure –with-php-config=/usr/local/php/bin/php-config5、make && make install6、安装完成之后会在系统/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/这个目录下面生成mysqli.so的库文件7、编辑php.ini文件,指定php到哪人目录读取模块vi /usr/local/php/etc/php.iniextension_dir=”/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613″extension=mysqli.so8、重启php服务 /usr/local/php/sbin/php-fpm restart7、/usr/local/php/bin/php -m|grep mysqli 查看mysqli.so是否存在如果步骤正确,你的人口也不差的情况下,应该这样php的动态模块加载就完成了。
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <stdlib.h>#include <errno.h>#include <dlfcn.h>//定义我们自己的connect函数int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen){ static int (*connect_linuxc)(int, const struct sockaddr*, socklen_t)=NULL; unsigned char *ip_char; //利用 lsym的RTLD_NEXT选项绕过LD_PRELOAD环境变量的connect方法找到c库的函数 if (!connect_linuxc) connect_linuxc=dlsym(RTLD_NEXT,"connect"); ip_char=serv_addr->sa_data; ip_char+=2;//192.168.2.3 找到了 if ((*ip_char==192)&&(*(ip_char+1)==168)&&(*(ip_char+2)==2)&&(*(ip_char+3)==3)) { //简单返回一个权限错误的代码 return EACCES; }// 调用真正的connect方法 return connect_linuxc(sockfd,serv_addr,addrlen); }编译成so文件$ gcc -o lp_demo.so -shared lp_demo.c -ldl测试文件 test.php<?phpfile_get_contents("");?>使用方法LD_PRELOAD=lp_demo.so php test.php这样他将不可能访问的到192.168.2.3这种我们内部的网址。起到一个很好的沙盒作用。除此之外我们还可以利用fwrite fopen等函数将php对文件系统的读写操作转移到mencache,nosql之类的后端资源当中。 最后,即使我们已经深入了c库的内部,也不意味着我们走到了最底层,在c库下面,还有一堆sys_开头的函数,他们才是内核空间里的真正函数,在此就不在探讨了。
在PHP/etc 文件夹中加入扩展在PHP 文件夹下的php.ini文件里 有很多dll文件的地方加入一行 你所添加的扩展的名字xxxx.dll或者 是 在php.ini中直接打开对应的扩展 ,将目标行的 ; 给去掉哦,对了,最后记得要重新启动PHP的服务器
首先在Linux下安装PHP扩展的方法有很多一下我就演示一下我们最常见的一种方法。
安装PHP扩展
wget http://pecl.php.net/get/gearman-1.1..1.tgztar zxvf gearman-1.1.1-tgzcd gearman-1.1.1/usr/local/server/php/bin/phpize./configure --with-php-config=/usr/local/server/php/bin/php-config --with-gearman=/usr/local/server/gearmand-1.1.7/make && make install
以上的步骤会输出扩展安装目录:/usr/local/server/php-5.4.14/lib/php/extensions/no-debug-non-zts-20100525/
修改php.ini,加入语句如下
extension=/usr/local/server/php-5.4.14/lib/php/extensions/no-debug-non-zts-20100525/gearman.so
重启php-fpm,用phpinfo查看是否安装成功
service php-fpm restart
|静态只要一启动就能加载 动态用的时候才加载 .so/usr/local/php5/bin/php -i |less 查看配置文件在哪里,编译参数/usr/local/php5/bin/php -m |less 查看php加载的模块
你这样打酱油可以嘛?
1、首先编写一个函数定义文件,该文件编写函数原型后缀为def,假设为:caleng_module.defint a(int x, int y)string b(string str, int n)2、通过扩展骨架生成器,将在ext目录下自动建立扩展目录caleng_module#> ./ext_skel --extname=caleng_module --proto=caleng_module.def3、修改配置文件: #> vim /software/php-5.2.13/ext/caleng_module/config.m4,将如下行的注释标签"dnl"去掉,修改后如下所示:PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,Make sure that the comment is aligned:[ --enable-myfunctions Enable myfunctions support])
扩展库是php扩展的功能,比如php本来不支持操作某种功能 ,但在新版本想对它提供支持,就以扩展的方式来提供,这样,我们在配置php时,如果我们不用此功能,我们就可以让php不加载他.从而节省服务器资源.提供其性能 php的扩展库一般放在php目录下的ext目录里.你在网上下载的php压缩包解压后应该可以看到. php.ini中的 extension_dir 用来指定你的扩展名的地址 。 php.ini中有一排像 ;extension="xxxxxx.dll" 的内容就是用来配置让你的php运行环境支持什么不支持什么。以下为php.ini中的剪切段------------------------------;extension=php_bz2.dll;extension=php_curl.dll;extension=php_dba.dll;extension=php_dbase.dll;extension=php_exif.dll;extension=php_fdf.dll;extension=php_gd2.dll //php对图片操作的扩展;extension=php_gettext.dll;extension=php_gmp.dll;extension=php_ifx.dll;extension=php_imap.dll;extension=php_interbase.dll;extension=php_ldap.dll;extension=php_mbstring.dll;extension=php_mcrypt.dll;extension=php_mhash.dll;extension=php_mime_magic.dll;extension=php_ming.dll;extension=php_msql.dll;extension=php_mssql.dll //php操作mssql (sql server)数据库的扩展;extension=php_mysql.dll //php操作mysql数据库的扩展------------------------------要让php支持某种功能,把extension前面的 " ; "号去掉,重启apache或iis即可。