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