您的位置:

php5.3.23性能,PHP56

本文目录一览:

php是什么意思

php通常指超文本预处理器,用于面向对象、命令式编程,是一种通用开源脚本语言。

主要特点:

为开源性和免费性、快捷性、数据库连接的广泛性、面向过程和面向对象并用。优点是利于学习,使用广泛。此外,php还可以指菲律宾比索的标准货币代码符号,MPLS网络中的倒数第二跳弹出功能。是英文超级文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种HTML 内嵌式的语言,是一种在服务器端执行嵌入HTML文档的脚本语言,语言风格有些类似于C语言,被广泛的运用。  

简介:

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

特性包括:

1、PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法

2、PHP可以比CGI或者Perl更快速的执行动态网页——动态页面方面,与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成htmL标记的CGI要高许多;PHP具有非常强大的功能,所有的CGI的功能PHP都能实现

3、 PHP支持几乎所有流行的数据库以及操作系统。

4、最重要的是PHP可以用C、C++进行程序的扩展!

语言特点:

开源免费

PHP是一个受众大并且拥有众多开发者的开源软件项目,Linux + Nginx + Mysql + PHP是它的经典安装部署方式,相关的软件全部都是开源免费的,所以使用PHP可以节约大量的正版授权费用。不过PHP作为一个开源软件,它缺乏大型科技公司的支持背景,网络上对它的唱衰也是经久不衰,不过它的持续迭代和性能持续增强的现实却是鼓舞人心的,PHP社区用实际行动给予各种质疑强有力的回击。

快捷高效

PHP的内核是C语言编写的基础好效率高,可以用C语言开发高性能的扩展组件;PHP的核心包含了数量超过1000的内置函数,功能应有尽有很全面,开箱即用程序代码简洁; PHP数组支持动态扩容,支持以数字、字符串或者混合键名的关联数组,能大幅提高开发效率; PHP是一门弱类型语言,程序编译通过率高,相对其他强类型语言开发效率快;PHP天然热部署,在php-fpm运行模式下代码文件覆盖即完成热部署;PHP经过20多年的发展,在互联网上可以搜到海量的参考资料供参考学习。

性能提升

PHP版本越高它的整体性能越高,根据官方介绍,PHP7.0.0 对比PHP5.6性能就提升了2倍,PHP7.4已经比PHP7.0快了约30%,PHP8.0在性能上又相对PHP7.4大约改进了10%。PHP 8.0 引入了 JIT编译器特性,同时加入多种新的语言功能,例如命名参数、联合类型、注解、Constructor Property Promotion、match 表达式、nullsafe 运算符以及对类型系统、错误处理和一致性的改进。PHP拥有自己的核心开发团队,保持5年发布一个大版本、1个月发布2个小版本的频率,最新的版本是PHP8.08 。

跨平台

每个平台都有对应的php解释器版本,指针对不同平台均编译出目标平台的二进制码(PHP解释器),php开发的程序可以不经修改运行在windows、linux、unix等多个操作系统上。

常驻内存

php-cli模式下可以实现程序常驻内存,各种变量和数据库连接都能长久保存在内存实现资源复用,比较常用的做法是结合swoole   组件编写cli框架。

页面生命周期

在php-fpm模式下,所有的变量都是页面级的,无论是全局变量还是类的静态成员,都会在页面执行完毕后被清空,对程序员水平要求低,占用内存非常少,特别适合中小型系统的开发。

运行机制:

PHP常见的运行模式有2种,分别是php-fpm 和php-cli 。当PHP 选择运行在php-fpm模式下,所有的变量都是页面级的,无论是全局变量还是类的静态成员,都会在页面执行完毕后被清空。运行在php-cli模式下可以实现程序常驻内存,各种变量和数据库连接都能长久保存在内存 实现资源复用,性能可以得到很大的提升,php-cli开发比较复杂能但是能够获取更高的性能,对开发者的要求比较高需要比较高的开发水平,比较常用的模式是结合swoole 组件编写cli框架,各种变量能保存在跨进程的高性能共享内存 Table ,可以开发出支持热启动的php-cli可靠各类应用系统。

