iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >【云原生 | 38】Docker快速部署开源脚本语言PHP
  • 943
分享到

【云原生 | 38】Docker快速部署开源脚本语言PHP

云原生docker开源php 2023-10-02 10:10:40 943人浏览 泡泡鱼
摘要

🍁博主简介:         🏅云计算领域优质创作者         🏅新星计划第三季python赛道第一名         🏅阿里云ACE认证高级工程师         

🍁博主简介
        🏅云计算领域优质创作者
        🏅新星计划第三季python赛道第一名
        🏅阿里云ACE认证高级工程师
        🏅阿里云开发者社区专家博主
✒️博主微信:15575411187
💊交流社区小鹏linux(个人社区)欢迎您的加入!

目录

1. 关于PHP

2. PHP语言特点 

3. PHP内置函数 

4. PHP版本记录 

5. 在Docker中部署运行PHP

  👑👑👑结束语👑👑👑


1. 关于PHP

php(Hypertext Preprocessor,超文本预处理器)是一种通用的开源脚本语言。语法吸收了C、Java和Perl等语言的特点,利于学习,使用广泛,主要适用于web开发领域。PHP执行效率比完全生成html标记的CGI 要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

2. PHP语言特点 

1)开源免费 

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

2)快捷高效 

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

3)性能提升 

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 7.0.0 发布于2015-12-03,此版本下最新版本是PHP 7.4.21 (发布日期:2021-07-01),PHP 8.0.0  发布于2020-11-26,此版本下最新版本是PHP 8.0.8(发布日期:2021-07-01)

4)跨平台 

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

5)常驻内存 

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

6)页面生命周期 

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

3. PHP内置函数 

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

在PHP编程里需要注意用户的输入安全,对用户各个方面的输入都要做好相关的过滤处理,内置函数里提供了不少的安全相关的函数,编程学习者需要重点掌握以下的7个重点函数如下表格:

用户输入安全的7个内置函数 

函数名称

用途简介

htmlentities

将字符转换为 HTML 转义字符

htmlspecialchars_decode

将特殊的 HTML 实体转换回普通字符

htmlspecialchars

将特殊字符转换为 HTML 实体

nl2br

在字符串所有新行之前插入 HTML 换行标记

str_replace

子字符串替换

strip_tags

从字符串中去除 HTML 和 PHP 标记

stripslashes

反引用一个引用字符串

4. PHP版本记录 

版本

发布日期

最终支持

相关更新及备注

0

1995-06-08

--

首次使用

0

1996-04-16

--

针对PHP 1.0的改进版,速度更快、体积更小,更容易产生动态网页。

0

1998-06-06

2000-10-20

Zeev Suraski和Andi Gutmans重写了底层,支持可扩展组件。

0

2000-05-22

2001-06-23

增加了Zend引擎,支持更多的 WEB 服务器Http Sessions 支持、输出缓冲、更安全的用户输入和一些新的语言结构

1

2001-12-10

2002-03-12

加入了superglobal(超全局的概念,即$_GET、$_POST等)

2

2002-04-22

2002-09-06

默认禁用reGISter_globals

3

2002-12-27

2005-03-31

引入了命令行界面CLI用来不用CGI

4

2005-07-11

2008-08-08

修复了一些致命错误

0

2004-07-13

2005-09-05

Zend升级为二代引擎,开始支持面向对象编程

1

2005-11-24

2006-08-24

引入了编译器来提高性能、增加了PDO作为访问数据库的接口

2

2006-11-02

2011-01-06

默认启用过滤器扩展

3

2009-06-30

2014-08-14

支持命名空间;使用XMLReader和XMLWriter增强XML支持;支持SOAP ,延迟静态绑定,跳转标签(有限的Goto), 闭包,Native PHP arcHives。php-fpm在php5.3.3 版本成为了官方正式组件

4

2012-03-01

2015-09-03

支持Trait、简短数组表达式。移除了register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister(), magic_quotes以及session_is_registered()。加入了内建的Web服务器。增强了性能,减小内存使用量。

5

2013-06-20

2016-07-10

支持generators,用于异常处理的finally ,将OpCache(基于 Zend Optimizer+)加入官方发布中。

6

2014-08-28

2018-12-31

常数标量表达式、可变参数函数、参数拆包、新的求幂运算符、函数和常量的use语句的扩展、新的phpdbg调试器作为Sapi模块,以及其他更小的改进。使用php://input替代 $HTTP_RAW_POST_DATA,iconv和mbstring配置选项中和编码相关的选项废弃。

x

未发布

--

取消掉的、从未正式发布的PHP版本。

0

2015-12-03

2018-12-03

Zend引擎升级到三代 ,整体性能是5.6的2倍。移除ereg、mssql、mysql、sybase_ct等4个扩展。引入了类型声明,有两种模式: 强制 (默认) 和 严格模式。支持匿名类。

1

2016-12-01

2019-12-01

void返回值类型,类常量,可见性修饰符,新增可为空(Nullable)类型,新增短数组语法([])的,支持多异常捕获处理,废弃了mcrypt 扩展用OpenSSL取代

2

2017-11-30

2020-11-30

GD 扩展内的 png2wbmp() 和 jpeg2wbmp() 被废弃,对象参数和返回类型提示、抽象方法重写等

3

2018-12-06

2021-12-06

更灵活的 Heredoc 和 Nowdoc 语法,大小写不敏感的常量声明现被废弃,在字符串中搜索非字符串内容都将被视为字符串,而不是 ASCII 编码值。

4

2019-11-28

2022-11-28

Preloading预加载机制,改进OpenSSL、弱引用等。属性添加限定类型、有限返回类型协变与参数类型逆变、数值文字分隔符,为过渡到PHP8做了一定的准备。

0.0

2020-11-26

--

JIT (Just-In-Time即时编译)、新增static返回类型、新增mixed 类型、命名参数(Named arguments)和注释(Attributes)   ,不再允许通过静态调用的方式去调用非静态方法,字符串与数字的比较将首先将数字转为字符串再比较 

5. 在Docker中部署运行PHP

1.使用官方镜像 

第一步,在PHP项目的根目录中新建一个Dockerfile:

FROM php:5.6-cliCOPY . /usr/src/myappWORKDIR /usr/src/myappCMD [ "php", "./hello.php" ]

新建hello.php文件:

第二步,运行docker build命令构建镜像:

$ docker build -t php-image .

最后,执行以下命令去运行Docker镜像:

$ docker run -it --rm --name php-container php-imagehello php

2.挂载PHP项目 

如果大家需要运行简单的,甚至单文件的PHP项目,那么每次都写Dockerfile会很麻烦。这种情况下,可以用以下命令挂载PHP项目:
$ docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w/usr/src/myapp php:5.6-cli php your-script.php

3.配合Apache使用 

通常情况下,PHP项目需要和Apache httpd/Nginx一起运行,这样就需要PHP容器中内含Apache Web Server。读者可以使用带有apache标签的镜像,如php:5.6-apache。
第一步,在读者的PHP项目的根目录中新建一个Dockerfile,并使用Docker Hub官方的基础镜像:
FROM php:5.6-apacheCOPY src/ /var/www/html/
其中,src/是当前包含所有PHP代码的目录。 第二步,使用此Dockerfile构建自定义镜像:
$ docker build -t my-php-app .

第三步,创建并运行此镜像:

$ docker run -it --rm --name my-running-app my-php-app
建议大家添一个自定义的php.ini配置文件,将其拷贝 到/usr/local/lib。这样读者可以对PHP项目做更多的定制化,如开启某些PHP插件,或者对PHP解释器进行一些安全/性能相关的配置。添加方法很简单:
FROM php:5.6-apacheCOPY config/php.ini /usr/local/lib/COPY src/ /var/www/html/

提示 

src/是当前存放PHP代码的文件夹,config/文件夹包含php.ini文件

如果大家希望直接使用官方镜像运行PHP项目,可以执行如下命令:

$ docker run -it --rm --name my-apache-php-app -v "$(pwd)":/var/www/html php:5.6-apache

  👑👑👑结束语👑👑👑

来源地址:https://blog.csdn.net/qq_62294245/article/details/127440135

--结束END--

本文标题: 【云原生 | 38】Docker快速部署开源脚本语言PHP

本文链接: https://www.lsjlt.com/news/422576.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作