首頁 > 後端開發 > php教程 > PHP應用程序環境

PHP應用程序環境

William Shakespeare
發布: 2025-02-15 12:43:12
原創
351 人瀏覽過

The PHP Application Environment

The PHP Application Environment

本文節選自我們近期出版的書籍《Jump Start PHP Environment》,SitePoint Premium會員可免費獲取。紙質版和電子書在全球各大書店有售,您也可以在此處訂購。希望您喜歡這篇節選並發現它有用。

我們將重點介紹應用程序環境。我們還將討論諸如XAMPP之類的*AMP捆綁包以及為什麼它們是一個糟糕的選擇;生產/開發一致性;以及性能和調試。

關鍵要點

  • 理解應用程序環境:PHP應用程序環境包含各種階段,包括開發、生產和預發布,每個階段對應用程序的生命週期都至關重要。
  • *AMP捆綁包的陷阱:像XAMPP這樣的軟件包雖然方便,但會阻礙學習,並導致開發環境混亂不堪,難以清理和維護。
  • 生產與開發一致性:保持開發和生產環境之間的一致性至關重要,以最大限度地減少部署問題,並確保兩個平台上的行為一致。
  • 性能優化和調試:有效的性能優化涉及多個層面,包括數據庫調整、前端調整和後端優化,而調試對於保持運營效率至關重要。
  • 用於本地測試的虛擬主機:使用虛擬主機允許開發人員在本地機器上模擬實時環境,從而方便測試和開發,而無需部署到互聯網。
  • 虛擬機的意義:虛擬機有助於實現開發和生產環境的一致性,允許開發人員在不同的系統上運行相同的設置,從而簡化開發流程。

應用程序環境

應用程序環境是指應用程序在其生命週期的各個階段可能存在的環境:生產環境、開發環境和預發布環境。

環境一詞是指應用程序周圍的硬件和軟件;也就是說,所有用於為其提供動力的東西。

生產環境

我們將從最簡單的環境開始:生產環境。

當您部署應用程序時——換句話說,將其上傳到服務器並使其對目標受眾公開訪問——您是在將其投入生產使用。生產環境是您的應用程序的最終目的地,您代碼的目的。

在應用程序的生命週期中,生產環境是實時服務器——一台服務器計算機,其設置允許其他人連接到它並查看您的網站。此實時服務器將被配置為盡可能高效地服務您的應用程序。您在開發過程中使用的所有額外文件都將通過稱為編譯或構建的過程從應用程序中刪除,這將在後面進一步解釋。

在生產環境中,您的網站被認為是實時的(或已部署的),並且可以通過其自己的域名訪問;例如,https://www.php.cn/link/52eea859b07495d44fb844cdcecdf239

這相當於廚師在餐廳做飯並將食物送到訂購它的顧客手中。

開發環境

在開發環境中,您的應用程序正在積極開發中。開發環境是您作為開發人員用來開發應用程序的計算機,包括您所有團隊成員的計算機,無論他們是否在您附近或遠程。需要注意的是,儘管涵蓋了這兩個方面,但開發環境更多地是指您的應用程序所處的狀態,而不是它的物理位置——應用程序處於正在開發的狀態。

在開發環境中,您可以使用各種工具——從IDE(參見第2章)到單元測試庫和標準修復程序、編譯器和構建器、文件監視器等等——任何您需要完成手頭工作的東西。

如果我們將我們的應用程序比作智能手機,那麼製造它的裝配廠就是開發環境。此環境包含所有必要的部件——屏幕、外殼、電池、各種LED——並且每個部件在用於構建智能手機單元之前都會單獨進行測試。這稱為單元測試——確保每個單元都能工作。

有關應用程序開發中單元測試的示例,請參見本章末尾名為“對於那些想要更多的人”的部分。

為了進一步說明智能手機組裝的比喻,正在測試的電池可能需要單獨的充電器附件,或者可能需要使用帶有合成手指的機械臂來測試屏幕,以確保屏幕的觸摸靈敏度正常工作。

