表达式 | gettype($x) | empty($x) | is_null($x) | isset($x) | boolean:if($x) |
$x=""; | string | TRUE | FALSE | TRUE | FLASE |
$x=null; | NULL | TRUE | TRUE | FLASE | FLASE |
var $x; | NULL | TRUE | TRUE | FLASE | FLASE |
$x is undefiend | NULL | TRUE | TRUE | FLASE | FLASE |
$x = array(); | array | TRUE | FLASE | TRUE | FLASE |
$x = false; | boolean | TRUE | FLASE | TRUE | FLASE |
$x = true; | boolean | FLASE | FLASE | TRUE | TRUE |
$x = 1; | integer | FLASE | FLASE | TRUE | TRUE |
$x = 42; | integer | FLASE | FLASE | TRUE | TRUE |
$x = 0; | integer | TRUE | FLASE | TRUE | FLASE |
$x = -1; | integer | FLASE | FLASE | TRUE | TRUE |
$x = "1"; | string | FLASE | FLASE | TRUE | TRUE |
$x = "0"; | string | TRUE | FLASE | TRUE | FLASE |
$x = "-1"; | string | FLASE | FLASE | TRUE | TRUE |
$x = "php"; | string | FLASE | FLASE | TRUE | TRUE |
$x = "true"; | string | FLASE | FLASE | TRUE | TRUE |
$x = "false"; | string | FLASE | FLASE | TRUE | TRUE |
声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
No.1
语法&定义&注释
查询字符串解析到变量,首先看一下parse_str()函数:语法:parse_str(string,array)
定义和用法:
parse_str() 函数把查询字符串解析到变量中。注释:
如果未设置 array 参数,则由该函数设置的变量将覆盖已存在的同名变量。注释:
php.ini 文件中的 magic_quotes_gpc 设置影响该函数的输出。如果已启用,那么在 parse_str() 解析之前,变量会被 addslashes() 转换。
No.2
如何绕过waf程序规则
TL;DR,PHP将查询字符串(在URL或body中)转换为$_GET或$_POST中的数组。例如:/?foo=bar变成Array([foo] => "bar"),查询字符串解析过程使用下划线删除或替换参数名称中的某些字符。
例如/?%20wenson[id%00=42]转换为Array([wenson_id] => 42)
如果遇到waf对wenson_id的值进行拦截时,怎么样使用滥用PHP查询字符串解析器来绕过WAF,可以通过以下面方式来绕过这个解析过程:
/wenson.php?%20wenson[id%00=42"+AND+1=0—在PHP中,上面的示例%20wenson[id%00]中的参数名的值将存储为$_GET["wenson_id"]。
PHP需要将所有参数转换为一个有效的变量名,因此当解析查询字符串时,它主要做两件事:
删除初始空格将一些字符转换为下划线(包括空格)
通过如下所示的简单循环,您可以使用parser_str函数发现哪个字符被删除或转换为下划线:
在这里可以用foo_bar的值进行fuzz测试,“[X]foo[X]bar[X]”是[X]的标记位,对这个标记位进行测试,如果web服务器接受带点或空白的标题名称,也会发生类似的事情。
可以对fuzz测试的一些点:
接下来进行拆分,进行分析:
[1st]foo_barfoo[2nd]barfoo_bar[3rd]
可以看出foo%20bar 等同于 foo+bar ,并且可以被解析为foo bar。如果使用一个正则规则来匹配时:
alert http any any -> $HOME_NET any (\msg: "Block SQLi"; flow:established,to_server;\ content: "POST"; http_method;\ pcre: "/wenson_id=[^0-9]+/Pi";\ sid:1234567;\)
可以使用下面的方式进行绕过:
/?wenson**[**id=1%22+AND+1=1--'/?wenson**%5b**id=1%22+AND+1=1--'/?wenson_id**%00**=1%22+AND+1=1--'
如果像ModSecurity的话,使用这个规则的话SecRule !ARGS:wenson_id "@rx ^[0-9]+$",以上的方式是不成功的,
所以在有时候可以这样子绕过waf:所以在绕PHP文件中,遇到类似的parse_str()函数时,可以尝试去绕过。
/test.php?tt<span style="color:#ab4642">%00</span>=1&%20wenson=fsf23424234234ffsdfds
等同于下面的URL地址:
/test.php?tt=1&wenson=fsf23424234234ffsdfds
No.3
尾言
最后,文章的内容部分参考互联网的文章来写,在绕过的过程中,多尝试一下PHP替代函数进行绕waf。
招聘启事
安恒雷神众测SRC运营(实习生)————————【职责描述】1. 负责SRC的微博、微信公众号等线上新媒体的运营工作,保持用户活跃度,提高站点访问量;2. 负责白帽子提交漏洞的漏洞审核、Rank评级、漏洞修复处理等相关沟通工作,促进审核人员与白帽子之间友好协作沟通;3. 参与策划、组织和落实针对白帽子的线下活动,如沙龙、发布会、技术交流论坛等;4. 积极参与雷神众测的品牌推广工作,协助技术人员输出优质的技术文章;5. 积极参与公司媒体、行业内相关媒体及其他市场资源的工作沟通工作。【任职要求】 1. 责任心强,性格活泼,具备良好的人际交往能力; 2. 对网络安全感兴趣,对行业有基本了解; 3. 良好的文案写作能力和活动组织协调能力。
简历投递至 strategy@dbappsecurity.com.cn
设计师(实习生)
————————
【职位描述】负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。【职位要求】1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;2、有良好的美术功底,审美能力和创意,色彩感强;精通photoshop/illustrator/coreldrew/等设计制作软件;3、有品牌传播、产品设计或新媒体视觉工作经历;【关于岗位的其他信息】企业名称:杭州安恒信息技术股份有限公司办公地点:杭州市滨江区安恒大厦19楼学历要求:本科及以上工作年限:1年及以上,条件优秀者可放宽
简历投递至 strategy@dbappsecurity.com.cn
安全招聘————————公司:安恒信息岗位:Web安全 安全研究员部门:战略支援部薪资:13-30K工作年限:1年+工作地点:杭州(总部)、广州、成都、上海、北京
工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…【岗位职责】1.定期面向部门、全公司技术分享;2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;3.负责完成部门渗透测试、红蓝对抗业务;4.负责自动化平台建设5.负责针对常见WAF产品规则进行测试并落地bypass方案【岗位要求】1.至少1年安全领域工作经验;2.熟悉HTTP协议相关技术3.拥有大型产品、CMS、厂商漏洞挖掘案例;4.熟练掌握php、java、asp.net代码审计基础(一种或多种)5.精通Web Fuzz模糊测试漏洞挖掘技术6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法7.有过独立分析漏洞的经验,熟悉各种Web调试技巧8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)【加分项】1.具备良好的英语文档阅读能力;2.曾参加过技术沙龙担任嘉宾进行技术分享;3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;5.开发过安全相关的开源项目;6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;7.个人技术博客;8.在优质社区投稿过文章;
岗位:安全红队武器自动化工程师薪资:13-30K工作年限:2年+工作地点:杭州(总部)【岗位职责】1.负责红蓝对抗中的武器化落地与研究;2.平台化建设;3.安全研究落地。【岗位要求】1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等数据存储方案;3:熟悉域安全以及内网横向渗透、常见web等漏洞原理;4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。【加分项】1.有高并发tcp服务、分布式等相关经验者优先;2.在github上有开源安全产品优先;3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;5.具备良好的英语文档阅读能力。
简历投递至 strategy@dbappsecurity.com.cn
专注渗透测试技术
全球最新网络攻击技术
END
对于一个php程序员来说,php运行环境是我们最亲密的伙伴之一,一般我们都会选择一个集成好的运行环境在我们电脑上安装。在我们职业生涯中用过许多的集成开发环境,比如:Xampp、Wamp、phpstudy、宝塔、upupw等等。今天要给大家推荐的是一款名叫Laragon的Windows中的php集成运行环境,其丰富的功能堪称php集成环境界的全家桶,下面我们一起看一看。
Laragon
完美支持laravelLaragon专注于性能 - 围绕稳定性,简单性,灵活性和自由度而设计,非常适合构建和管理现代Web应用程序。
Laragon有自己的service orchestration异步和非阻塞管理服务,可自动创建虚拟主机,所以你会发现Laragon可以快速顺畅地运行。
Laragon对 Laravel 非常友好,相信不少人在windows下开发搭建laravel官方推荐的运行环境Homestead 时吃过不少的亏,下载了一堆软件,安装完却搞不明白要怎么组合在一起运行起来,而Laragon完美支持laravel。
Laragon可以将PHP,Python,Node.js,Java,Golang,Ruby集于一身,支持Mariadb,MySQL,Redis,Memcached,Postgresql,Mangodb等数据库。还支持Git,Yarn,Composer,终端等等,可以说安装了laragon,开发所需要的各种软件就都安装好了,真正的开箱即用。
Laragon 特性
自动创建虚拟主机(Virtual Host,Valet 也有这样的功能)基于自己的需求为不同的环境设置不同的配置邮件接收和发送轻松创建框架应用,如 Laravel、Symfony、WordPress、Joomla 等非常方便地切换 PHP、Apache、MySQL 的不同版本Laragon 安装
laragon官网地址:请自行搜索吧,自媒体中不让发网址链接(尴尬)。
目前的版本是4.0.14,php版本默认是7.2.11,安装完毕出现如下界面:
laragon启动界面点击启动所有开始使用,以下是我所用环境的启动界面:
laragon启动后的界面安装完毕即可投入使用,详细的使用介绍就不多赘述,试试鼠标右键点击界面,自行体会发现的乐趣。
我后续会继续发一些关于laragon的详细使用教程,欢迎关注。
前言
实验室的孙同学,希望自己的毕业作品是一套“通用的企业后台管理系统”,因为他经常要给客户做网站,希望能有一套工具来快速生成。
今天,就和大家分享一下我对此类系统的分析和理解,并作为最近一阶段实验室的《独立开发实战项目》
此类系统的难度是什么?
自行车的结构很简单,折叠自行车也仅仅是增加了一点复杂度。但是,如果客户要求 “折叠后的自行车要装进双肩包”,你怎么办?
所以,最大的难度是:灵活、灵活、灵活;如何灵活满足各种客户的需求,是不变的追求。
什么是,通用的企业后台管理系统
很多网站的主要功能都差不多,比如:用户、新闻、产品这些,不同的网站主要是设计区别,以及少量的功能差别,尤其是对企业网站来说。
为了降低开发成本,就可以开发一套相对通用的管理系统,快速生成,也就是《内容管理系统》
什么是,内容管理系统
英文缩写:CMS,其功能可谓万金油。只要是 “内容” 都归它管。这些都是内容:会员、新闻、文章、日志、商品等等,所以可大可小。
大到门户网站的新闻系统(比如news.163.com),小到个人博客,都是内容管理系统。
有哪些,开源的内容管理系统
开源 = 免费下载源代码
十几年前我用过 ecms、dedecms假设网站,最高日IP近10万,说起来还有点小骄傲呢。后来在CMS爆发期,各种各样的管理系统蜂拥而出,不过我已经不怎么用此类产品了。
厉害一点的像wordpress、Joomla、Drupal等,厉害到什么程度呢? 虽然 wordpress 是免费的,但是有些公司为它们开发插件、设计模板,能有千万级美金的收益。
内容管理系统,有什么特点
后台强大以 ecms 做例子,它的后台大约是这样的。
有些企业网站,做出来的网站可能是这样的(仅仅是举例,也有很多用来制作大型网站)
配置多样因为功能太多,所以需要配置大量的开关,来进行取舍。所以,越强大的CMS开关越多,专业的CMS是需要专门培训的(就好像你学 office 软件一样)
插件开发再好的系统也不可能兼容所有需求,尤其是内容本身的涵盖就很广。所以,好的CMS必须留有“插件”机制,允许开发人员,针对特性需求进行二次开发。就好像U盘一样,即插即用,随时可拓展功能。
这方面,可以参考 wordpress,这是它的插件库:https://wordpress.org/plugins/,目前有 55439 个插件,没有做不到只有想不到。
模板管理因为一套CMS要胜任不同的前台需求,加之后台功能丰富无比,所以一套好的模板引擎必不可少,尤其是自定义的模板标签,这样才能实现千变万化的数据调用。
当然,不要一口吃个胖子
作为实验室的萌新,想一下完成这样的内容管理系统,过于苛刻了。我们可以分成多个版本来实现。
基本功能管理员模块配置模块用户模块内容模块
这是最基础的,有了这几个模块,就可以实现一些基本需求了,至少做个价值千元的企业网站不成问题。
插件机制因为需求千变万化,所以应尽快完成“插件”功能,将一些非核心功能以插件的形式加载,避免对系统核心造成负面影响。
模板机制为了实现数据的灵活调用,提供一些模板标签吧。
不断迭代一个系统,永远没有完美的时候,如何保持轻盈又能灵活完成需求,是开发团队需要不断思考的。
总结
内容管理系统,作为一个“万金油”,还蛮适合作为新人的入门之作的,从简单到复杂。
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。
一、安装ThinkPHP5
安装需求:PHP版本不得小于5.4;
1、从官网进行下载安装
2、通过composer进行安装
如果还未安装composer,请先安装composer并配置环境变量
运行如下命令,进行安装:
composer create-project topthink/think=5.0.* tp5 --prefer-dist
3、通过git安装
3.1、运行如下命令,安装thinkphp的应用项目
git clone https://github.com/top-think/think tp5
安装成功后的界面:如下图所示
3.2、进入到刚才已下载的tp5目录下,运行如下命令,安装thinkphp的核心框架
git clone https://github.com/top-think/framework thinkphp
安装成功后的界面:如下图所示
安装完成,验证是否安装成功,在浏览器中输入:http://hostname/tp5/public/
如果浏览器显示如下图所示,则说明框架安装成功。
二、目录结构框架的目录结构,如下图所示:
application:应用目录
index:模块目录
index/config.php:模块配置文件
index/common.php:模块公共函数文件
index/controller:控制器目录
index/model:模型目录
index/view:视图目录
config.php:应用配置文件
command.php:命令工具配置文件
common.php:应用公共函数文件
tags.php:应用行为扩展定义文件
extend:扩展类库目录
public:WEB 部署目录(对外访问目录)
static:静态资源存放目录(css,js,image)
index.php:应用入口文件
.htaccess:用于apache重写
router.php:快速测试文件
runtime:应用的运行时目录
vendor:通过composer安装的第三方类库目录
thinkphp:系统核心目录
lang:系统语言包目录
library:框架核心类库目录
tpl:系统模板目录
base.php:基础定义文件
route:路由配置目录
三、ThinkPHP框架最基本的架构
thinkphp是基于MVC模式开发的,业务逻辑、数据、界面显示分离,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
1、入口文件
用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件。入口文件的内容如下:
在入口文件index.php中加载了基础文件base.php文件,在base.php中干了这样一些事情:
载入Loader类
注册自动加载
注册错误和异常处理机制
实现日志接口
注册类库别名
加载完基础文件之后,最后在index.php中执行应用并响应。
2、应用
ThinkPHP的应用是一个管理系统架构及生命周期的对象,由系统创建完成,应用通常在入口文件中被调用和执行,每个应用都具有自己独立的模块、config配置文件以及common公共函数文件。
3、模块
一个应用是可能是由多个模块组成的,通俗的来说,这些模块即为该应用目录下面的一个个的子目录,每个模块都有自己独立的MVC结构、config配置文件以及common公共函数文件。
注:模块名称请避免使用PHP保留关键字,否则会造成系统错误。
4、控制器
控制器主要负责接收发送过来的请求,并调用相关的模型业务逻辑的数据处理,并最终将用户请求数据渲染到视图页面上。
5、模型
模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。在定义模型时,要注意和表名对应,因为框架中的模型会自动对应数据库中的数据表。在ThinkPHP中模型类的命名规则是除去表前缀的数据表名称,命名方式采用的驼峰命名法,而且模型的首字母要大写。
6、视图
视图接收从控制器渲染过来的数据,将数据渲染的成用户可见的页面。
7、命名空间
命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。
通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。名字空间对全局实体加以域的限制,从而合理的解决命名冲突。
1.解压客户端放到一个目录下,新建tnsnames.ora放到客户端文件夹的子目录下。
2.加入以下代码:est_db是自己起的连接名字,IP替换为远程oracle的IP,service_name放数据库名字
3.开启php的oci扩展或者pdo_oci扩展,连接测试。
php7因为没有带php_oci_11g的扩展,需要自己安装获取去下载对应版本的dll文件,放到php的ext目录下,在php.ini中开启扩展。
在开启后可能会出现windows缺失oci.dll文件。
4.将上面客户端里面的oci.dll文件拷贝到php的目录下即可--》启动php,查看PHPinfo里面应该会出现如下扩展:
5.测试尝试连接数据库代码:
6.PDO方式会抛出如下的异常(SQLSTATE[]: pdo_oci_handle_factory: <<Unknown>> (ext\pdo_oci\oci_driver.c:642))
这时候如果把刚才拷贝到php目录下的文件删除的话,有些被用到肯定就不能删,经过测试,只有下面这个文件和刚才的oci.dll文件不能删除。
7.还有个特点就是很大,里面封装了很多函数扩展什么的。
现在就大功告成了,在此测试一下上面的PHP代码:
【IT科技之家-itkeji综合 -文章版权声明】
非特殊说明,本文版权归 [ IT科技之家-itkeji综合 -ITMFB] 所有,转载请注明出处.
PHP一直被唱衰,特别是某一些培训机构为了推python、java等语言的培训,总是搞一些编程语言排行榜,误导编程初学者,给初学者造成PHP不行了的印象。是否PHP真的在走下坡路?PHP语言到底市场份额占有多少?
不妨根据 W3Techs 提供的数据和报告,看看 PHP 最新的使用统计和市场定位情况。W3Techs 是国外一个专门调查 Web 技术的网站,提供有关 Web 各种技术的使用情况信息。
来源地址:https://w3techs.com/technologies/overview/programming_language
以上是W3Techs提供的2019年12月6号的统计数据。
是的,你没有看错!PHP在WEB网站服务器端使用的编程语言所占份额高达78.9%,稳居第一!将排在第二位的ASP.NET和第三位的JAVA远远甩在身后。
那有人又开始杠了,你只是统计的一个月的,不具有代表性,那我们再来看看最近一年的情况。
(WEB服务器端编程语言使用情况统计)
(折线图形式)
上图我们可以看到PHP语言在WEB服务器端语言中基本稳定保持在79%,ASP.NET有小幅度下滑,Java小幅上升。
总而言之:
PHP是世界上最好的语言,没有之一!不是梗,也不是空穴来风。PHP是免费开源的、WEB开发全球使用最多、生态最好、维护成本也是最低的一种网站服务端开发语言,所以做网站编程开发首选肯定是PHP,PHP也是学习周期最短,入门最容易的一门编程语言,不像Java、Python、.NET等需要一定的学历,另外也是最好找工作的一门语言。
我们再来看看有哪些知名的网站使用的是PHP语言。
全部使用PHP的网站
php中文网
Smzdm
Asus
Nba
Pulzo
Getpocket
部分使用 PHP 的热门网站
Wikipedia
Vk
WordPress
Ettoday
Instructure
腾讯
新浪
百度贴吧
网易
360
宝宝树
那我们学习PHP,要学习哪个版本呢?
我们来看下具体的统计:
从图中可以看出,PHP 5 和 PHP 7 是目前的主流。尤其是 PHP 5,大有还能再战几年的势头,至于 PHP 4 和 3 可以说是已经被抛弃了。
从PHP7开始,性能更是质的提高!最新一个版本PHP7.4也在11月底公布了,具体可参考《PHP 7.4.0刚刚发布!一起看看有哪些新特性》。
PHP8也即将发布,每个新版本都朝着更好的PHP迈出了又一步,届时php会走的更远!
既然您已经习惯了在您的网站上使用HTML,现在是时候处理PHP了,如果您搜索百度就会发现PHP的中文解释,其英文解释如下:
这是一种可以用来增强HTML网站的编程语言。为什么使用PHP ?这里有一些很好的理由。
Now that you are comfortable using HTML on your website, it is time to tackle PHP, a programming language you can use to enhance your HTML website. Why use PHP? Here are some great reasons.
与HTML 关系友好 Friendly With HTML
任何已经拥有网站并且熟悉HTML的人都可以轻松地进入PHP。事实上,PHP和HTML在页面中是可互换的。您可以将PHP放在HTML外部或内部。虽然PHP为您的站点添加了新特性,但基本外观仍然是用HTML创建的。
Anyone who already has a website and is familiar with HTML can easily make the step to PHP. In fact, PHP and HTML are interchangeable within the page. You can put PHP outside the HTML or inside. While PHP adds new features to your site, the basic appearance is still all created with HTML. Read more about using PHP with HTML.
互动功能 Interactive Features
PHP允许您以HTML所不能的方式与访问者交互。您可以使用它来设计简单的电子邮件表单或精心设计的购物车,以保存过去的订单并推荐类似的产品。它还可以提供交互式论坛和私有消息传递系统。
PHP allows you to interact with your visitors in ways HTML alone can't. You can use it to design simple email forms or elaborate shopping carts that save past orders and recommend similar products. It can also deliver interactive forums and private messaging systems.
容易学习 Easy to Learn
开始使用PHP要比您想象的容易得多。通过学习一些简单的功能,你可以用你的网站做很多事情。一旦您了解了基本知识,就可以查看internet上大量可用的脚本,您只需稍微调整一下即可满足您的需求。
PHP is a lot easier to get started with than you might think. By learning just a few simple functions, you are able to do a lot of things with your website. Once you know the basics, check out the wealth of scripts available on the internet that you only need to tweak slightly to fit your needs.
一流的在线文档 Top-Notch Online Documentation
PHP文档是web上最好的。易如反掌。每个函数和方法调用都有文档记录,其中大多数都有大量的示例 可供您学习,还有来自其他用户的评论。
The PHP documentation is the best on the web. Hands down. Every function and method call is documented, and most have tons of examples you can study, along with comments from other users.
低成本和开源 Low Cost and Open Source
PHP在网上是完全免费的。它是全球公认的,所以你可以在所有的网站开发和设计任务中使用它。
PHP is available online absolutely free. It is accepted globally so you can use it on all website development and design tasks.
兼容的数据库 Compatible With Databases
通过扩展或抽象层,PHP支持包括MySql在内的各种数据库。
With an extension or abstraction layer, PHP supports a wide range of databases including MySql.
它只是工作 It Just Works
PHP比其他任何东西都更容易更快地解决问题。它是用户友好的,跨平台的,易于学习。你还需要多少理由在你的网站上尝试PHP ? 开始学习PHP吧。
PHP solves problems easier and faster than almost anything else out there. It is user-friendly, cross-platform and easy to learn. How many more reasons do you need to try PHP on your website? Just start learning PHP.
好了,读完此文,您有何感想?欢迎关注互动!
注明:图片及英文均来源于网络,若侵权请告知作者删除!本百家号已进入受全网原创保护状态!若您不信,仍坚持大胆搬运或抄袭本文,请附加本文作者及出处!谢谢!
Go 是一种功能强大的编程语言,具有独特的功能组合。而 PHP 是在服务器端执行的脚本语言,与 C 语言类似,是常用的网站编程语言,同时适用于所有微服务、小型、中型乃至大型应用程序。对于开发者而言,两者在使用过程中,有哪些不同的体验?本文即将为大家揭晓。
作者 | Dan Gurgui
译者 | 弯月,责编 | 屠敏
16岁的时候,我发现了PHP。这是我学习的第一门编程语言。当时,我利用PHP来检查用户提交的表单并发送电子邮件,大多数表单都是“联系我们”。多年以来,我始终将PHP作为我的强项,且坚持不懈地发展壮大自己的PHP知识和技能。虽然我觉得自己算不上PHP高手,但这是我最了解的编程语言。以前,我曾有机会在小型项目中使用Ruby、Java、Python和NodeJS。我通过这些经验比较PHP和其他编程语言,了解如何更好地利用PHP的优点并克服它的缺点。
6个月前,我成为了 MessageBird 的一名工程师。申请工作的时候,我填写了PHP,但是我没想到入职后我就开始使用 GoLang,而且与PHP渐行渐远。这种一次很好的经历,在这段时间里,我学习了一种新的编程语言,而如今我又回到了PHP,同时我还拥有6个月的Go编程经验。
Go是一种功能强大的编程语言,具有独特的功能组合。我很遗憾没能更深入地学习Go。我返回PHP的原因与编程语言本身无关,但是,我想总结一下这6个月的经验,并比较一下这两种语言。
静态与动态
GoLang是一种静态编程语言,不像PHP那样是动态的。因此,你需要在初始化变量和对象时提前想清楚。在PHP中,你永远不会初始化变量,需要时当场使用就可以了。因此,在声明一个新变量之前,对于GoLang而言你需要三思而后行,我发现这比在PHP中检查变量的做法更有效率。PHP 7添加了类型声明,这是一个更好的实践,但是在编写代码之前三思而后行是一种更健康的做法。
子程序与并行处理
GoLang 非常神奇的功能之一就是goroutine。这个功能支持异步运行功能。PHP中没有任何功能与Goroutines的简单性和易用性相提并论。每当需要在PHP中进行并行处理时,你都需要添加外部的排队机制(Beanstalk、RabbitMQ等)。这会加剧基础架构的复杂性,并增加项目的复杂性。
GoLang的并行处理远远超越了PHP。
面向对象功能
自从编程问世以来,面向对象的概念一直拥有一席之地。90年代,面向对象在C++中得到了广泛应用,也因此成为了主流范式。面向对象最吸引我的地方在于,它允许工程师使用代码创建业务逻辑图,事实证明,当不断发展的系统发生变化时,这种做法提供的价值无可限量。PHP和GoLang都提供面向对象的功能,但是,这两种语言之间存在很大差异。
我花了很长时间才习惯了隐式接口。在GoLang中,在实现所有方法后,类型就会满足接口要求。但在PHP中,你需要显式地定义类型所需的接口,然后开始实现。有了Go的这一功能,你不需要提前思考应用程序的接口,这一点与我对静态类型语言的认知正好相反。
不断发展的模型具有复杂的需求,而领域驱动的设计可以满足这种需求。为此,你需要许多面向对象的功能,PHP也的确提供了许多这样的功能:trait、抽象方法和类,final方法和类,魔术方法等等。GoLang缺少这些功能,这是一个难以克服的限制条件。因此,我认为GoLang仅适用于微服务或小型应用程序,而PHP适用于所有微服务、小型、中型乃至大型应用程序。
测试
我认为,在决定项目质量方面,测试是最重要的工作:单元测试、集成测试、功能测试、UI测试、性能测试等等,项目拥有的测试越多,交付的质量就越好。GO和PHP的单元测试框架都很出色,Go拥有嵌入式测试包,而PHP有 PHPUnit,它们都提供了一组丰富的功能,可用于测试你的代码。PHPUnit的功能比GoLang测试包更多,因为PHP的功能更多。这两种工具都可以完成编程语言的工作。然而, 在进行高级测试时,PHP和Go就会表现出很大的不同。
首先,对于性能测试,Go的测试包中拥有很多性能测试的功能。pprof 等许多库都可以使用这些功能来创建华丽的数据报告。虽然PHP也有一套可用于性能测试的库和技术,但Go的更加易于使用。我相信这是静态类型语言的优势之一。
其次,对于高级测试技术(例如BDD、TDD和A/B测试),PHP拥有更多支持、更多库,还有一个更大的社区。例如,两种语言都实现了Cucumber(或Gherkin),但是PHP 的 BEHAT 实现支持40多种语言,是完全基于独立组件构建的,而且在GitHub上的支持比Cucumber更多(更多分支、更多给星等等)。
最后,对于功能测试或UI测试,PHP的库更多,且对现有工具的支持更好。Selenium 拥有非常强大的PHP支持(3000多个跨浏览器测试、视频记录、文本和可视日志等),而对于Go来说,只有一个没有良好维护的驱动程序 tebeka / selenium(最后一次提交发生在5个月前)。
其他差异
两种语言之间还有许多其他差异,重点包括:
GoLang 的性能比PHP更好。我们有数百种基准,可以在各种情况下测试 PHP 和 GoLang,但大多数时候明显都是 GoLang 胜出。最重要的是,Go的开发速度很快:测试运行速度更快、内存使用效率更高、CPU使用率更低。PHP社区的人数远远超过了 GoLang,而且支持非常出色。我发现 GoLang 使用了许多糟糕的东西,例如代码生成器,这都是PHP社区几年前抛弃的东西。打包维护也很不相同。在GoLang中,打包维护是内部管理的;而PHP有两层不同的实现方式:第一,PHP扩展级别;第二,每个人都使用的库级别。PHP的情况更为复杂,而go则将两层管理放到了一起。
最后一点想法
这两种语言有明显的区别,在两者之间做选择非常容易。GoLang 的性能更好,拥有原生异步功能以及其他基本功能,非常适合需要频繁使用的小型应用程序和微服务。
然而,随着应用程序的不断增长,业务逻辑复杂度加剧的情况下,PHP是很自然的选择,因为你可以充分利用PHP的面向对象功能和社区支持。
原文:https://medium.com/swlh/6-months-with-golang-after-many-years-with-php-c52124fb7da?
本文为 CSDN 翻译,转载请注明来源出处。
【End】
昨天(14号),根据Sam Soltano发布有关PHP网站有关PHP版本数据显示,PHP网站中有50%使用php7版本以上,距离其PHP7最初发布已经过去4年时间了。
PHP7的发布使得php网站运行性能提升一倍左右,PHP作为web开发最热门编程语言,一直从专注前端用户的体验效果。我们都应该知道PHP5是PHP发展历史上性能与功能上的一次重要改革,但是随意web开发的更高需要,大型PHP开发项目PHP5表现比较吃力,自从PHP7发布之后,web开发将要打破一切。
从官方说法,性能提升:PHP7比PHP5.6性能提升了两倍,而且全面支持64位,更重要是修改了之前发现的致命错误,支持更多的类扩展,满意开发的需要,所以PHP7的发布将是未来里程碑的发展。
目前新PHP网站已经不再把PHP5版本作为首先开发版本,默认开发版本页是推荐PHP7以上版本,而且有更多的旧网站已经升级到PHP7以上。
虽然PHP7已经发布有四年之久,但是并没有在更短时间内能超过PHP5版本,主要原因是PHP5版本系列已经发布许久,而且是当时最优秀的版本,从PHP6发布开始,PHP5并没有被直接淘汰,PHP6出来之后PHP5.7更加受到开发者珍惜,PHP5.7系列的有PHP所有完整功能,所以PHP7从性能上弥补PHP5的不足。
所以未来PHP7版本将是PHP又一次重要的改革,我相信未来很长一段时间很难改变PHP7的地位。