php-fpm在PHP 5.3.3 版本成为了官方正式组件(2010-07-22),它提供了稳定可靠的进程管理服务,进程不足时候可以智能扩充数量,闲置时候可以自动回收销毁多余的进程,同时它对程序的容错能力很强大运行非常稳定,可以应付企业级的开发需求。php-fpm友好的完成了使用HTTP/HTTPS等TCP/IP互联网协议下进行的用户的输入输出,页面级生命周期各种资源用完即释放,不存在内存泄漏的问题。php-fpm也提供有一些常驻内存的技术支持,例如PHP 7.4引入的opcache.preload也能实现局部的PHP类和函数的常驻内存,不过这个方法不够灵活,和服务器配置捆绑的太死了。

php-cli因为能实现各类资源的常驻内存,所以可以资源复用,更高效完成多进程编程和异步编程,可以开发出负载能力更高的应用系统。但是相对php-fpm的简单编程开发,开发者要注意很多的事项和需要做很多附加的控制器开发,否则就无法实现期待中的高性能。

首先开发者需要去实现可靠的进程管理服务,保证系统进程遇到各类错误退出运行后能够自动创建新的进程,只有这样才能保证后续的服务请求有足够空闲进程可分配。每个业务代码段都要做异常处理,让进程遇到非致命错误时候不会退出,因为进程重启意味程序和各类资源需要再次加载,这个过程性能消耗不小,所以只有进程稳定运行了常驻内存才有意义。

其次因为常驻内存,编写的新的程序必须重启服务才能生效,这一点习惯了fpm模式的开发者会感到比较陌生。另外开发者需要手工释放内存,否则系统长时间运行后会出现内存泄露。同时在cli模式下,我们不能像fpm里直接用 $_SERVER、$_POST、$_GET、$_COOKI和$_FILES 进行编程工作,需要自己去解析各种互联网通讯协议完成用户的输入输出。要实现多进程编程利用多核CPU计算,还有学习使用pcntl和posix编程,这里涉及到了异步编程逻辑,这块难度还是比较大的。比较常用的模式是结合swoole 组件编写cli框架。

PHP是一个活跃的社区开发语言,有专业的核心开发团队在持续不断的迭代,最近一个版本就是PHP 8.0.8 引入了很多的新特性。

语言参考:

内置函数

PHP 有很多标准的函数和结构。还有一些函数需要和特定的扩展模块一起编译,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。例如,要使用 image 函数中的 imagecreatetrue,需要在编译 PHP 的时候加上 GD 的支持。或者要使用 mysqli_connect函数,就需要在编译 PHP 的时候加上 MySQLi 支持。有很多核心函数已包含在每个版本的 PHP 中如字符串和变量函数。调用 phpinfo或者 get_loaded_extensions可以得知 PHP 加载了那些扩展库。同时还应该注意,很多扩展库默认就是有效的。

静态网站与动态网站的区别

静态网站:web1.0 时代

动态网站:web2.0 时代

静态网站特点:

1、网页内容一经发布到网站服务器,无论是否有用户访问,每个静态页面的内容都是保存在网站服务器上的。也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件。

2、静态网页的内容相对稳定,因此容易被搜索引擎检索。

3、 静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难。

4、静态网页的交互性较差,在功能方面有较大的限制。

动态网站特点:

1、交互性:网页会根据用户的要求和选择而动态地改变和响应,浏览器作为客户端,成为一个动态交流的桥梁,动态网页的交互性也是今后web发展的潮流。

2、自动更新:即无须手动更新HTML文档,便会自动生成新页面,可以大大节省工作量

3、因时因人而异:即当不同时间、不同用户访问同一网址时会出现不同页面。

动态网页是与静态网页相对应的,静态网页的后缀是以 .htm , .html , .shtml , .xml ,动态网页的后缀是以 .asp , .jsp , .php , .perl , cgi 等形式。在动态网页网址中有一个标志性的符号"?"

php的优点有哪些?

1、良好的安全性

PHP是开源软件,所有PHP的源代码每个人都可以看得到,代码在许多工程师手中进行了检测,同时它与Apache编绎在一起的方式也可以让它具有灵活的安全设定,PHP具有了公认的安全性能。开源造就了强大,稳定,成熟的系统。

2、跨平台特性

PHP几乎支持所有的操作系统平台及数据库系统,并广为流行。

3、执行速度快,

效率高

PHP是一种强大的CGI脚本语言,语法混合了C、Java、Perl和PHP式的新语法,执行网页速度比CGI、Perl和ASP更快,而且内嵌Zend加速引擎,性能稳定快速,占用系统资源少,代码执行速度快。PHP消耗相当少的系统资源。的源代码:

所有的PHP源代码事实上都可以得到。

4、很好的移植性和

扩展性强

PHP具有很好的开放性和可扩展性,PHP可以运行在任何服务器上(不管是windows还是Linux)属于自由软件,其源代码完全公开,任何程序员为PHP扩展附加功能都非常容易。在很多网站上都可以下载到最新版本的PHP。目前,PHP主要是基于Web服务器运行的,支持PHP脚本运行的服务器有多种,其中最有代表性的为Apache和IIS。

5、降低网站开发成本

PHP不受平台束缚,可以在UNIX、Linux等众多不同的操作系统中架设基于PHP的Web服务器。采用Linux+Apache+PHP+MySQL这种开源免费的框架结构可以为网站经营者节省很大一笔开支.

6.支持面向对象

面向对象编程(OOP)是当前的软件开发趋势,PHP对OOP提供了良好的支持。可以使用OOP的思想来进行PHP的高级编程,对于提高PHP编程能力和规划好Web开发构架都非常有意义。

7.功能强大

PHP在Web项目开发过程中具有极其强大的功能,而且实现相对简单,主要表现在如下几点:

可操纵多种主流与非主流的数据库,例如:MySQL、Access、SQL

Server、Oracle、DB2等,其中,PHP与MySQL是现在绝佳的组合,可以跨平台运行。

可与轻量级目录访问协议进行信息交换。

可与多种协议进行通信,包括IMAP、POP3、SMTP、SOAP和DNS等。

使用基于POSIX和Perl的正则表达式库解析复杂字符串。

可以实现对XML文档的有效管理及创建和调用Web服务等操作。

8.可选择性

PHP可以采用面向过程和面向对象两种开发模式,并向下兼容,开发人员可以从所开发网站的规模和日后维护等多角度考虑,选择所开发网站应采取的模式。

PHP进行Web开发的过程中使用最多的是MySQL数据库。PHP

5.0以上版本中不仅提供了早期MySQL数据库操纵函数,而且提供了MySQLi扩展技术对MySQL数据库的操纵,这样开发人员可以从稳定性和执行效率等方面考虑操纵MySQL数据库的方式。

9.版本更新速度快

与数年才更新一次的ASP相比,PHP的更新速度要快得多,因为PHP几乎每年更新一次。

10.模板化

实现程序逻辑与用户界面的分离。

11.应用范围广

目前在互联网有很多网站的开发都是通过PHP语言来完成的,例如,搜狐、网易和百度等,在这些知名网站的创作开发中都应用到了PHP语言。

php5.3与5.3以下版本的区别

Namespaces

php 5.3最大的改动,毫无疑问就是Namespaces(此前有一篇相关的PHP Namespaces FAQ)。这给php开发人员带来的好处不少,广为人们所诟病的函数命名问题也得到了解决。代码更清晰

5.3之前常见的代码,需要自定义前缀区分函数和类名PLAIN TEXTCODE:function MY_wrapper() {}

class MY_DB { }

define('MY_CONN_STR', '');

MY_wrapper();

new MY_DB();

MY_CONN_STR;

使用名称空间之后,代码看上去更加clean。PLAIN TEXTCODE:namespace MY;

function wrapper() {}

class DB { }

const CONN_STR = '';

use MY AS MY;

wrapper();

new DB();

CONN_STR;

一个文件中定义了多个namespace

如果一个文件中定义了多个namespace,应该怎样处理?PLAIN TEXTCODE:namespace LIB;

class MySQL {}

class SQLite {}

$b = new SQLite();

namespace LIB_EXTRA;

class MScrypt {}

$a = new MScrypt();

var_dump(

get_class($a),

get_class($b)

);

以上代码输出为:PLAIN TEXTCODE:string(18)"LIB_EXTRA::MScrypt"

string(11)"LIB::SQLite"

php是解释执行的语言,以上结果合情合理。namespace的优先级

namespace中定义的函数,类和常量优先,其次才是全局的。PLAIN TEXTCODE:namespace foo;

function strlen($foo) { return htmlentities($foo); }

echo strlen("test"); // test

echo ::strlen("test"); // 4

echo namespace::strlen("test"); // test

namespace和autoload的友情

autoload会根据namespace名称以及class名称来解析类文件位置

仅当namespace和全局范围都没找到class定义的情况下,autoload才会被触发

在namespace中定义的__autoload不会被自动调用

PLAIN TEXT

CODE:

function __autoload($var) { var_dump($var); } // LIB::foo

require "./ns.php"; /*

?php

namespace LIB;

new foo();

*/

namespace一些辅料

PLAIN TEXTCODE:namespace really::long::pointlessly::verbose::ns;

__NAMESPACE__; // 新增的魔法常量,表示当前namespace名称

class a{}

get_class(new a()); // really::long::pointlessly::verbose::ns::a

use really::long::pointlessly::verbose::ns::a AS b;// 从名称空间中引用一个类

注:这里的内容节选自pdfIntroduction to PHP 5.3 Slides,后文不再复述。性能提升

php 5.3的总体性能提升了5 - 15%md5()快了10-15%

Better stack implementation in the engine

Constants移到read-only内存里

exception处理过程改进(简化,opcodes更少)

(require/include)_once改进,去掉重复open

Smaller binary size startup size with gcc4

新语言特性__DIR__

在5.3以前,为了获得当前脚本的目录,需要一次函数调用PLAIN TEXTCODE:echo dirname(__FILE__); // PHP 5.3

在5.3,只需要一个魔术常量__DIR__就解决了。PLAIN TEXTCODE:echo __DIR__; // = PHP 5.3

?:操作符

便捷的?:操作符,可以从两个值/表达式中快速取得非空值。PLAIN TEXTCODE:$a = true ?: false; // true

$a = false ?: true; // true

$a = "" ?: 1; // 1

$a = 0 ?: 2; // 2

$a = array() ?: array(1); // array(1);

$a = strlen("") ?: strlen("a"); // 1

__callStatic()

新增了魔术方法__callStatic,功能和__call类似,但是仅对static方法有效。PLAIN TEXTCODE:class helper {

static function __callStatic($name, $args) {

echo $name.'('.implode(',', $args).')';

}

}

helper::test("foo","bar"); // test(foo,bar)

动态调用static方法

动态的调用静态方法?动静结合。PLAIN TEXTCODE:class helper {

static function foo() { echo __METHOD__; }

}

$a = "helper";

$b = "foo";

$a::$b(); // helper::foo

Late Static Binding

不知道怎么译,可能留个原文更容易理解。静态方法的事件处理时机有变化,以前是在编译期处理,现在是执行期间处理。在php 5.3之前,下面的代码会输出一个A,但是这不是咱们要的,whoami方法已经在class B中重新定义,它本该输出B才符合咱们想当然的思维。PLAIN TEXTCODE:class A {

public static function whoami() {

echo __CLASS__;

}

public static function identity() {

self::whoami();

}

}

class B extends A {

public static function whoami() {

echo __CLASS__;

}

}

B::identity(); // A -- PHP 5.3

下面代码中使用了static::whoami()来调用静态方法。php 5.3之后,由于__CLASS__是在执行期被处理,那么这个例子中能顺利抓到class B。PLAIN TEXTCODE:class A {

public static function whoami() {

echo __CLASS__;

}

public static function identity() {

static::whoami();

}

}

class B extends A {

public static function whoami() {

echo __CLASS__;

}

}

B::identity(); // B --= PHP 5.3

mysqlnd

见mysqlnd成为php 5.3中的默认mysql驱动但是PDO_MySQL暂时还不支持mysqlnd,目前只有mysql(i)扩展可以用到之前介绍的php 5.3的新特性,都是方便开发人员的东东。下面介绍个很讨虚拟主机提供商喜欢的特性。增强的ini文件支持

CGI/ FastCGI支持类似.htaccess的INI配置

每个目录下都可以有INI设置,ini的文件名取决于php.ini的配置,但是[PATH=/var/www/domain.com], [HOST=]段落的设置用户不能修改。

增强的error handling

允许在ini文件中定义变量和常量,可以在程序中直接调用。

附上一段ini文件的例子PLAIN TEXTCODE:#用户自定义的php.ini文件名(.htaccess). 默认是".user.ini"

user_ini.filename=".user.ini"

#如果要禁用这个特性,设置为空值即可

user_ini.filename=

#用户自定义的php.ini文件TTL时长(time-to-live),单位为秒,我理解为缓存过期时间。默认为300秒

user_ini.cache_ttl=300

[PATH=/var/www/domain.com]

variables_order = GPC

safe_mode =1

[my variables]

somevar = “1234”

anothervar = ${somevar}; anothervar == somevar

[ini arrays]

foo[bar]=1

foo[123]=2

foo[]=3