摘要:在我前一陣子寫的一篇文章新版重構(gòu)之系統(tǒng)架構(gòu)中,很多人對其中提到的利用上線代碼比較感興趣,我就在這邊跟大家分享下我目前的做法?,F(xiàn)有代碼需要做何處理嗎如果你的代碼結(jié)構(gòu)比較科學比如采用大部分框架的推薦結(jié)構(gòu),那么一行都不需要改變。
在我前一陣子寫的一篇文章《新版 SegmentFault 重構(gòu)之系統(tǒng)架構(gòu)》中,很多人對其中提到的利用phar上線代碼比較感興趣,我就在這邊跟大家分享下我目前的做法。
哪些項目適合phar打包上線?其實這種方法沒有什么特別的限制,只有一條,你的程序是單一入口的,對web項目也就是說,所有的http請求都只有一個php文件作為處理方(大多數(shù)程序就是index.php)。
如果你的程序結(jié)構(gòu)是這樣的,那么基本可以無障礙切換到這種上線模式。實際上絕大多數(shù)現(xiàn)代的php框架構(gòu)建的項目都是單一入口的結(jié)構(gòu)了。
現(xiàn)有代碼需要做何處理嗎?如果你的代碼結(jié)構(gòu)比較科學(比如采用大部分框架的推薦結(jié)構(gòu)),那么一行都不需要改變。只有幾個需要注意
在項目里用include或者require來引用其他項目內(nèi)文件時,最好不要直接用相對地址,而是在前面加上__DIR__常量
因為phar包只能解析代碼文件,所以建議靜態(tài)文件多帶帶部署
OK,準備工作做完后,我們就可以開始看看具體怎么部署了。為了方便大家了解,我在github上放了一個非常簡單的小例子,它的地址是
https://github.com/SegmentFault/phar-sample
從一個簡單的例子說起這個例子的代碼結(jié)構(gòu)跟我們大多數(shù)項目很像,實際上我就是刻意模擬這些項目的代碼結(jié)構(gòu)
注意,運行這個項目最好在php 5.4以上的環(huán)境中
app存放主要的邏輯代碼,比如controller, model, service 等等
lib存放一些庫文件,包括第三方的
portal其實就是項目的主入口了,打開你回發(fā)現(xiàn)里面只有一個文件index.php,這就是我前面提到的單一入口結(jié)構(gòu)
static存放的是靜態(tài)文件,比如js, css, 圖片等等,這個目錄需要你多帶帶部署,我們的phar包里不會打包里面的內(nèi)容,放在這里只是為了完整地展示一個項目結(jié)構(gòu)
build.php文件就是我們的打包腳本了
如果你的項目需要模版文件,可能還需要一個template目錄,在這里我就省略掉了
在瀏覽器里訪問你的項目地址/portal/index.php,即可看到熟悉的Hello World!字樣
這個項目中最重要的就是build.php這個文件了,它展示了一個經(jīng)過簡化的打包過程,實際上,稍加修改它就能用在你的項目中,這個文件的代碼注釋很詳細,我就不重復(fù)說明了,現(xiàn)在我們在終端下運行它
啊哦,貌似出了點問題,不過不要緊,這是php的一個選項沒有設(shè)置導致的,打開php.ini文件,找到;phar.readonly = On這一行,把前面的分號;去掉,然后把后面的On改為Off,然后保存再執(zhí)行這個命令
看來成功了,而且當前目錄下已經(jīng)有了Sample.phar這個打包好的文件
如何部署phar文件現(xiàn)在你一定對著這個phar文件感到新奇,但是又不知道如何用它,WTF!但是等等,請回到終端下執(zhí)行命令
php Sample.phar
怎么樣,現(xiàn)在你的整個項目就已經(jīng)被包含在這個Sample.phar文件里了,而且它還能直接被執(zhí)行,很神奇吧,那么我們應(yīng)該怎么部署它呢?
以下是我的建議
首先為每次打包的文件生成一個版本號,比如你可以在build.php加上一行
rename("Sample.phar", "Sample." . date("Ymd.His") . ".phar");
這樣每次打包后的文件就變成了類似Sample.20141111.123456.phar,而且不會重復(fù),生成不重復(fù)id的方法有很多種,我推薦這種是因為它可以方便你看到打包時間,以后你做回滾的時候就可以知道要回滾到那個時間的版本,當然你也可以把這個版本跟你的SCM版本關(guān)聯(lián)起來
然后,在線上使用另外一個入口文件引用這個包,比如線上的入口目錄/wwwroot下的index.php文件有如下代碼
require __DIR__ . "/../packages/Sample.20141111.123456.phar";
是的,只有一行就這么簡單!packages就是你存放這些打包好文件的目錄,你可以隨意放置。
我說的這些步驟都可以很方便的寫成腳本集成到你目前的自動化部署流程中。
以上的文字只是拋磚引玉,歡迎大家對這個方案提出意見,并對它做一些性能測試,如果你運行在5.5以上的版本(默認打開opcache),幾乎對性能沒有影響。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/20862.html
摘要:模擬命令,并沒有做實際的操作。申明依賴命令增加新的依賴包到當前目錄的文件中。你甚至可以輸入一個軟件包的版本號,來顯示該版本的詳細信息。你也可以在第三個參數(shù)中指定版本號,否則將獲取最新的版本。 原文地址 : composer 命令行 全局參數(shù) 下列參數(shù)可與每一個命令結(jié)合使用: --verbose (-v): 增加反饋信息的詳細度。 -v 表示正常輸出。 -vv 表示更詳細的輸出。 ...
摘要:中文網(wǎng)系統(tǒng)要求運行需要以上版本。注中的路徑為相對于的路徑這個時候,你就可以調(diào)用你自己編寫的函數(shù)庫或者類庫了注本文內(nèi)容參考了中文網(wǎng),后續(xù)還會更新其它的實用功能 1.簡介 Composer 是 PHP 的一個依賴管理工具。它允許你申明項目所依賴的代碼庫,它會在你的項目中為你安裝他們。《Composer 中文網(wǎng)》 2.系統(tǒng)要求 運行 Composer 需要 PHP 5.3.2+ 以上版本。C...
摘要:默認情況下它不會在全局安裝任何東西。這種想法并不新鮮,受到了和的強烈啟發(fā)。其中一些庫依賴于其他庫。系統(tǒng)要求運行需要以上版本。一些敏感的設(shè)置和編譯標志也是必須的,但對于任何不兼容項安裝程序都會拋出警告。這是的二進制文件。 Composer 是 PHP 的一個依賴管理工具。它允許你申明項目所依賴的代碼庫,它會在你的項目中為你安裝他們。 1. 依賴管理 Composer 不是一個包管理器...
摘要:一個聰明的指揮家。是個很貼心的家伙。和的目的差不多。上面原因不是全部,而且謹慎守規(guī)矩渠道限制也未必是壞事,但是它的確影響了的發(fā)展,而更加具有冒險精神更加包容和靈活。來了年,就是發(fā)布年后的一天,及提出工具并發(fā)布第一個版本。如果是和會簡單的多。 一個聰明的指揮家。 明日北哥 sf社區(qū)直播 composer課程,感興趣的記得來看哦 https://segmentfault.com/l/15....
閱讀 561·2021-11-25 09:44
閱讀 2648·2021-11-24 09:39
閱讀 2322·2021-11-22 15:29
閱讀 3534·2021-11-15 11:37
閱讀 3402·2021-09-24 10:36
閱讀 2526·2021-09-04 16:41
閱讀 1006·2021-09-03 10:28
閱讀 1867·2019-08-30 15:55