The PHP Application Environment 所有這些附加組件僅在開發期間存在。從開發環境轉換為生產環境(也稱為部署)時,這些附加組件將被刪除。對於我們的應用程序,這意味著前面提到的編譯/構建步驟:各種CSS和JavaScript文件合併在一起並縮小,以減小網站的大小,使其在人們訪問時顯得更快;單元測試被忽略並留在開發環境中;並且發生各種其他優化(本章後面介紹)——所有這些都是為了在聲明準備就緒時使最終產品最大限度地發揮其吸引力和潛力。

主機和虛擬主機

當您在自己的計算機上進行開發時,無法訪問URL https://www.php.cn/link/2c70bf4df3f4bfe2322ecf7a8803418c

簡而言之,虛擬主機向安裝在您計算機上的服務器程序發出指令,例如:如果用戶在瀏覽器中請求http://mysite.com,則通過PHP運行文件mysite.php並在瀏覽器中顯示其輸出。

如您所見,這與實時網站的常規請求流程幾乎相同。但是,是什麼讓瀏覽器向我們自己的計算機的服務器程序請求mysite.com域名,而不是在互聯網的名稱服務器上查找它呢?主機文件。

主機文件是每個操作系統上都存在的特殊文件。我們在第1章名為“對於那些想要更多的人”的部分中簡要提到了它。它包含域名及其相應IP地址的列表,以便您計算機上的任何瀏覽器都可以讀取它並直接轉到IP地址,而無需與DNS通信以檢查要轉到哪裡。在Windows上,該文件位於C:WindowsSystem32driversetchosts,在Linux和Mac機器上,它位於/etc/hosts。如果您將IP-名稱對放入此文件中,計算機將服從它。我們現在就可以嘗試一下。別害怕——沒有什麼會出錯的。準備好了嗎?

在Windows上,輸入搜索字段,鍵入“記事本”,出現後,右鍵單擊它並選擇“以管理員身份運行”。然後,系統將要求您確認。在打開的窗口中,選擇“文件”>“打開”,然後轉到:我的電腦>C:>Windows>System32>drivers>etc。在記事本窗口的右下角,您可能需要選擇“所有文件”,以便顯示hosts文件。雙擊打開它。

在Linux/Mac機器上,通過搜索打開終端。 在Linux上,通過在終端中鍵入sudo gedit以管理員身份打開默認文本編輯器。系統將要求您輸入管理員密碼。 在OS X上,輸入sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit,這將執行相同的任務。在這兩個編輯器中的任何一個中,轉到“文件”->“打開”,然後輸入目錄/etc以查找hosts文件。雙擊打開它。

打開文件後,請注意前幾行:它們都以哈希符號(#)開頭。這表示它們是註釋,對文件沒有影響。這些用於向用戶解釋文件的目的,它們也存在於PHP中。

現在,在所有這些註釋行下,添加以下行:

<code>208.117.229.217 bing.com</code>
登入後複製

保存文件並在瀏覽器中打開http://bing.com。您剛剛成功地將所有對Microsoft搜索引擎Bing的請求重定向到Google!當然,我們不想保留這些更改;您可以隨意刪除此行或在其前面放置哈希符號以將其轉換為註釋,然後保存文件。您應該能夠像往常一樣再次訪問http://bing.com。

使用此方法,我們稍後將所有瀏覽器對http://mysite.com(這將是我們應用程序的示例域名)的請求重定向到我們自己的計算機的服務器。這將使我們能夠輕鬆測試我們網站的開發版本,而無需將其部署到實時環境。

預發布和維護

預發布環境是包含生產環境副本(也稱為鏡像)的單獨服務器(或多台服務器)。在小型公司或項目中,預發布環境通常會被跳過。它旨在盡可能地與生產環境相似,安裝的軟件版本匹配,配置值相同,等等。預發布用於執行最終測試;例如,Facebook可能會重新設計其首頁,在將其部署到生產環境供所有用戶查看之前,它會將其部署到其預發布服務器,以便員工(也稱為質量保證團隊的專用非程序員)可以像定期使用一樣先測試所有內容。如果一切順利,則會發生從預發佈到生產的最終部署。

預發布超出了本書的範圍,但了解它總是有好處的。在虛擬機和小型一次性項目時代,預發布可能是多餘的,只有在更大的長期Web應用程序中才會發揮作用。

在此上下文中,我們還必須介紹維護模式。它是一個模式,而不是一個環境,因為應用程序周圍的環境不會改變——只有應用程序的狀態會改變。它通常只是生產服務器上的一個開關,告訴那些試圖訪問該網站的人一些類似“馬上回來,正在調整!”的話。

*AMP捆綁包的弊端

在開始PHP開發時,下載和安裝XAMPP、WAMP、MAMP或EasyPHP等軟件包非常誘人。這些名稱中的AMP代表“Apache、MySQL和PHP”。 XAMPP在末尾添加了另一個P,用於Perl語言。第一個字母指的是操作系統:Windows、Linux、Mac OS X,或者在XAMPP的情況下,是跨平台的(意味著它可以在任何操作系統上運行)。

這些捆綁包包含您需要在計算機上快速輕鬆地運行PHP應用程序的所有軟件。只需單擊一下,您就可以安裝編寫第一個PHP腳本所需的一切。那麼,這其中的壞處在哪裡呢?

  • 您的計算機將被不必要的軟件污染
  • 您將學習到的知識比手動安裝要少
  • 測試很困難
  • 如果您犯了錯誤,要恢復到之前的狀態要么非常困難,要么不可能

讓我們逐一解決這些問題。

機器污染

每當您在計算機上安裝諸如*AMP堆棧之類的軟件時,您的計算機的一部分就會損壞。即使您稍後刪除該軟件,通常也會留下令人不舒服的痕跡——通常以Windows中的註冊表項或Linux上的文件殘留物形式出現。事實上,這在Linux上尤其明顯。雖然Windows和OS X應用程序安裝在一個應用程序文件夾中,所有相關文件都在其中,但在Linux上,安裝軟件就像用獵槍射擊一座用樂高積木建造的城堡一樣。單擊一下,它們就到處都是

隨著時間的推移,您將安裝另一個庫、另一個軟件包、另一個工具。在進一步開發應用程序時,您將繼續添加補充軟件,也許會添加完全不同的項目,因為您已經開始並行處理一個新項目。也許app1需要一個PHP擴展來編輯圖像,而app2需要一個PHP擴展來允許它將代碼打包到封閉源代碼存檔中,以便您的代碼對競爭對手隱藏起來。隨著時間的推移,您的機器上將有數百兆字節的開發軟件,卻不知道您是否仍然需要它。

您的機器將變慢,應用程序將變得不太可用,您的開發機器——您正在使用的計算機——將與您最終打算在其上部署應用程序的生產服務器大相徑庭,以至於您將無法優雅地處理這種差異。您最終將經常在實時網站上與錯誤作鬥爭,並讓您的訪問者非常惱火。

學習是進步,或者舒適區如何被高估

通過依賴這些預構建的軟件包,您還會剝奪自己學習系統管理工作(簡稱ops)的經驗。在較大的公司中,Ops是一個團隊或負責人,負責服務器問題——無論是修復錯誤、安裝新軟件、升級現有軟件等等。在較小的團隊中或為客戶單獨工作時,基本的系統管理是一項必備技能。

雖然能夠一鍵安裝計算機上所需的一切非常方便,但在服務器上沒有用戶界面,因此無法單擊;您需要掌握設置服務器軟件所需的命令,以便它可以運行您的PHP應用程序。否則,您要么注定要雇用服務器管理員來幫助您,要么更糟糕的是,使用共享主機(第6章中解釋的一個恐怖故事)。

通過拒絕依賴這些*AMP捆綁包,您將被迫手動安裝服務器和其他軟件,這將迫使您克服學習曲線——如果您認真對待這條職業道路,這些知識將以多種方式對您有所幫助。此外,掌握基礎知識實際上並不難,正如您將在本書後面看到的那樣。

測試

假設app1app2構建在PHP 5.3上,運行MySQL 4.0,並打算部署到由Apache(服務器軟件)驅動的服務器上。然後,有一個新的要求:確保app1可以在PHP 5.6和MySQL 5.1上運行,並且可以由Nginx(另一個與Apache競爭的服務器程序,發音為“engine x”)驅動。哦,現在怎麼辦?

我們可以將PHP更新到較新的版本並檢查app1是否仍然有效,但是我們如何在不意外地使用PHP 5.3中不可用的代碼的情況下繼續開發app2 呢?同樣,我們可以將MySQL升級到5.1並檢查它是否仍然有效,但是我們如何知道MySQL在5 版本中是否丟棄了一些舊功能,即使我們修復了app1以在5.1上運行,這些功能也會破壞app2呢?畢竟,app2仍然需要在4.0上運行,因為它可能仍然部署在這樣的生產服務器上。哎呀,我們如何處理Apache與Nginx的問題?我們是否在計算機上安裝兩個Web服務器並分別進行測試?我們如何切換它們?我們如何確保我們記得在一個運行時測試我們的網站?

這僅僅是針對兩個應用程序而言。現在想像一下,如果您必須處理來自十個不同客戶的十幾個應用程序,每個應用程序都有不同的要求。這一切很快就變得不再有趣了。

通過虛擬機可以輕鬆解決不同軟件版本的這種分離問題,我們將在第4章中討論。

無法清理的混亂

最後,如果我們嘗試安裝新版本的PHP,但出現問題怎麼辦?這種情況在OS X和Linux中尤其常見——現在我們機器上安裝的PHP版本都不起作用,而且事實證明不可能讓單個站點運行。真是一團糟!我們不是可以輕鬆地恢復到之前的運行狀態,而是被迫花費一整天來調試我們自己的系統並試圖使其運行——不一定是正確的版本,而是僅僅運行

如果我們只需要輸入一個命令就可以讓事情恢復到10分鐘前的狀態,那不是很好嗎?好吧,我們可以!這也將在第4章中演示。

生產/開發一致性

這個聽起來很複雜的說法實際上很簡單——我們實際上之前已經間接地談到了它。生產/開發一致性意味著使生產環境和開發環境盡可能相似,最好是完全相同,這樣您開發的任何內容都將自動在生產環境中運行,而無需任何額外的配置或調試或調整。

由於節省了大量時間,因此實現一致性對於工作流程非常重要。避免為應用程序在生產環境中運行而不得不做任何額外的工作,這意味著您可以自由地將時間和精力集中在真正有益於應用程序上下文的重要的業務相關邏輯問題上,而不是不斷地追趕。在開發中進行更改,然後必須在生產中進行兩次更改才能使更改顯現出來,這充其量是乏味的,最壞的情況會損害項目的健康。您永遠不知道團隊中的誰會犯錯誤,導致應用程序向用戶顯示錯誤屏幕。

實現一致性的最佳方法是在您的開發環境中運行與生產環境中完全相同的軟件。例如,如果您打算將應用程序部署到運行Ubuntu Linux 14.04操作系統的服務器上的生產環境中,那麼最好也在此操作系統上進行開發。但是,如果我們運行的是Windows,因為我們喜歡使用遊戲等高級多媒體內容,或者我們需要一些在Linux操作系統上根本不存在的強大的圖像和視頻處理軟件,該怎麼辦?我們是否應該放棄我們所有的其他興趣,在Windows上安裝Linux,並努力實現一致性而不是其他任何東西?或者我們是否應該放棄一致性並冒險,同時保持我們的計算機強大、美觀和穩定,堅持我們選擇的操作系統?

幸運的是,有一種第三種方法可以使您同時獲得兩全其美:虛擬機(在第4章中介紹)。

性能和調試

我們需要介紹的應用程序環境的最後幾個方面是確保應用程序快速(性能)且無錯誤(調試)。本節完全是理論性的;只是為了讓您知道稍後在遇到這些術語時會有什麼期望。

性能是通過各種優化方法實現的。與該詞的含義相反,在應用程序開發中,優化通常具有多個層次,而且很少有更改會立即帶來完美的解決方案。性能包括但不限於以下幾個方面:

優化數據庫
數據庫通常是任何網站中最慢的部分,在數據庫運行一段時間後,瓶頸(由於無法足夠快地處理傳入請求的數量而成為最慢的部分)變得明顯時,它可以從額外的優化中受益。數據庫優化的方法包括設置索引、拆分讀寫、更改數據庫引擎、緩存提取的數據以及其他神秘的短語。

優化前端資源
我們前面提到了編譯和構建——這就是我們優化網站前端的方式。當向用戶顯示網站時,他們看到的輸出包括圖像、HTML、CSS和JavaScript,所有這些都需要在瀏覽器中下載和執行,如第1章所述。這些文件越小——而且越少——網站加載速度越快。通常,網站將有多個CSS文件和多個JavaScript文件。將每種類型組合成一個更大的CSS或JavaScript文件可以顯著提高網站的下載速度。另一個經常使用的前端資源優化技巧是通過內容交付網絡(CDN)提供圖像,CDN是一種第三方服務,它為您託管圖像並確保訪問您網站的訪問者從最接近他們的服務器下載圖像,從而進一步提高速度。還可以減小圖像大小,通過將所有圖像放入一個文件中來創建圖像精靈等等。

優化後端
這也是一個編譯/構建步驟。測試文件被忽略,文件被合併成更大的文件以代替一百萬個較小的文件。一些PHP應用程序甚至被編譯成另一種編程語言,例如C ,這要快得多。

緩存
緩存是保存以前需要的文件和響應以備後用,並期望它們會被再次請求。如果您向數據庫詢問數據庫中用戶的總數,它將對它們進行計數並為您提供該數字。如果您讓它保存此數字以備後用(即緩存它),那麼下次被詢問時,它可以直接獲取已準備好的信息。當您詢問服務器“如果我訪問mysite.com/user/5/,我會得到什麼?”時,它會告訴您。如果您告訴它記住下次提出問題時的答案,則服務器無需查找,因為它已經知道了。緩存在Web開發中非常重要——有一句俗話說“緩存為王”。當突然出現大量流量時,它可能意味著應用程序的生死攸關。

調試與性能緊密相關。除了給用戶帶來討厭的錯誤屏幕外,代碼中的錯誤還會導致執行鎖定、代碼中本不應該存在的停頓、對數據庫的重複和不必要的查詢等等。

那麼,如何衡量性能或查找錯誤呢?有很多工具可以用於分析PHP應用程序(這就是查找錯誤和衡量應用程序各個方面的性能所稱的)。兩個更好的工具是Z-Ray和Blackfire(我們不會在本書中介紹它們,因為它們超出了本書的範圍)。

警告:注意微優化

需要注意的是,一個常見的初學者錯誤是微優化。例如,曾經有人認為使用單引號與字符串($var = 'Some String')比雙引號($var = "Some String")更快。這種優化可以帶來的性能提升可以忽略不計,而且幾乎總是微不足道的;相反,改進複雜的SQL查詢或緩存遠程HTTP調用總是會大一個數量級。如有疑問,請使用基準測試和真實數據(例如來自Z-Ray或Blackfire的數據),切勿使用您的直覺。

總結

在本章中,我們探討了應用程序環境,涵蓋了應用程序在其生命週期的給定階段周圍存在的各種生態系統。我們討論了虛擬主機以及如何配置您的計算機以將網站URL重定向到您自己的PHP安裝,而不是在線查找結果,並且我們討論了非常重要的開發/生產一致性。

如果這一切看起來過於復雜,請不要灰心。這僅僅是因為到目前為止,我們幾乎只處理了理論——這是勇敢地進入實踐領域所必需的理論。在下一章中,我們將使用一些虛擬機親自動手操作。

對於那些想要更多的人

在應用程序領域中,測試各個組件被稱為單元測試——測試每個單獨的代碼集,以便您知道它是否有效。

例如,您的應用程序的一部分可能具有從每個名稱中刪除本地符號並將其轉換為美國友好的字母的能力。我的姓氏“Škvorc”將因此轉換為“Skvorc”。將Škvorc轉換為Skvorc是一小段代碼,或一個單元。這個單元是可以測試的;也就是說,對於任何給定的“Škvorc”輸入,我都期望輸出“Skvorc”。然後,我可以編寫一個單元測試,這是一個定義輸入和所需輸出的文件,當我運行它時,它會測試此功能是否仍然有效。如果兩個月後,我更改了應用程序中的某些內容,我可以輕鬆運行此測試(仍然存在)並檢查此轉換是否仍然有效。這種工作流程確保您可以稍後升級應用程序,而無需擔心破壞您之前構建並忘記的內容。在我們本章開頭關於智能手機的比喻中,一個單獨的可測試單元可以是觸摸屏或電池。

關於PHP應用程序環境的常見問題解答(FAQ)

PHP應用程序環境在Web開發中的意義是什麼?

PHP應用程序環境是Web開發的一個重要方面。它提供了一個受控的環境,開發人員可以在其中構建、測試和部署他們的PHP應用程序。此環境包括PHP解釋器、Web服務器和數據庫系統。它允許開發人員以一致且可預測的方式管理應用程序的不同方面,例如配置設置、錯誤處理和數據庫連接。這導致更有效的開發流程和更高質量的應用程序。

PHP應用程序環境與其他編程環境有何不同?

PHP應用程序環境專為Web開發而設計。它們配備了促進創建動態網頁和Web應用程序的功能。與其他一些編程環境不同,PHP環境支持各種數據庫,並與各種操作系統兼容。它們還提供了廣泛的錯誤報告和日誌記錄功能,這可以極大地幫助調試和故障排除。

PHP應用程序環境的關鍵組件是什麼?

PHP應用程序環境通常包含三個主要組件:PHP解釋器、Web服務器和數據庫系統。 PHP解釋器負責執行PHP腳本。 Web服務器處理HTTP請求和響應。數據庫系統根據PHP應用程序的要求存儲和檢索數據。這些組件共同為開發、測試和部署PHP應用程序提供了一個全面的平台。

如何設置PHP應用程序環境?

設置PHP應用程序環境包括安裝和配置必要的組件。這包括PHP解釋器、Web服務器(例如Apache或Nginx)和數據庫系統(例如MySQL或PostgreSQL)。安裝這些組件後,需要將它們配置為協同工作。這可能包括設置數據庫連接、配置PHP設置以及設置Web服務器以處理PHP腳本。

管理PHP應用程序環境的最佳實踐是什麼?

管理PHP應用程序環境的最佳實踐包括保持環境最新、定期備份數據以及監控環境的性能。遵循安全最佳實踐也很重要,例如使用安全連接、保護敏感數據以及定期檢查漏洞。此外,使用版本控制系統可以幫助管理更改並跟踪應用程序的不同版本。

PHP應用程序環境如何幫助進行錯誤處理?

PHP應用程序環境提供了廣泛的錯誤報告和日誌記錄功能。可以配置這些功能以提供有關在執行PHP腳本期間發生的錯誤的詳細信息。此信息對於調試和故障排除非常寶貴。此外,可以將PHP環境設置為以不會中斷用戶體驗的方式處理錯誤,例如通過顯示自定義錯誤頁面。

我可以將PHP應用程序環境用於移動應用程序開發嗎?

是的,PHP應用程序環境可用於移動應用程序開發。 PHP是一種服務器端腳本語言,這意味著它可以用於創建移動應用程序的後端。此後端可以處理諸如處理數據、與數據庫交互和管理用戶會話等任務。但是,對於移動應用程序的前端,您通常會使用不同的技術,例如HTML、CSS和JavaScript。

使用PHP應用程序環境的優點是什麼?

使用PHP應用程序環境有很多優點。它為開發、測試和部署PHP應用程序提供了一個受控且可預測的環境。它支持各種數據庫,並與各種操作系統兼容。它還提供了廣泛的錯誤報告和日誌記錄功能,這可以極大地幫助調試和故障排除。此外,PHP環境通常易於設置和管理。

如何保護我的PHP應用程序環境?

保護PHP應用程序環境涉及多個步驟。這包括使用安全連接、保護敏感數據、定期更新環境以及檢查漏洞。遵循PHP編碼的最佳實踐也很重要,例如驗證和清理用戶輸入、為數據庫查詢使用預處理語句以及避免使用已棄用的函數。

我可以自定義我的PHP應用程序環境嗎?

是的,可以自定義PHP應用程序環境以滿足項目的特定需求。這可能包括配置PHP設置、設置數據庫連接以及自定義Web服務器。此外,還有許多可用的工具和庫可以擴展PHP環境的功能,例如用於快速應用程序開發的框架、測試工具以及用於處理圖像處理、XML解析等任務的庫。

以上是PHP應用程序環境的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板