Deprecated
: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in
/www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php
on line
1057
首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
4
篇与
的结果
2023-08-09
PHP开发必备工具
PHP开发必备工具在本文中,将介绍在目前软件工程中经常用到的持续集成概念,并且会介绍在PHP开发中,如何能用好PHP目前开源的一些持续集成管理工具,去管理好项目。持续集成的概念持续集成的概念是在现代软件工程中提出的,最早见于敏捷开发方法论中,大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。下面介绍PHP中的持续集成工具:PHPUNIT首先,PHPUNIT是PHP中的单元测试利器,项目地址在:http://www.phpunit.it。它能自动运行你编写的单元测试代码,并给出是否通过的结果。安装步骤如下,可以使用PHP中的PEAR安装:sudo apt-get install php5-curl php-pear php5-devsudo pear upgrade pearsudo pear channel-discover pear.phpunit.desudo pear channel-discover components.ez.nosudo pear channel-discover pear.symfony-project.comsudo pear install phpunit/PHPUnit之后,就可以在命令行下,以如下格式执行phpunit:Phpunit 单元测试的php文件名.php此外,还可以执行如下命令,生成单元测试的覆盖报告:phpunit --coverage-html ../CodeCoverage这将在指定的目录中生成单元测试的覆盖报告,比如这个例子中,将在目录CodeCoverage中生成单元测试覆盖报告,如下图:PHP开发必备 PHP持续集成工具介绍(上)▲点击看大图如果点上图的每一个PHP文件,还可以具体看到每个文件的单元测试覆盖情况,如下图:PHP开发必备 PHP持续集成工具介绍(上)▲点击看大图从上图中,可以看到每个PHP文件中,调用的方法的单元测试覆盖情况,还可以看到具体哪些代码行是已经单元测试覆盖过,哪些没有覆盖过(绿色表示已经覆盖,橙色表示还没覆盖),如下图:PHP开发必备 PHP持续集成工具介绍(上)▲点击看大图PHP CodeSnifferPHP CodeSniffer是一个PHP的代码风格检测器,它根据预先设定好的PHP编码风格和规则,去检查应用中的代码风格情况,内置了ZEND,PEAR的编码风格规则,当然开发者也可以进行自定义。项目的地址在:http://pear.php.net/package/PHP_CodeSniffer/redirected,安装方法如下:sudo pear install PHP_CodeSnifferphpcs --standard=Zend c:\phpcode其中phpcs –standard后指定了使用Zend的建议代码风格标准进行检查,最后一个参数是要检查的PHP文件所在的目录。运行后,检查的一个效果图如下图所示:PHP CodeSniffer▲点击查看大图PHP DependPHP Depend(http://pdepend.org/)是一个PHP中静态代码分析的工具。它可以用来检查你的PHP项目中的代码规模和复杂程度。安装方法如下:sudo pear channel-discover pear.pdepend.orgsudo pear install pdepend/PHP_Depend-beta使用的一个例子如下:pdepend --jdepend-xml=../jdepend.xml --jdepend-chart=../dependencies.svg --overview-pyramid=../overview-pyramid.svg上面会生成一个XML文件,两个SVG的图形文件。其中XML文件说明了项目中各PHP文件的互相依赖调用(引用)情况及每个方法、函数,类的代码行,一个例子如下:<?xml version=”1.0” encoding=”UTF-8”?>其中的noc含义是类的代码的行书,nof为函数的代码行数,noi为接口代码行数,nom为方法method代码行数。接下来我们来看下产生的一张SVG图,该图如下所示:PHP CodeSniffer这张图的反映了项目中包的依赖性度量情况。其基本理论来源于Robert C. Martin的论文(http://www.objectmentor.com/resources/articles/oodmetrc.pdf)中所介绍的关于软件中模块依赖性和稳定性的度量。其中,提到了如下概念:Afferent Couplings (Ca)依赖于被分析package的其他package的数量,用于衡量pacakge的职责。简单来说,即有多少其他的包或模块调用了被分析的包或模块。Efferent Couplings (Ce)被分析package的类所依赖的其他package的数量,用于衡量package的独立性。即它调用了多少其他包。Abstractness (A)被分析package中的抽象类和接口与所在package所有类数量的比例,取值范围为0-1。如果该值为0,证明包中没任何抽象类,有的只是具体实现逻辑方法的类,如果该值为1,则包中只有抽象类或接口了Instability (I)I=Ce/(Ce+Ca),用于衡量package的不稳定性,取值范围为0到1。I=0表示最稳定,I=1表示最不稳定。Distance (D)用于衡量package在稳定性和抽象性之间的平衡。可以看到,最理想的情况是A+I越趋近1的,这样能获得抽象性和稳定性的最佳平衡。此外,介绍php depend中生成的另外一张图的含义,图片如下:PHP CodeSniffer在这张图中,最上面的ANDC表示继承其他类的平均数目,即项目中有多少类是继承其他的类;AHH是继承其他类的层次数。CALLS是方法被调用的总的次数,FANOUT是类所引用的类型数目。而CYCLO是圈复杂度(关于圈复杂度的解析,请参考(http://en.wikipedia.org/wiki/Cyclomatic_complexity)。LOC是代码行数,NOM是项目中的方法的数目,NOC为项目中类的数目,NOP为项目中包的数目。根据上图中标明的除法规则,可以计算出相关的数据。更多的请参考php depend手册(http://pdepend.org/documentation/handbook/reports/overview-pyramid.html)的详细解析。在上一篇文章中,我们为大家介绍了一些PHP持续集成工具,在本文中,我们将介绍继续介绍PHP中的持续集成工具。持续集成的概念持续集成的概念是在现代软件工程中提出的,最早见于敏捷开发方法论中,大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。PHP MESS DECTORPHP MESS DECTOR(简称PMD,项目地址http://phpmd.org/),是基于pdepend的结果进行分析,分析出一旦你的PHP项目超过了pdepend中各具体指标值的规定,从而发出警告提示信息,安装方法如下:sudo pear channel-discover pear.phpmd.orgsudo pear channel-discover pear.pdepend.orgsudo pear install --alldeps phpmd/PHP_PMD使用方法为:phpmd . html codesize,unusedcode,naming,design --reportfile ../messdetector.html --exclude Tests/上面这个命令含义为,使用pdepend中的4个规则codesize,unusedcode,naming,desgin去检查项目的代码,但除了Tests目录不作检查,检查结果生成HTML的格式,保存在/messdetector.html中,结果如下:PHP开发必备 PHP持续集成工具介绍(下)▲点击查看大图PHP COPY PASTE DETECTORPhp copy paste detector(https://github.com/sebastianbergmann/phpcpd)是重构的一个好工具,它用来发现你的项目中的重复代码。安装方法如下:sudo pear channel-discover pear.phpunit.desudo pear channel-discover components.ez.nosudo pear install phpunit/phpcpd注意,必须先安装phpunit。运行方法如下图:PHP开发必备 PHP持续集成工具介绍(下)PHP DEAD CODE Detectorphp dead code detector(https://github.com/sebastianbergmann/phpdcd)是一个检查你的项目中有哪些代码是从来没被调用过的,比如类,方法编写后再没被调用过,这是一个去掉“坏味道”代码的最佳实践,可以增强系统的可维护性。安装如下:sudo pear channel-discover pear.phpunit.desudo pear channel-discover components.ez.nosudo pear install phpunit/phpdcd-beta运行方法下图:PHP开发必备 PHP持续集成工具介绍(下)综合持续集成工具 Jenkins有了上面的各类工具,用户可以在PHP中进行持续集成构建的工作,但还可以使用一款综合的持续集成工具Jenkins(http://jenkins-ci.org/)进行(注:Jenkins其实就是原先的构建工具Hudson,只不过现在改了名称)。这款持续集成工具是个持续构建服务器,包含了上述提到的各种PHP持续构建工具的功能,安装好后,能做到每天持续构建,并将构建的结果通知用户。下面对其进行简单介绍。Jenkins可以使用windows下的计划任务,LINUX下的SHELL以及ANT或者MAVN去进行构建项目,本文以使用ANT为例进行说明,首先必须安装JAVA中的ANT。编写ANT文件如下:<property name="output" location="${basedir}/buildOutput/"/> <target name="init"> <mkdir dir="${output}"/> <mkdir dir="${output}/phpcs/"/> <mkdir dir="${output}/pdepend/"/> </target> <target name="build" depends="init, test, phpcs, phpmd, phpcpd, pdepend"> </target> <target name="test"> <exec executable="phpunit" failonerror="true"> <arg line="--coverage-clover ${output}/CodeCoverage/clover.xml --coverage-html ${output}/CodeCoverage/ ."/> </exec> </target> <target name="phpcs"> <exec executable="phpcs"> <arg line="--report=checkstyle --report-file=${output}/phpcs/checkstyle.xml --standard=Zend ${basedir}" /> </exec> </target> <target name="phpmd"> <exec executable="phpmd"> <arg line=" . xml codesize,unusedcode,naming,design --reportfile ${output}/messdetector.xml --exclude Tests/ " /> </exec> </target> <target name="phpcpd"> <exec executable="phpcpd"> <arg line=" --log-pmd ${output}/phpcpd.xml . " /> </exec> </target> <target name="pdepend"> <exec executable="pdepend"> <arg line=" --jdepend-xml=${output}/pdepend/jdepend.xml --jdepend-chart=${output}/pdepend/dependencies.svg --overview-pyramid=${output}/pdepend/overview-pyramid.svg --ignore=Tests/ . " /> </exec> </target>熟悉ANT的读者应该知道,这里其实是调用了以上说的各个PHP持续集成工具而已。接下来,是安装Jenkins,到Jenkins的官网去下载相符合的操作系统版本,然后就可以按照指引安装,本文以在Ubantu上的安装方法为例说明:wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add –在/etc/apt/sources.list文件最后增加如下这行:deb http://pkg.jenkins-ci.org/debian binary/sudo apt-get updatesudo apt-get install jenkins之后就可以安装成功了,可以通过http://localhost:8080/ 去访问Jenkins了,初始界面如下图:PHP开发必备 PHP持续集成工具介绍(下)Jenkins的设置Jenkins的设置比较复杂,在这里不一一详细论述。但这里稍微提下设置的基本方法。只需要点上图中的“Manage Jenkins”链接,再点“Configure System”则可进入设置面板,其中你可以设置相关的权限设置,也可以设置SMTP用来通知每次的构建成功与否的信息。此外,需要设置Jenkins中的插件设置,要打开相关的插件设置开关,比如使用Git做版本控制工具的,则要设置Git插件为允许状态。设置的步骤很简单,选择“plugin”,点“Install”即可安装,安装后要重新启动Jenkins。我们需要安装一系列的插件去实现php的持续集成,比如安装Clover(https://wiki.jenkins-ci.org/display/JENKINS/Clover+Plugin)去图形化显示phpunit的单元测试覆盖率,安装Checkstyle(https://wiki.jenkins-ci.org/display/JENKINS/Checkstyle+Plugin)去显示PHP CodeSniffer的运行结果,也要安装PMD,而Jdepend(https://wiki.jenkins-ci.org/display/JENKINS/JDepend+Plugin)用来显示PHP Depend的结果。在完成基本设置后,我们可以首先新建立一个Job,点“New Job”链接,给Job命名,之后,我们可以按照http://jenkins-php.org/一文中的教程进行设置,之后就可以运行构建了,下面是两个典型的构建运行图:PHP开发必备 PHP持续集成工具介绍(下)PHP开发必备 PHP持续集成工具介绍(下)可以看到,Jenkins的每次构建,都能综合运用了本文所谈到的各样php集成工具,十分方便,而且能提供十分丰富的图形报表。总结持续集成应该成为你日常项目管理运行维护的重要步骤,通过每天构建项目,能达到敏捷软件工程学中的最佳实践,提高系统的可靠性,减少系统潜在的bug,由于篇幅所限,更多的持续集成工具用法在以后的文章中将会详细论述,读者可参考各工具的参考手册进行学习。
2023年08月09日
26 阅读
0 评论
0 点赞
2023-08-09
Nginx Unit 初探及其性能对比分析 & 压测
Nginx Unit 初探及其性能对比分析 & 压测Nginx Unit初探Nginx Unit是一个开源的,以Nginx为基础、支持多语言的Web服务器,它支持Python,PHP,Go等多语言应用程序,可以在不中断服务的情况下完成部署配置更改,以多种语言运行代码。而它运行多种语言的能力是基于内部路由器进程之间的隔离,路由器进程可终止传入的HTTP请求,以及应用程序进程的分组,路由器进程是持久的,不重新启动。它具有以下特征:使用RESTful JSON API进行动态重配置服务器;同时支持多语言,多版本应用;即将支持的特性有:动态语言的进程管理功能;TLS支持;TCP,HTTP,HTTPS,HTTP/2路由和代理。下面我们以一个简单的php-test应用为例介绍nginx unit的安装和使用。安装Nginx Unit以centos 6.9为例。创建/etc/yum.repos.d/unit.repo。1[unit]2name=unit repo3baseurl=https://packages.nginx.org/unit/centos/$releasever/$basearch/4gpgcheck=05enabled=1开始安装1# yun install unit配置和运行每个单独的应用,都可以在NGINX Unit的配置文件中,使用JSON语法来定义一个applications。下面以配置一个应用为例,名为php-test,该应用的本地路径为/data0/www/htdocs/nginxUnit/。首先,我们创建一个目录并进入相应目录。1# cd /data0/www/htdocs/nginxUnit/在该目录下创建一个index.php文件用于测试。1<?php2echo "hello world";3?>在/data0/www/htdocs目录下创建一个名为phpConfig.json的配置文件。1{ 2 "listeners": { 3 "*:8100": { 4 "application": "php-test" 5 } 6 }, 7 "applications": { 8 "php-test": { 9 "type": "php",10 "processes": 20,11 "root": "/data0/www/htdocs/nginxUnit",12 "index": "index.php"13 }14 }15}该配置文件包含一个监听器和应用配置。当应用被通过HTTP访问时,须定义至少一个监听器 listeners。监听器是一个IP地址和一个被定义的端口,当用户访问时,Unit的监听器会返回正确的结果,IP地址可以是一个完整的IP地址(如127.0.0.1:8100)或(*:8100)。在命令行执行如下命令来创建一个应用php-test1# curl -X PUT -d @/data0/www/htdocs/phpConfig.json --unix-socket /var/run/control.unit.sock http://localhost成功配置后会出现如下提示1# curl -X PUT -d @/data0/www/htdocs/phpConfig.json --unix-socket /var/run/control.unit.sock http://localhost2{3 "success": "Reconfiguration done."4}这时可以访问http://localhost:8100/ 查看index.php的程序是否正常运行。至此我们的环境搭建和应用配置已经完成。性能对比接下来我们进行性能对比分析。将Nginx Unit与我们现在使用的tengine+php-fpm进行对比分析。在进行分析之前,介绍下基本环境。CPU:1核内存:4G操作系统:Centos 6.9php版本:7.0.6nginx unit 的部分参数配置1"listeners": { 2 "*:8100": { 3 "application": "php-test" 4 } 5 }, 6 "applications": { 7 "php-test": { 8 "type": "php", 9 "processes": 20,10 "root": "/data0/www/htdocs/nginxUnit",11 "index": "index.php"12 }13 }tengine +php-fpm 的部分参数配置:1[unit.local] 2user = www 3group = www 4listen = 127.0.0.1:9008 5listen.allowed_clients = 127.0.0.1 6pm = static 7pm.max_children = 20 8pm.start_servers = 1 9pm.min_spare_servers = 110pm.max_spare_servers = 3211pm.max_requests = 150012pm.status_path = /h3_monitor13slowlog = /data0/www/logs/$pool-slow_log14request_slowlog_timeout = 315request_terminate_timeout = 2016catch_workers_output = no17security.limit_extensions = ""压测参数:每个压测指令指令10次,取10次qps值的平均值作为最后的统计数据。压测指令:[root@lianjia ~]# ab -n 10000 -c 100 http://127.0.0.1:8100/[root@lianjia ~]# ab -n 10000 -c 100 http://unit.local/[root@lianjia ~]# ab -n 10000 -c 50 http://unit.local/[root@lianjia ~]# ab -n 10000 -c 50 http://127.0.0.1:8100/[root@lianjia ~]# ab -n 1000 -c 50 http://127.0.0.1:8100/[root@lianjia ~]# ab -n 1000 -c 50 http://unit.local/压测结果:图片每行的的后两列数据是Requests per second和Time per request服务器平均处理时间值。Requests per second是总时间除以总请求数的值,也就是我们平常所所的QPS值,QPS值越高表明服务器处理请求数越高,性能越好。Time per request是服务器平均处理时间,值越小表示服务器处理速度越快。分析这三行数据:1.在并发请求参数相同均为50的前提下,压测请求总数设置为1000和10000两种情况时,发现相同并发数时,压测请求总数越高,其QPS值相对越高,服务器处理速度相对越快,tengine+php-fpm和nginx+unit均是如此;2.对比tengine+php-fpm和nginx+unit在并发请求总数50,压测请求总数10000时,nginx+unit的QPS值高于tengine+php-fpm的91%;服务器平均处理时间也是快87.5%;综上:Nginx+Unit在纯文本输出中的QPS值和服务器平均处理时间是明显高于tengine+php-fpm组合的.其动态化的配置方式也是为未来创造无限可能。
2023年08月09日
18 阅读
0 评论
0 点赞
2023-08-07
ubuntu下用xhprof测试php程序性能
ubuntu下用xhprof测试php程序性能XHProf 是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile。总体来说是个不错的工具,下面介绍下在ubuntu下的安装及使用过程。安装xhprofsudo apt-get install php5-xhprof为了使用图形方式查看调试结果,还必须安装graphviz这个工具,在ubuntu下你可以直接使用apt-get的方式安装,命令为:sudo apt-get install graphviz配置 php.ini在php.ini里加入如下内容:[xhprof]extension=xhprof.so;; directory used by default implementation of the iXHProfRuns; interface (namely, the XHProfRuns_Default class) for storing; XHProf runs.;;xhprof.output_dir=<directory_for_storing_xhprof_runs>xhprof.output_dir=/var/www/html/xhprof将代码加入到要测试的php当中<?pho// cpu:XHPROF_FLAGS_CPU 内存:XHPROF_FLAGS_MEMORY// 如果两个一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORYxhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);// 要测试的php代码//把在pecl下载的xhprof源代码复制到网站根目录下$xhprof_data = xhprof_disable();//$XHPROF_ROOT = realpath(dirname(__FILE__) .'xhprof');include_once "./xhprof/xhprof_lib/utils/xhprof_lib.php";include_once "./xhprof/xhprof_lib/utils/xhprof_runs.php";$xhprof_runs = new XHProfRuns_Default();$run_id = $xhprof_runs->save_run($xhprof_data, "eagle");//(eagle为命名空间,你可以随意取)echo '统计';点击页面下面的统计:显示以下点击 View Full Callgraph
2023年08月07日
10 阅读
0 评论
0 点赞
2023-08-04
The PHP Benchmark (php性能测试)
http://phpbench.com/
2023年08月04日
22 阅读
0 评论
0 点赞