PHP 的運行方式有哪些?

php武器庫 發佈 2024-03-31T07:47:03.658728+00:00

PHP本質上的運行方式可以分為兩種:基於命令行的基於PHP-FPM的但實際上,PHP能做的事很多,很多場景下,不同的運行方式能讓開發更方便,減輕各種工作。測試開發PHP內置了一個HTTP 的server。

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武器庫)所有,本站允許任何形式的轉載/引用文章,但必須同時註明出處。

關鍵字: