者 | Richard MacManus
譯者 | 核子可樂
策劃 | Tina
根據(jù) WordPress 聯(lián)合創(chuàng)始人 Matt Mullenweg 的說(shuō)法,PHP 的受眾比例急劇下降,疑似受到 WordPress“JavaScript 優(yōu)先”主張的影響。
TIOBE 編程語(yǔ)言人氣指數(shù)發(fā)布更新,并提出“PHP 的魔力是否正在消散?”的靈魂拷問。今年 4 月,PHP 在 TIOBE 編程語(yǔ)言指數(shù)榜上僅位列第 17,“成為其有史以來(lái)的最低排位”。
暴露 PHP 人氣急劇下滑的還不只是 TIOBE 榜單。在年度 Stack Overflow 開發(fā)者調(diào)查報(bào)告中,PHP 的市場(chǎng)占比也從 2018 年的 30.7%(即受訪者當(dāng)中使用 PHP 的百分比)下降至 2023 年的 18.58%。JetBrains 開發(fā)者生態(tài)系統(tǒng)調(diào)查同樣觀察到類似的趨勢(shì),PHP 占比從 2017 年的 30%下降至 2023 年的 18%。而且最后一項(xiàng)數(shù)據(jù)尤其值得關(guān)注,因?yàn)?JetBrains(以及 WordPress 托管廠商 Automattic)正是 PHP 的最大贊助方之一。
JetBrains 公布的開發(fā)者調(diào)查結(jié)果
這種下滑趨勢(shì)在 BuiltWith 上體現(xiàn)得尤其明顯,自 2020 年底以來(lái) PHP 的流行度增長(zhǎng)線開始斷崖式跌落。
BuiltWith 公布的 PHP 趨勢(shì)圖
截至 2021 年 11 月的一項(xiàng)調(diào)查顯示,PHP 在互聯(lián)網(wǎng)前百萬(wàn)個(gè)網(wǎng)站中的占比仍在 3 萬(wàn)以上。但如今兩年多過(guò)去,其占比已經(jīng)下滑至 1.5 萬(wàn)左右。而且截至本文撰稿之時(shí),BuiltWith Quotes 公布的實(shí)際占比數(shù)字為 18.19%。18%這個(gè)比例與 Stack Overflow 及 JetBrains 的調(diào)查發(fā)現(xiàn)高度吻合,因此我們可以基本確定,PHP 在開發(fā)者中的受歡迎程度已經(jīng)從之前的約 30%萎縮至現(xiàn)在的 18%。換言之,在短短兩年之間下降了 40%。
所以結(jié)論是什么?在過(guò)去幾年里到底發(fā)生了什么樣的變化,才導(dǎo)致 PHP 在 Web 編程語(yǔ)言的競(jìng)爭(zhēng)當(dāng)中迅速落?。?/span>
可以說(shuō),PHP 衰落的最大原因就是 WordPress(迄今為止最具人氣的 Web 內(nèi)容管理系統(tǒng))正在從 PHP 轉(zhuǎn)向 JavaScript。WordPress 聯(lián)合創(chuàng)始人兼 Automattic 公司 CEO Matt Mullenweg 在上月于中國(guó)臺(tái)灣召開的 WordCamp Asia 2024 大會(huì)上也就此做出論述。
他在回答觀眾提問時(shí)表示,“我覺得 WordPress 中的大部分新代碼現(xiàn)在都是由 JavaScript 編寫而成,而且這種趨勢(shì)已經(jīng)持續(xù)了一段時(shí)間。因此從方方面面來(lái)講,如今的 Gutenberg 已經(jīng)轉(zhuǎn)化成了一個(gè) JavaScript 優(yōu)先的項(xiàng)目?!?/span>
大家絕沒看錯(cuò):Matt Mullenweg 直言現(xiàn)在的 WordPress 就是個(gè)“JavaScript 優(yōu)先的項(xiàng)目”。而他所提到的 Gutenberg,其實(shí)是該公司備受爭(zhēng)議的全新用戶界面,同時(shí)也是推動(dòng) JavaScript 全面替代 PHP 的主要原因。當(dāng)然,他也承認(rèn)從 PHP 轉(zhuǎn)向 JavaScript“并不容易”。
WordPress 聯(lián)合創(chuàng)始人 Matt Mullenweg 在 WordCamp Asia 2024 大會(huì)上
這倒不是說(shuō) WordPress 不再依賴于 PHP。畢竟在撰寫本文時(shí),我恰好就是在 WordPress 中以“/wp-admin/post-new.php”結(jié)尾的 URL 輸入這篇文章。但只能說(shuō)目前如此,未來(lái)的 WordPress 已經(jīng)確定要走向另一條道路。
Mullenweg 還談到,他希望能在 WordPress 中看到進(jìn)一步改進(jìn)——令人驚訝的是,他已經(jīng)開始從 JavaScript 的視角出發(fā)看待這些變化。比如說(shuō),PHP 是一種服務(wù)器端腳本語(yǔ)言(意味著代碼通常在 Web 服務(wù)器上處理),而 Mullenweg 希望 WordPress 能使用 JavaScript 把更多操作交由客戶端執(zhí)行。
他意味深長(zhǎng)地表示,“我真心覺得我們應(yīng)該把更多處理任務(wù)留在客戶端。比如對(duì)于正在編輯的內(nèi)容,這部分處理就可以交給客戶端。這種在瀏覽器運(yùn)行 JavaScript 的速度可能會(huì)更快,因?yàn)楝F(xiàn)在虛擬機(jī)和性能極強(qiáng)的處理器已經(jīng)相當(dāng)普遍?!?/span>
在演講即將結(jié)束之時(shí),有觀眾向 Mullenweg 詢問他對(duì) Gutenberg 項(xiàng)目的感受,以及開發(fā)人員為其做出貢獻(xiàn)時(shí)遭遇到哪些困難。提出這個(gè)問題的開發(fā)者還希望“降低 Gutenberg 的抽象級(jí)別”。
Mullenweg 回應(yīng)稱,“說(shuō)實(shí)施,我覺得大家必須適應(yīng)這種發(fā)展態(tài)勢(shì)。我認(rèn)為 Gutenberg 的開發(fā)方式和 JavaScript 優(yōu)先理念才是大部分 Web 開發(fā)工作的未來(lái)方向。順帶一提,其實(shí)我也得重新學(xué)習(xí),這些東西跟我當(dāng)初熟悉的方式也有區(qū)別。也許我們可以把某些抽象調(diào)整得更簡(jiǎn)單一點(diǎn),但總體而言,我會(huì)選擇深入研究一下。”
他還補(bǔ)充稱,Gutenberg 項(xiàng)目、包括向 JavaScript 語(yǔ)言的轉(zhuǎn)變,目前還遠(yuǎn)未完成。“在啟動(dòng) Gutenberg 項(xiàng)目時(shí),我們就知道這可能是個(gè)為期 10 年的項(xiàng)目。目前我們才剛剛完成 60%到 70%的工作。”
不得不承認(rèn),WordPress 項(xiàng)目(也是 PHP 能夠在 Web 領(lǐng)域保持流行的最大動(dòng)因)正堅(jiān)定向著 JavaScript 世界邁進(jìn)。這幾乎必然會(huì)阻止更多年輕開發(fā)者選擇 PHP,同時(shí)迫使其他開發(fā)人員(例如那些致力于服務(wù) WordPress 客戶的開發(fā)人員)從 PHP 轉(zhuǎn)向 JavaScript。
但好消息是,仍然有相當(dāng)一部分開發(fā)者群體會(huì)繼續(xù)使用 PHP——畢竟兩輪大規(guī)模開發(fā)者調(diào)查中的這 18%對(duì)應(yīng)著相當(dāng)體量的從業(yè)受眾。而 PHP 基金會(huì)將繼續(xù)為他們提供支持。
PHP 基金會(huì)于 2021 年 11 月正式成立,希望以非營(yíng)利組織的身份承擔(dān)起 PHP 項(xiàng)目的管理職責(zé)。PHP 基金會(huì)是由 JetBrains 領(lǐng)導(dǎo)的企業(yè)聯(lián)盟所建立,其中包括 Automattic、Zend、Laravel 以及 Acquia(Drupal 的托管商)等。JetBrains 工程師 Roman Pronskiy 則出任項(xiàng)目負(fù)責(zé)人,目前在基金會(huì)網(wǎng)站上的頭銜為“運(yùn)營(yíng)主管”。
在今年 2 月的 Laravel 會(huì)議上,Pronskiy 主要探討了技術(shù)問題,同時(shí)也承認(rèn)“PHP 基金會(huì)目前最艱巨的任務(wù),就是扭轉(zhuǎn) PHP 在公眾心目中的形象。”雖然他沒有具體說(shuō)明是哪些原因?qū)е?PHP 的公眾形象下降,但 Matt Mullenweg 在解釋 WordPress 轉(zhuǎn)向“JavaScript 優(yōu)先”的理由時(shí)已經(jīng)基本給出了答案。無(wú)論如何,Pronskiy 正快速投身于 PHP 項(xiàng)目的后續(xù)開發(fā),并為其組織起由 10 名有償開發(fā)者組成的全職團(tuán)隊(duì)。
PHP 基金會(huì)團(tuán)隊(duì)
總而言之,2024 年的 PHP 幾乎成了 Web 開發(fā)領(lǐng)域爹不疼、娘不愛的“孤兒”,而 JavaScript 則是在家、在校都備受關(guān)注的寵兒。對(duì) PHP 來(lái)說(shuō)更加可悲的是,目前的這種人氣下滑趨勢(shì)短時(shí)間內(nèi)恐怕無(wú)法停止——畢竟 WordPress 那邊的開發(fā)團(tuán)隊(duì)還在積極適應(yīng)新的 JavaScript 規(guī)范。但至少 PHP 基金會(huì)還在為此而努力,也許這股頹勢(shì)能夠逐漸迎來(lái)轉(zhuǎn)機(jī)。
原文鏈接:短短兩年使用率下滑40%!曾經(jīng)風(fēng)靡全球的PHP為何逐漸失去優(yōu)勢(shì)?_編程語(yǔ)言_Richard MacManus_InfoQ精選文章
、原因
1.編碼原因。在用GD庫(kù)輸出中文字符串時(shí),要使用imagettftext()函數(shù)。但如果PHP編譯時(shí)啟用–enable-gd-jis-conv選項(xiàng)的話,那么非ASCII字符(例如漢字、拼音、希臘文和箭頭) 會(huì)被當(dāng)成EUC-JP編碼 (phpinfo中美其名曰“支持JIS編碼的字體”), 從而導(dǎo)致亂碼(由于西文字體沒有假名或漢字,一般表現(xiàn)為全部是方框)。
2.沒有選擇正確的TTF字體文件。使用gd庫(kù)時(shí)如果要輸出中文字符,需要選擇正確的TTF字體文件。
二、解決方法
1.建議整站使用UTF8編碼,如果你已使用的是GB2312或GBK編碼,請(qǐng)使用iconv或自定義的gb2312與utf8轉(zhuǎn)換函數(shù)進(jìn)行字符編碼轉(zhuǎn)換。
2.如果你是剛進(jìn)行php環(huán)境搭建,建議將Apache配置文件中的默認(rèn)字符集修改為UTF8,即AddDefaultCharset UTF8。
3.如果上述方法還不行,請(qǐng)檢查你在編譯gd庫(kù)時(shí)是否添加了“–enable-gd-jis-conv”選項(xiàng),此選項(xiàng)是為了讓gd庫(kù)支持日文編碼的字庫(kù),請(qǐng)取消此選項(xiàng)并重新編譯。此方法本人已驗(yàn)證過(guò),Linux系統(tǒng)下安裝配置nginx+php環(huán)境,搭建Zabbix服務(wù)時(shí)碰到,添加了“–enable-gd-jis-conv”選項(xiàng),Zabbix使用中文界面,更換字體文件前后,查看主機(jī)監(jiān)控圖標(biāo)信息都會(huì)出現(xiàn)亂碼。
4.使用php gd庫(kù)產(chǎn)生中文亂碼的另一個(gè)原因是沒有選擇正確的TTF字體,你需要選擇支持中文的字體,常用的中文字體文件是simsun.ttc和simhei.ttf。
按照上述方法,基本上使用php gd庫(kù)產(chǎn)生中文亂碼時(shí)都能夠解決。只要仔細(xì)排查其實(shí)gd庫(kù)的中文亂碼解決起來(lái)非常方便。
參考:
https://www.php.cn/php-ask-456070.html
https://blog.csdn.net/lizhenjian521/article/details/51038547
為PHP編程領(lǐng)域的專家,我深知從網(wǎng)頁(yè)中提取HTML元素的益處。以下是幾種有效可行的技術(shù)手段,幫助您輕松應(yīng)對(duì)網(wǎng)頁(yè)數(shù)據(jù)處理挑戰(zhàn)!
利用file_get_contents函數(shù)獲取網(wǎng)頁(yè)文檔。
首要之事,file_get_contents函數(shù)在索取網(wǎng)頁(yè)源代碼方面具備極其重要的應(yīng)用價(jià)值。借助此功能,我們得以輕松便捷地將文檔內(nèi)容儲(chǔ)存在特定變量之中,從而大大提高后續(xù)流程的效率和靈活度。
2.使用正則表達(dá)式匹配HTML元素
接下來(lái),如何利用正則表達(dá)式實(shí)現(xiàn)對(duì)HTML元素的精細(xì)而高效的查找?我們借助這個(gè)實(shí)用工具,便可迅速定位并獲取所需對(duì)象信息了。
3.使用preg_match_all函數(shù)提取所有匹配結(jié)果
利用PREG_MATCH_ALL功能,便能順利檢索出所有HTML元素,進(jìn)而將其轉(zhuǎn)化為易于后續(xù)操作的數(shù)組格式進(jìn)行處理。
4.使用foreach循環(huán)遍歷匹配結(jié)果
處理匹配結(jié)果時(shí),利用for each循環(huán)對(duì)所有HTML元素進(jìn)行精細(xì)處理,確保無(wú)疏漏。
5.使用strip_tags函數(shù)去除HTML標(biāo)簽
在某些特殊情況下,只需關(guān)注HTML代碼內(nèi)的文本內(nèi)容,無(wú)需保留其他標(biāo)簽信息。此時(shí),運(yùn)用strip_tags函數(shù)便可便捷地消除所有HTML標(biāo)簽,從而顯示出純正文信息。
6.使用getAttribute方法獲取元素屬性
對(duì)于特定HTML參數(shù)的解析,我們推薦使用getAttribute技巧。此方法簡(jiǎn)易方便,能快速提供詳細(xì)屬性信息。
7.使用XPath進(jìn)行高級(jí)定位
除了常規(guī)的正則表達(dá)式, Xpath是一種更具靈活性的XML節(jié)點(diǎn)選擇工具。這是一種專業(yè)且精準(zhǔn)的分析XML路徑語(yǔ)言的算法。
8.使用DOMDocument類進(jìn)行DOM操作
借助DOMDocument類,可以精確高效地理清并實(shí)現(xiàn)網(wǎng)頁(yè)功能,如元素編輯,刪除及添加等。其豐富的方法屬性使其在解決DOM樹操控方面更具優(yōu)勢(shì)。
9.使用CURL庫(kù)模擬瀏覽器請(qǐng)求
在特定環(huán)境下,網(wǎng)頁(yè)會(huì)設(shè)立防爬蟲保護(hù)措施以避免數(shù)據(jù)被扒取。然而,依托于CURL庫(kù)及其模擬瀏覽器請(qǐng)求的技術(shù),這類限制已得以有效規(guī)避。
10.不斷學(xué)習(xí)和實(shí)踐才能掌握技巧
啟示強(qiáng)調(diào),深入理解HTML元素,對(duì)于熟練應(yīng)用于各類實(shí)戰(zhàn)項(xiàng)目絕非易事,唯有持之以恒地深化學(xué)習(xí)與實(shí)踐才得實(shí)現(xiàn)。
希望今日的分享能助您深化對(duì)PHP獲取及操作HTML頁(yè)面元素的理解掌握。立志者終成功,堅(jiān)持努力定將成就卓越PHP工程師之榮光。預(yù)祝您在技術(shù)領(lǐng)域百尺竿頭,再創(chuàng)新篇章!
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。