php素材網(wǎng)站源碼免費(fèi)下載換個(gè)代碼git拉一下用打開不就好了嗎KM,怎么辦? 生活分享網(wǎng)站源碼 博客風(fēng)格分享小清新php源碼
2022-08-09
寫在前面
時(shí)光荏苒,時(shí)光如箭seo優(yōu)化,今年已經(jīng)是小張當(dāng)碼農(nóng)的第N個(gè)年頭了。多虧了世界上最好的語言(PHP),小張的頭發(fā)依然茂盛。但是項(xiàng)目一個(gè)接一個(gè)寫出來,PHP和使用量都在飛漲,但是這些年的增長卻沒有以前那么好。
你還在為這個(gè)而苦惱嗎php素材網(wǎng)站源碼免費(fèi)下載,今天我們換個(gè)角度看PHP,打開源碼從C的角度看PHP,看看這個(gè)有著20年歷史的龐大C項(xiàng)目是如何運(yùn)作的。
從這一刻起,你將被提升為 C 程序員,你可以去復(fù)習(xí) C 語法、結(jié)構(gòu)、指針和引用。
你可能會(huì)問,看代碼為什么不寫個(gè)KM git pull 并打開呢?確實(shí)可以看代碼,但是這叫看代碼片段,而不是看項(xiàng)目。 PHP項(xiàng)目需要兼容Mac平臺(tái),還要處理線程安全,代碼中包含很多宏定義。我們需要使用 IDE 的自動(dòng)跳轉(zhuǎn)和提示來更好地閱讀。
我們需要一個(gè) IDE 無錯(cuò)誤的項(xiàng)目。 (看著方法卻跳不過去,好郁悶)
配置
是內(nèi)部用于開發(fā)和調(diào)試的虛擬機(jī)。沒有的可以自己準(zhǔn)備一個(gè)可以ssh的虛擬機(jī),可以是本地虛擬機(jī),也可以是云平臺(tái)。 (最好有更好的網(wǎng)絡(luò),以后會(huì)上傳很多東西)
re2c
后面我們需要將IDE作為C項(xiàng)目使用,我們需要將其作為項(xiàng)目自動(dòng)化構(gòu)建工具使用。所以我們首先需要在2.8.12.2上安裝默認(rèn)版本的yum來滿足要求,這里我們直接用yum安裝。
yum?install?cmake
re2c 是一個(gè)語法生成器
yum?install?re2c
gdb
gdb的版本太低,這里需要手動(dòng)安裝一個(gè)符合要求的版本,我選擇了7.8.2
wget?http://ftp.gnu.org/gnu/gdb/gdb-7.8.2.tar.gztar?zxvf?gdb-7.8.2.tar.gzcd?gdb-7.8.2./configuremakemake?install
代碼拉取
選擇一個(gè)php版本,這里我使用7.1.33版本。有幾個(gè)原因:
1.項(xiàng)目中使用的是這個(gè)版本。
2.php7對(duì)內(nèi)核做了很多改動(dòng),以前的php5已經(jīng)不適合學(xué)習(xí)了。
3.后面要介紹的書也是基于php7.0的版本,更接近于php7.1。
4.php8還在測試中,已經(jīng)接近php7了。
注意:本地和遠(yuǎn)程都拉取副本,為保持標(biāo)簽一致,雙方必須進(jìn)行如下變換
git?clone?https://github.com/php/php-src.gitcd?php-srcgit?tag?-lgit?checkout?php-7.1.33
配置
要想做好工作,首先要磨礪你的工具。根據(jù)代碼,您需要選擇一個(gè)好的IDE。我建議使用家庭桶中的一個(gè)多年使用。一般我們不會(huì)直接把它當(dāng)做桌面系統(tǒng)使用。這里使用的遠(yuǎn)程部署功能用于環(huán)境部署。我的本地是環(huán)境,構(gòu)建和編譯都是在遠(yuǎn)程端進(jìn)行的。 (WSL也是一樣,但是PHP的git倉庫太大,在WSL里做git操作非常困難,應(yīng)該是WSL文件系統(tǒng)的bug)
PHP 改造
這一步是阻止大多數(shù)學(xué)生查看PHP源代碼的主要原因。 PHP 項(xiàng)目長期以來一直被用作自動(dòng)項(xiàng)目管理工具。但是,它不受支持。需要項(xiàng)目使用php素材網(wǎng)站源碼免費(fèi)下載,所以我們需要對(duì)php的源碼進(jìn)行和改造。
官網(wǎng)有修改文檔。
上面也有對(duì)應(yīng)的代碼
.
但是這個(gè)文檔和代碼太舊了,應(yīng)該是PHP5的代碼。我對(duì)這個(gè)項(xiàng)目做了一些升級(jí),兼容PHP7(可能有級(jí)別有限的問題,歡迎PR)。
在本地執(zhí)行以下命令網(wǎng)站優(yōu)化,php-,切換分支,將php-/中的所有文件復(fù)制到php源碼目錄下。注意目錄合并。
git?clone?https://github.com/bobzhangyong/php-cmakecd?php-cmakegit?checkcout?feature/support_php_7_1cp?-r?cmake/*?../php-src?//這里是php源碼的路徑
配置
這里設(shè)置了遠(yuǎn)程機(jī)器的信息,設(shè)置了相關(guān)工具的路徑。一般會(huì)自己識(shí)別。如果無法識(shí)別,可以手動(dòng)輸入。將檢查版本。默認(rèn)版本好像不對(duì),需要自己升級(jí)。
配置
這里需要設(shè)置代碼同步的目錄。設(shè)置好后點(diǎn)擊√確定,設(shè)置為默認(rèn)。完成以上設(shè)置后,這里可能會(huì)默認(rèn)出現(xiàn)提示信息,但是里面的路徑是在/tmp/目錄下,你可以刪除自己的配置,也可以直接修改路徑到你需要的項(xiàng)目目錄下。
注意:如果這里的路徑需要使用/來分割路徑,則不是默認(rèn)的\,否則執(zhí)行構(gòu)建時(shí)會(huì)提示找不到目錄。
在里面可以設(shè)置不同步.phpt文件,也就是php項(xiàng)目中的測試用例文件。 (我們拉代碼的時(shí)候已經(jīng)手動(dòng)保證了本地和遠(yuǎn)程機(jī)器的文件是一致的,但是我們也會(huì)同步一次,設(shè)置這個(gè)可以加快同步速度。)
將代碼同步到。第一次同步真的很慢,需要耐心等待。
執(zhí)行構(gòu)建,看看是否報(bào)錯(cuò)?
因?yàn)镻HP構(gòu)建會(huì)在遠(yuǎn)端生成一些文件,所以我們需要將這些文件同步到本地,否則會(huì)因?yàn)?c.h文件這部分不存在而提示代碼不存在,各種報(bào)錯(cuò)會(huì)被舉報(bào)。
選擇比較方法。使用 Size adn 會(huì)更快,但這里會(huì)更慢。請(qǐng)耐心等待。
分析完成后,可以看到遠(yuǎn)程的文件比本地的多,我們需要同步到本地。頂部....不需要同步,可以點(diǎn)擊紅框中的箭頭取消。然后點(diǎn)擊同步。
打開.c看源碼,是否干凈,沒有紅線。
斷點(diǎn)
光看是不夠的,還不如運(yùn)行代碼,下斷點(diǎn),深入了解運(yùn)行機(jī)制。您可以使用 gdb 轉(zhuǎn)到斷點(diǎn)。由于我這里直接使用了斷點(diǎn)功能,所以使用起來更加直觀。
1、準(zhǔn)備一個(gè)yong.php并寫一點(diǎn)代碼作為測試文件。
2、這配置了運(yùn)行配置。
3、設(shè)置和
4、將 yong.php 文件同步到遠(yuǎn)程。執(zhí)行以下操作即可查看。
5、斷點(diǎn)。真的很酷~~
開始讀取目錄結(jié)構(gòu)
PHP項(xiàng)目有很多目錄,大致功能如下:
├──?CMake?//用于cmake構(gòu)建的文件,我們做cmake?改造的時(shí)候拷貝進(jìn)去的。├──?TSRM?//線程安全相關(guān),你如果剛開始看就先忽略?不要看了├──?Zend?//Zend內(nèi)核的代碼├──?appveyor?//一些腳本?忽略├──?build?//autoconf?構(gòu)建用腳本?忽略├──?cmake-build-debug?//cmake構(gòu)建后產(chǎn)物?忽略├──?ext?//擴(kuò)展目錄,這塊可以找感興趣的擴(kuò)展看一下├──?main?//主要的php邏輯?├──?netware?//用于兼容Netware操作系統(tǒng)的?直接忽略├──?pear?//忽略├──?sapi?//入口部分,fpm?cgi?都在這里,我們可以先看一下cgi目錄├──?scripts?//腳本忽略├──?tests?//測試用例?忽略├──?travis?//構(gòu)建用?忽略└──?win32?//兼容windows系統(tǒng)?忽略
其實(shí)和源碼相關(guān)的目錄只有幾個(gè),標(biāo)記為和目錄供IDE建索引。
mainext\standardsapi\cliZend
從哪里開始
所有的準(zhǔn)備工作都做好了,還有什么理由不看代碼嗎?如果你仍然不知道從哪里開始,那么我建議從 main 函數(shù)開始。它位于 sapi\cli\.c 的末尾。附圖可以和源代碼結(jié)合。圖片引自:
最后推薦秦鵬的一本書《PHP7內(nèi)核解析》