簡體   English   中英

訪問DOCUMENT_ROOT之外的PHP類文件

[英]Access PHP class files outside DOCUMENT_ROOT

我對基於PHP網絡的應用程序結構的“最佳實踐”的構成感到困惑。 閱讀本網站有很多建議。 經常提到的一個結構是“文檔根目錄中沒有任何php文件”。 雖然這聽起來像是一種很好的做法,但我看不出它是如何工作的 - Web服務器無法識別文檔根目錄之外的任何內容。 我假設文檔根目錄是公共訪問目錄,如下所示:

app-
  |
  - htdocs - document root
  | |
  | - index.php
  | - css/
  | - images/
  |
  - PHP classes in here/
  - Other PHP classes in here.../

或者上面示例中的“app”是文檔根目錄,而htdocs目錄是站點結構的公共可訪問區域嗎?

接下來,我如何確保除了htdocs之外的目錄中的文件沒有公共訪問權限?

這個概念很簡單,特別是如果你使用基於前端控制器的框架,無論是你自己的還是現有的框架(比如Zend Framework)。 當所有請求都通過中央控制器時,必要時會包含處理請求所需的文件。 包含的文件不必在Web根目錄中工作。 它們只需要可供控制器使用即可包含然后執行。 因此,只有您的控制器需要位於Web根目錄中。 其他一切都可以在它之外。

僅供參考,這也適用於非OOP應用程序。 您只需要在每個頁面中包含所需的文件。

Web根目錄中需要的是瀏覽器請求的任何圖像,樣式表,javascript文件等。

雖然Web服務器無法識別文檔根目錄之外的任何內容,但這僅適用於USER通過HTTP請求請求的文件。

PHP在Web服務器中運行,沒有文檔根和URL的概念。 它只能看到網絡服務器主機操作系統的底層文件系統,以及符合某些標准的進出數據。 PHP受限於某些基於Web的限制的唯一時間是Web服務器本身是在chroot jail中運行的。

因此,您可以在文件系統上放置一個php文件ANYWHERE ,並且假設權限正確,PHP將能夠訪問它並運行它。 如果該文件被隱藏在完全位於文檔根目錄之外的500級深度目錄中並不重要 - 如果它可以訪問,則PHP可以運行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM