PHP扩展开发--01.编写一个helloWorld扩展

为什么要用C扩展C是静态编译的,执行效率比PHP代码高很多。同样的运算代码,使用C来开发,性能会比PHP要提升数百倍。另外C扩展是在进程启动时加载的,PHP代码只能操作Request生命周期的数据,C扩展可操作的范围更广。创建扩展骨架##本例用的php版本的是5.3.3cdphp-5.3.3/ext/./ext_skel--extname=myfun--proto=myfun.def##执行成功后会生成myfun的编译文件lsmyfun/config.m4config.w32CREDITS.cvsignoreEXPERIMENTALmyfun.cmyfun.phpphp_myfun.htests修改config.m4config.m4中dnl为注释的意思##动态编译选项,通过.so的方式链接,去掉dnl注释PHP_ARG_WITH(myfun,formyfunsupport,[--with-myfunIncludemyfunsupport])##静态编译选项,通过enable来启用,去掉dnl注释PHP_ARG_ENABLE(myfun,whethertoenablemyfunsupp...

PHP扩展--taint检测隐藏漏洞

简介Taint可以用来检测隐藏的XSScode,SQL注入,Shell注入等漏洞,并且这些漏洞如果要用静态分析工具去排查,将会非常困难,比如对于如下的例子:<?phpecho$_GET["name"];?>对于请求:http://localhost/?name=222静态分析工具,往往无能为力,而Taint却可以准确无误的爆出这类型问题.Warning:Main::test()[function.echo]:Attempttoechoastringthatmightbetaintedintaint安装wgethttp://pecl.php.net/get/taint-1.2.2.tgztarzxvftaint-1.2.2.tgzcdtaint-1.2.2/usr/local/php/bin/phpize./configure--with-php-config=/usr/local/php/bin/php-configmake&&makeinstall配置php.ini[taint]extension=taint.sotaint.enable=1taint.e...

PHP扩展--opcache安装及配置

简介Optimizer+是Zend开发的闭源但可以免费使用的PHP优化加速组件,是第一个也是最快的opcode缓存工具。现在,Zend科技公司将Optimizer+在PHPLicense下开源成为ZendOpcache。ZendOPcache通过opcode缓存和优化提供更快的PHP执行过程。它将预编译的脚本文件存储在共享内存中供以后使用,从而避免了从磁盘读取代码并进行编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(OperateCode,opcode)。Opcodecache的目地是避免重复编译,减少CPU和内存开销。如果动态内容的性能瓶颈不在于CPU和内存,而在于I/O操作,比如数据库查询带来的磁盘I/O开销,那么opcodecache的性能提升是非常有限的。现代操作码缓存器(Optimizer+,APC2.0+,其他)使用共享内存进行存储,并且可以直接从中执行文件,而不用在执行前“反序列化”代码。这将带来显着的性能加速,通常降低了整体服务器的内存消耗,而且...

PHP扩展--XHProf优化PHP程序

简介XHProf是一个轻量级的分层性能测量分析器。在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU计算时间和内存开销。函数性能报告可以由调用者和被调用者终止。在数据搜集阶段XHProf通过调用图的循环来检测递归函数,通过赋予唯一的深度名称来避免递归调用的循环。XHProf包含了一个基于HTML的简单用户界面(由PHP写成)。基于浏览器的用户界面使得浏览、分享性能数据结果更加简单方便。同时也支持查看调用图。XHProf的报告对理解代码执行结构常常很有帮助。比如此分层报告可用于确定在哪个调用链里调用了某个函数。XHProf对两次运行进行比较(又名“diff”报告),或者多次运行数据的合计。对比、合并报告,很像针对单次运行的“平式视图”性能报告,就像“分层式视图”的性能报告。安装/配置编译安装wgethttp://pecl.php.net/get/xhprof-0.9.4.tgztar-zxvfxhprof-0.9.4.tgzcdxhprof-0.9.4/cdextension//usr/local/p...

PHP扩展--vld查看opcode代码

vld安装wgethttp://pecl.php.net/get/vld-0.13.0.tgztarzxvfvld-0.13.0.tgzcdvld-0.13.0/usr/local/php/bin/phpize./configure--with-php-config=/usr/local/php/bin/php-config--enable-vldmake&&makeinstall配置php.iniextension=vld.so运行结果来自为知笔记(Wiz) ...

PHP扩展--Oracle客户端(oci8)安装

下载Oracle客户端官方下载地址:LinuxX86-64同意协议,下载以下文件:oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpmoracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm安装rpm-ivhoracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpmrpm-ivhoracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpmbasic默认安装在/usr/lib/oracle/下devel默认安装在/usr/include/oracle/下安装PHP扩展cdphp-5.3.3/ext/oci8phpizeexportLD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/:$LD_LIBRARY_PATHexportORACLE_HOME="/usr/lib/oracle/11.2/client64/"exportCFLAGS="-I/...

PHP扩展--Suhosin保护PHP应用系统

Suhosin是一个PHP程序的保护系统。它的设计初衷是为了保护服务器和用户抵御PHP程序和PHP核心中,已知或者未知的缺陷。Suhosin有两个独立的部分,使用时可以分开使用或者联合使用。第一部分是一个用于PHP核心的补丁,它能抵御缓冲区溢出或者格式化串的弱点;第二部分是一个强大的PHP扩展,包含其他所有的保护措施。下载安装补丁##高版本不需要,折中选择是否打补丁wgethttp://download.suhosin.org/suhosin-patch-5.3.3-0.9.10.patch.gzgunzipsuhosin-patch-5.3.3-0.9.10.patch.gzcdphp-5.3.3/patch-p1-i../suhosin-patch-5.3.3-0.9.10.patch./configure--with-php-config=/usr/local/bin/php-configmakemakeinstall安装扩展wgethttp://download.suhosin.org/suhosin-0.9.37.1.tar.gztarzxvfsuhosin-0.9.37.1...

PHP扩展--Yaf框架安装

安装/配置编译安装wgethttp://pecl.php.net/get/yaf-2.3.5.tgztar-zxvfyaf-2.3.5.tgzcdyaf-2.3.5/cdextension//usr/local/php-5.3.3/bin/phpize./configure--with-php-config=/usr/local/php-5.3.3/bin/php-configmakemakeinstall修改php.ini文件[yaf]extension=yaf.soyaf.environ=developyaf.library=/home/www/public_html/libraryyaf.cache_config=0yaf.forward_limit=5以上完成后重启apache,可以看到yaf扩展如果出现报错/usr/include/php/ext/pcre/php_pcre.h:29:18:error:pcre.h:Nosuchfileordirectory安装下pear再重新编译yuminstallpcre-develmakeclean来自为知笔记(Wiz)...

PHP扩展--APC缓存安装与使用

apc安装wgethttp://pecl.php.net/get/APC-3.1.13.tgztarzxvfAPC-3.1.13.tgzcdAPC-3.1.13/usr/local/php/bin/phpize./configure--with-php-config=/usr/local/php/bin/php-configmake&&makeinstall来自为知笔记(Wiz)...

Php扩展--protocolbuffers消息打包

安装/配置编译安装wgethttp://pecl.php.net/get/protocolbuffers-0.2.6.tgztar-zxvfprotocolbuffers-0.2.6.tgzcdprotocolbuffers-0.2.6//usr/local/php-5.3.3/bin/phpize./configure--with-php-config=/usr/local/php-5.3.3/bin/php-configmakemakeinstall修改php.ini文件[protocolbuffers]extension=protocolbuffers.so以上完成后重启apache,可以看到protocolbuffers扩展来自为知笔记(Wiz)...

Php扩展--seasLog日志扩展安装

安装/配置编译安装wgethttp://pecl.php.net/get/SeasLog-1.4.4.tgztar-zxvfSeasLog-1.4.4.tgzcdSeasLog-1.4.4/cdextension//usr/local/php-5.3.3/bin/phpize./configure--with-php-config=/usr/local/php-5.3.3/bin/php-configmakemakeinstall修改php.ini文件[seaslog]extension=seaslog.soseaslog.default_basepath=/tmp/logseaslog.default_logger=php_seaslogseaslog.disting_type=1seaslog.disting_by_hour=0seaslog.use_buffer=0seaslog.buffer_size=100seaslog.level=0seaslog.trace_error=1seaslog.trace_exception=1以上完成后重启apache,可以看到seaslog...

PHP系统编程--03.PHP进程信号处理

PHP的pcntl扩展提供了信号处理的功能,利用它可以让PHP来接管信号的处理,在开发服务器端守护进程方面,信号处理至关重要。函数原型boolpcntl_signal(int$signo,callback$handler[,bool$restart_syscalls=true])第一个参数是信号ID第二个参数是信号发生时回调的PHP函数。第三个参数是是否restart,是否重新注册此信号。这个参数如果为false,那此信号只注册处理一次。pcntl_signal的实现<?php//信号处理需要注册ticks才能生效,这里务必注意//PHP5.4以上版本就不再依赖ticks了declare(ticks=1);functionsig_handler($signo){switch($signo){caseSIGUSR1:echo"SIGUSR1";break;caseSIGUSR2:echo"SIGUSR2";break;default:echo"unknow";break;}}//安装信号触发器器pcntl_signal(SIGUSR1,"sig_handler");pcntl_si...

PHP系统编程--01.多进程与多线程

PHP中提供了一个扩展pcntl,可以利用操作系统的fork调用来实现多进程。fork调用后执行的代码将是并行的。PHP官方没有提供多线程的扩展,pecl中有一个pthreads扩展提供了多线程的特性,地址是http://pecl.php.net/package/pthreads,此扩展仅在线程安全版本中可用。多进程使用多进程,子进程结束以后,内核会负责回收资源使用多进程,子进程异常退出不会导致整个进程Thread退出.父进程还有机会重建流程.一个常驻主进程,只负责任务分发,逻辑更清楚.多进程方式更加稳定,另外利用进程间通信(IPC)也可以实现数据共享。共享内存,这种方式和线程间读写变量是一样的,需要加锁,会有同步、死锁问题。消息队列,可以采用多个子进程抢队列模式,性能很好多线程线程是在同一个进程内的,可以共享内存变量实现线程间通信线程比进程更轻量级,开很大量进程会比线程消耗更多系统资源多线程也存在一些问题:线程读写变量存在同步问题,需要加锁锁的粒度过大存在性能问题,可能会导致只有1个线程在运行,其他线程都在等待锁同时使用多个锁,逻辑复杂,一旦某个锁没被正确释放,可能会发生线程死锁某个...

PHP系统编程--02.PHP守护进程

什么是守护进程?一个守护进程通常补认为是一个不对终端进行控制的后台任务。它有三个很显著的特征:在后台运行,与启动他的进程脱离,无须控制终端。常用的实现方式是fork()->setsid()->fork()在glibc里有一个函数daemon。调用此函数,就可使当前进程脱离终端变成一个守护进程,具体内容参见mandaemon。PHP中暂时没有此函数,PHP程序实现守护进程化有2种方法:使用系统命令nohupnohupphpmyprog.php>log.txt&&,这样执行程序虽然也是转为后台运行,但实际上是依赖终端的,当用户退出终端时进程就会被杀掉。需要使用nohup来实现PHP脚本函数实现:<?phpfunctiondaemon(){$pid=pcntl_fork();if($pid<0){die("fork(1)failed!");}elseif($pid>0){exit;//让终端启动的进程退出}chdir("/");//改变当前目录为根目录umask(0);//重设文件权限掩码//建立一个有别于终端的新session以脱离终端$...

Ubuntu12.04 安装LAMP及phpmyadmin

1.安装Apacheapt-getinstallapache22.安装PHP5apt-getinstallphp5libapache2-mod-php53.安装MySQLapt-getinstallmysql-server在安装的时候,如果要求你输入Mysql密码,则输入密码。如果没有要求,则执行下一步。在终端中输入下面命令。mysql-urootmysql>SETPASSWORDFOR'root'@'localhost'=PASSWORD('yourpassword');3.安装MySQL扩展和phpmyadminsudoapt-getinstalllibapache2-mod-auth-mysqlphp5-mysqlphpmyadmincp/etc/phpmyadmin/apache.conf/etc/apache2/sites-enabled/phpmyadmin4.开启rewrite模块sudoa2enmodrewrite5.重启APACHEsudo/etc/init.d/apache2restart 以下是全部脚本##升级软件源apt-getupdate##安...
首页上一页...305306307308309...下一页尾页