PHP 的运行方式有哪些?

news2024/11/25 21:00:07

PHP本质上的运行方式可以分为两种:

  • 基于命令行的
  • 基于PHP-FPM的

但实际上,PHP能做的事很多,很多场景下,不同的运行方式能让开发更方便,减轻各种工作。

测试开发

PHP内置了一个HTTP 的server。这意味着,很多时候,我们不需要nginx、apache、php-fpm、配置站点等等繁琐的操作,直接就可以运行php的代码。

比如这样简单的一行命令:

php -S localhost:8000

此时当前目录下的各类html、静态文件、php代码就都能正常返回运行了。

可以定义一个路由文件router.php,设置一些规则:

<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"]))
    return false;    // 直接返回请求的文件
else { 
    echo "<p>Welcome to PHP</p>";
}

上面的路由文件定义了,当请求图片时返回图片,否则返回一段html代码。

ThinkPHP自5.1的版本起,内置封装了PHP的内置服务器。只要再TP项目下运行命令:

php think run

这样这个框架就运行起来了,不需要配置Nginx、Apache、静态规则、站点的目录、域名host等等等,一行命令就可以开始开发了。现在我在本地开发的时候,只把对应版本的PHP配置到环境变量里,其他的各类nginx等软件一律不用,开发非常方便。

不过这种方式只能用于测试开发或者临时演示来用。PHP的内置服务器不能处理并发请求,所有的请求(包括css、js等文件)都只能一个一个的处理。但是做开发是完全足够的。

传统的部署方式

PHP的FPM是黑科技,这是真的,稳如老狗,怎么折腾都不会出问题,每个请求之间隔离得清清楚,互不影响,这一点当你在用Java、Node、Go等Http框架下开发时就会体会到了。

一般而言,PHP-fpm和nginx配合。这也是最常见的运行方式,资料很多,也有很多成熟的面板帮助开发者配置,这里不多介绍。但这里希望强调一点,一定要开启opcache、一定要开启opcache、一定要开启opcache。

开启opcache之后,直接无脑的获得巨大的性能提醒。如今的PHP项目,PHP代码很多,因为使用composer依赖等,随随便便几百个文件或者小一千个文件是常态,有些重量级框架动辄几十M甚至上百M的代码,如果不开启是opcache,老狗也会难受。

基于TCP/UDP的网络编程

PHP有各种内置的网络编程扩展和函数,但是用起来比较麻烦,不直观。但是现在有很多成熟且流行的网络编程框架,可以基于TCP和UDP协议进行各类业务的开发,比如例如即时通讯类、物联网、游戏、服务治理、其它服务器或者中间件、微服务等。

我也多次介绍过这些项目了,他们也都很热门,这里不再过多介绍:

Workerman

基于官方扩展使用纯PHP开发的网络编程和进程管理库,内置进程守护。

Swoole

纯C开发的PHP扩展库,高性能、协程。

ReactPHP

像Node一样的事件驱动框架。国外热门主流,衍生了非常多的有趣的项目,比如有人用它实现了一套Redis server。

Swow

使用C和PHP实现的一套框架,专注于IO。

GatewayWorker

基于Workerman开发的长连接框架,开发体验极佳,自动抹平协议沟通,实现TCP、websocket等各种协议的对接,支持分布式部署。

其他还有很多,大家可以留言。

Revolt

未来事实上的PHP异步、协程标准。

基于TCP和Linux事件机制的高性能HTTP框架

其实就是基于上面介绍的框架实现的专门用于HTTP开发的框架。刚才介绍的框架基本是能够实现TCP、UDP网络编程的,本小节主要介绍开发HTTP的部分,大部分也是基于上面这些框架实现的。

Webman

基于Workerman的高性能HTTP框架,简单易用,基本的MVC体验。

Swoole系

基于swoole扩展实现的高性能HTTP框架,比如easyswoole,Hyperf等等。

PHP-PM

基于ReactPHP实现的PHP进程管理,可以无缝与标准的请求、响应框架集成驱动。

RoadRunner

GO语言编写的PHP应用服务框架。

此类框架很多,不多介绍了。

基于命令行的业务

确实很少有人这么做,很少有人开发在命令行下的项目,如果有这种需求,一般是使用ThinkPHP、laravel等框架提供的自定义命令去实现了。但不代表PHP没有这方面的成熟的框架。

[minicli/minicli]极简的命令行框架

一个PHP的极简的无依赖的命令行类库.可以非常方便的结构化的程序逻辑和漂亮的输出.

[psy/psysh]一个PHP的实时交互控制台

PsySH是一个实时运行的交互的命令行项目。

[league/climate]一个PHP功能健全的命令行功能操作库

一个事实上的PHP标准的命令行框架。

SeverLess服务

可能有些PHP没接触过这个概念,大体的意思是,不用自己部署运维服务器了,只要把代码上传到severless的服务上即可,按计算扣积分。基本都是各大服务器厂家提供的服务。其中laravel对其有很好的支持,其他也有一些框架能够很容易的实现。比如Bref,简单且可扩展的服务框架。

总结

所以总的来说,PHP有各种的方式,对应不同的业务场景。

其他还有一些很有意思的项目,比如:

  • KPHP,把PHP编译成C++代码。
  • peachpie,把PHP便以为.NET平台程序
  • PHP-JS,集成Node引擎的PHP扩展
  • PHP-CPP,使用C++开发PHP扩展,代码很容易上手

这些项目在我的另一篇文章有介绍:

《PHP的几个有趣的打开方式:从基本到变态》https://phpreturn.com/index/a623dc0357dead.html

其他

最近又出了几个PHP代码“编译”功能的项目,主要的目并不是性能,而是源码保护,ulthon_admin的有个分支正在做这件事,还没有正式发布,另外一个国人开发的项目,也没正式上线,总体思路也是这个,等以后详细为大家介绍介绍。

原文标题:PHP 的运行方式有哪些?

原文地址:https://phpreturn.com/index/a640bdfa37386b.html

原文平台:PHP武器库

版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/404169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32外设-GPIO

0. 写在最前 本栏目笔记都是基于stm32F10x 1. GPIO基本介绍 GPIO—general purpose intput output 是通用输入输出端口的简称&#xff0c;简单来说就是软件可控制的引脚&#xff0c; STM32芯片的GPIO引脚与外部设备连接起来&#xff0c;从而实现与外部通讯、控制以及数据采集的…

java Date 和 Calendar类 万字详解(通俗易懂)

Date类介绍及使用关于SimpleDateFormat类Calendar类介绍及使用LocalDateTime类介绍及使用关于DateTimeFormatter类一、前言本节内容是我们《API-常用类》专题的第五小节了。本节内容主要讲Date 类 和 Calendar 类&#xff0c;内容包括但不限于Date类简介&#xff0c;Date类使用…

【微信小程序】-- 自定义组件 - 数据监听器 (三十四)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

传奇开服流程—传奇单机架设教程

现在传奇私服还是那么的火爆&#xff0c;上次有报道发布站一年盈利几个亿&#xff0c;还是有很大的机会&#xff0c;很多玩家因为GM开服关服给折腾&#xff0c;刚充的钱服务器就关了&#xff0c;很是恼火&#xff0c;于是都想自己整个服开开&#xff0c;但又不知道从何下手&…

三菱FX5U之数据处理类指令的使用

本课程使用三菱PLC works3编程软件进行教学&#xff0c;并使用works3的仿真功能进行PLC仿真&#xff0c;学习的时候不需要有实物PLC。 补充说明&#xff1a;三菱 FX 5U系列PLC使用的是GX works3编程软件&#xff0c;FX 3U、Q系列PLC使用的是GX works3编程软件。 第一章 八个案…

YUV实践记录

文章目录YUV基础介绍&#xff1a;不同采样YUV格式的区别为什么要使用YUV格式呢&#xff1f;YUV的存储方式Android中的YUV_420_888附录&#xff1a;YUV基础介绍&#xff1a; YUV在做手机图像或者视频处理的时候会经常用到的一个格式&#xff0c;用此文来记录YUV相关介绍&#xf…

hibernate学习(五)

hibernate学习&#xff08;五&#xff09; hibernate的一对多关联映射&#xff1a; 一、数据库表与表之间关系 一对多建表原则&#xff1a; 多对多的建表原则&#xff1a; 一对一建表原则&#xff1a; &#xff08;1&#xff09;唯一外键对应&#xff1a; &#xff08;…

时间复杂度和空间复杂度的计算

目录 算法的复杂度 时间复杂的的概念 时间复杂度计算方法 大O的渐进表示法 空间复杂的概念 空间复杂的的计算方法 时间和空间复杂度的应用 消失的数字 轮转数组 算法的复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间&#xff08;内存&…

modbus转profinet网关连接5台台达ME300变频器案例

通过兴达易控Modbus转Profinet&#xff08;XD-MDPN100&#xff09;网关改善网络场景&#xff0c;变频器有掉线或数据丢失报警&#xff0c;影响系统的正常运行&#xff0c;将5台 ME300变频器modbus转Profinet到1200PLC&#xff0c;通过网关还可以实现Profinet转modbus RTU协议转…

LabVIEW中以编程方式获取VI克隆名称

LabVIEW中以编程方式获取VI克隆名称演示如何以编程方式获取VI的名称或克隆名称。如果VI作为顶级VI运行&#xff0c;则将显示VI的名称。如果VI在主VI中用作子VI&#xff0c;它将返回克隆的名称。在项目开发过程中&#xff0c;有时需要获取VI的名称。在此示例中&#xff0c;实现了…

【数论】试除法判断质数,分解质因数,筛质数

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 现已更新完KMP算法、排序模板&#xff0c;之…

代码管理--svnadmin工具介绍

1、简介 SVNAdmin2 是一款通过图形界面管理服务端SVN的web程序。正常情况下配置SVN仓库的人员权限需要登录到服务器手动修改 authz 和 passwd 两个文件&#xff0c;当仓库结构和人员权限上了规模后&#xff0c;手动管理就变的非常容易出错&#xff0c;本系统能够识别人员和权限…

【AWS入门】IAM基本应用-2023/3/4

目录IAM概述根用户和IAM用户参考IAM概述 IAM(Identity Access Management&#xff09;是身份和访问管理服务&#xff0c;要访问AWS服务和资源&#xff0c;就要使用IAM进行身份验证和授权。当我们通过控制台&#xff0c;CLI&#xff0c;或API访问AWS服务时&#xff0c;都需要通…

p5.js map映射

theme: smartblue 本文正在参加「金石计划」 本文简介 带尬猴&#xff0c;我嗨德育处主任 p5.js 为开发者提供了很多有用的方法&#xff0c;这些方法实现起来可能不难&#xff0c;但却非常实用&#xff0c;能大大减少我们的开发时间。 本文将通过举例说明的方式来讲解 映射 map…

《计算机网络》期末复习笔记

文章目录一、一些英文名词的标签&#xff08;方便记忆&#xff09;二、OSI七层协议三、综合题3.0 知识点储备3.1 在Internet 网中&#xff0c;某计算机的IP 地址是11001010.01100000.00101100.01011000 &#xff0c;请回答下列问题3.2 假定发送方要发送的数据为10000101。采用C…

【Spring 深入学习】AOP的前世今生之后续

AOP的前世今生之后续 1. 概述 上篇文章【Spring 深入学习】AOP的前世今生之代理模式我们讲述了代理模式。而我们今天的主人公AOP就是基于代理模式实现的&#xff0c;所以我们今天会简单学习下AOP 2. 什么是AOP 是面向切面编程&#xff0c;一般可以帮助我们在不修改现有代码的情…

Java中字符流(FileReader(read、close)、FileWriter(write、close)、字符(输入、输出)流原理解析)

1.创建对象&#xff1a; 2.读取数据 3.释放资源&#xff08;关流&#xff09; 如何使用重载的read()方法呢&#xff1f; FileWriter&#xff1a; 在前面我们指导&#xff0c;字节输出流和字符输出流的本质区别是&#xff0c;字节输出流一次只能操作一个字节&#xff0c;如果让…

QEMU启动ARM32 Linux内核

目录前言前置知识ARM Versatile Express开发板简介ARM处理器家族简介安装qemu-system-arm安装交叉编译工具交叉编译ARM32 Linux内核交叉编译ARM32 Busybox使用busybox制作initramfs使用QEMU启动ARM32 Linux内核模拟vexpress-a9开发板模拟vexpress-a15开发板参考前言 本文介绍采…

【数据库】数据库基础架构

数据库架构 数据库对于后端程序员来说是每天都需要打交道的系统&#xff0c;因此了解并掌握MySQL底层原理是必须的。 基础架构图 MySQL内部分为两层&#xff0c;一个是Server层&#xff0c;另一个是存储引擎层&#xff0c;而我们常用的就是MyISAM、InnoDB&#xff0c;主要负…

16、字符串生成器

目录 &#xff08;1&#xff09;append()方法 &#xff08;2&#xff09;insert(int offset, arg)方法 &#xff08;3&#xff09;delete(int start , int end)方法 创建成功的字符串对象&#xff0c;其长度是固定的&#xff0c;内容不能被改变和编译。虽然使用“”可以达到…