搜尋
首頁後端開發php教程PHP如何處理Web請求流程
PHP如何處理Web請求流程Mar 27, 2018 pm 01:54 PM
phpweb流程

PHP世界湧現了許多開發框架,像是Laravel、ThinkPHP等,但不論何總框架,他們在處理Web請求時的模式都是一樣的,本文首先闡述PHP開發Web應用的基本架構,然後分別分析Laravel和ThinkPHP在處理Web請求時的處理流程。

PHP開發Web應用程式的基本架構

PHP開發Web應用程式時所以的請求需要指向特定的入口檔案。 WebServer是一個內容分發者,他接受用戶的請求後,如果是請求的是css、js等靜態文件,WebServer會找到這個文件,然後發送給瀏覽器;如果請求的是/index.php,根據配置文件,WebServer知道這個不是靜態文件,需要去找PHP解析器來處理,那麼他會把這個請求簡單處理後交給PHP解析器。

WebServer會依據CGI協議,將請求的Url、資料、Http Header等資訊傳送給PHP解析器,接下來PHP解析器會解析php.ini文件,初始化執行環境,然後處理請求,再以CGI規定的格式傳回處理後的結果,退出進程。 web server再把結果回傳給瀏覽器。整個處理過程如上圖所示。

FastCGI

這裡的PHP解析器就是實作了CGI協定的程序,每次請求到來時他都會解析php.ini文件,初始化執行環境,這就導致PHP解析器效能低下,於是就出現了CGI的改良升級版FastCGI。 FastCGI是一種語言無關的協議,用來溝通程式(如PHP, Python, Java)和Web伺服器(Apache2, Nginx), 理論上任何語言編寫的程式都可以透過FastCGI來提供Web服務。它的特點是會在動態分配處理進程給請求,以達到提高效率的目的,大多數FastCGI實作都會維護一個進程池。 FastCGI會先啟動一個master進程,解析設定文件,初始化執行環境,然後再啟動多個worker進程。當請求過來時,master進程會這個請求傳遞給一個worker進程,然後立即接受下一個請求。而當worker進程不夠用時,master可以根據配置預先啟動幾個worker進程等待;當然空閒worker進程太多時,也會自動關閉,這樣就提高了效能,節約了系統資源。整個過程FastCGI扮演著對CGI進程進行管理的角色。

PHP-FPM

PHP-FPM是一個專門針對PHP實作了FastCGI協定的程序,它其實就是一個PHP FastCGI進程管理器,負責管理一個進程池,呼叫PHP解析器來處理來自Web伺服器的請求。 PHP-FPM能夠對php.ini檔案的修改進行平滑過度。

新建一個helloworld.php文件,寫入下列程式碼

   
<?php
  echo"helloworld,";    
  echo"this
 is my first php script.";
  echophpinfo();
?>

配置WebServer和PHP-FPM等php運作環境後,在瀏覽器中存取該文件就可以直接得到輸出。

基於PHP的Web框架

PHP Web框架是

基於某模式將PHP開發常用功能封裝實作使開發者快速開發的工具

它主要的任務包括:

程式碼重複使用:定義套件、類別、函數的放置和載入規則,建議直接整合Composer及其AutoLoad特性。

請求的分發管理:這個就是路由,Rest風的框架喜歡Rewrite,簡單的一點的框架主要透過參數來定位模組和方法所在。

設定檔管理:載入和動態載入設定資料

錯誤和異常管理:異常捕捉、錯誤日誌記錄以及錯誤碼規格。

Layout和模板引擎:如何規劃頁面佈局、widget如何重複使用、ajax頁面如何結合、過期session如何重定向;資料和模板怎麼渲染成HTML,是否壓縮和設定過期頭。

資料庫:如何融入控制器;支援什麼樣的driver;考慮主從分離的擴展性;以及是否使用ORM

PHP作為世界上最好的程式語音,被廣泛的運用到Web開發中。因為其語法和C類似,有著非常平緩的學習曲線,越來越多的人使用PHP進行Web產品的快速開發。 PHP世界也湧現了許多開發框架,像是Laravel、ThinkPHP等,但不論何總框架,他們在處理Web請求時的模式都是一樣的,本文首先闡述PHP開發Web應用的基本架構,然後分別分析Laravel和ThinkPHP在處理Web請求時的處理流程。

PHP開發Web應用的基本架構

PHP开发Web应用时所以的请求需要指向具体的入口文件。WebServer是一个内容分发者,他接受用户的请求后,如果是请求的是css、js等静态文件,WebServer会找到这个文件,然后发送给浏览器;如果请求的是/index.php,根据配置文件,WebServer知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。

WebServer会依据CGI协议,将请求的Url、数据、Http Header等信息发送给PHP解析器,接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。整个处理过程如上图所示。

FastCGI

这里的PHP解析器就是实现了CGI协议的程序,每次请求到来时他会解析php.ini文件,初始化执行环境,这就导致PHP解析器性能低下,于是就出现了CGI的改良升级版FastCGI。FastCGI是一种语言无关的协议,用来沟通程序(如PHP, Python, Java)和Web服务器(Apache2, Nginx), 理论上任何语言编写的程序都可以通过FastCGI来提供Web服务。它的特点是会在动态分配处理进程给请求,以达到提高效率的目的,大多数FastCGI实现都会维护一个进程池。FastCGI会先启一个master进程,解析配置文件,初始化执行环境,然后再启动多个worker进程。当请求过来时,master进程会这个请求传递给一个worker进程,然后立即接受下一个请求。而且当worker进程不够用时,master可以根据配置预先启动几个worker进程等待;当然空闲worker进程太多时,也会自动关闭,这样就提高了性能,节约了系统资源。整个过程FastCGI扮演着对CGI进程进行管理的角色。

PHP-FPM

PHP-FPM是一个专门针对PHP实现了FastCGI协议的程序,它实际上就是一个PHP FastCGI进程管理器,负责管理一个进程池,调用PHP解析器来处理来自Web服务器的请求。PHP-FPM能够对php.ini文件的修改进行平滑过度。

新建一个helloworld.php文件,写入下列代码

<?php
  echo"helloworld,";    
  echo"this is my first php script.";
  echophpinfo();
?>

配置好WebServer和PHP-FPM等php运行环境后,在浏览器中访问该文件就可以直接得到输出。

基于PHP的Web框架

PHP Web框架是

基于某模式将PHP开发常用功能封装实现使开发者快速开发的工具

它主要的任务包括:

代码重用:定义包、类、函数的放置和加载规则,建议直接整合Composer及其AutoLoad特性。

请求的分发管理:这个就是路由,Rest风的框架喜欢Rewrite,简单的一点的框架主要通过参数来定位模块和方法所在。

配置文件管理:加载和动态加载配置数据

错误和异常管理:异常捕捉、错误日志记录以及错误码规范。

Layout和模板引擎:如何规划页面布局、widget如何重用、ajax页面如何结合、过期session如何重定向;数据和模板怎么渲染成HTML,是否压缩和设置过期头。

数据库:如何融入控制器;支持什么样的driver;考虑主从分离的扩展性;以及是否使用ORM

相关推荐:

Django用户认证系统(二)Web请求中的认证

以上是PHP如何處理Web請求流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器