[英]What is the most scalable PHP-based directory structure for a large site?
我正在創建一個非常大的基於PHP MVC的站點,它將擁有一個龐大的php類庫,javascripts和許多css文件(更不用說MVC的大量文件)。
我有史以來第一次花時間計划一個干凈有序的目錄結構。
您通常使用哪些目錄結構,哪些目錄結構在有數千個文件時最容易管理?
這是我的設置。 對於小型 - 非常大的項目(包括社交網絡)來說,這對我來說非常有用。
這些文件夾都存在於我的主應用程序文件夾中:
所有目錄顯然都可以包含進一步組織文件的子文件夾。 例如,'css'文件夾可以包含名為'web'和'mobile'的子文件夾。 'images'文件夾可以包含'user_uploaded'文件夾,然后可以包含`'profile'。 當然,您可以根據需要添加文件夾,在一個項目中,我有一個名為“uploaders”的文件夾,它只包含獨立的上傳腳本。
我還使用方便的方法來幫助構建我想要加載的文件名。 例如,我的loadView()將在當前模塊目錄中查找視圖文件,或者如果傳遞可選的$ module參數,它將特別在該模塊的文件夾中查找。
我希望這有幫助。
您應該有一個目錄作為Web根目錄,其中只有您希望暴露給整個Internet的文件才能駐留。
project/
web/
index.php
css/
js/
images/
config/
lib/
您可以向項目/類似控制器,模塊,視圖,助手等添加更多子文件夾。這取決於您的框架。
編輯:
如果您使用作曲家(我推薦),也許使用npm和grunt,你的文件結構將會更少:
project/
web/
js/
css/
images/
index.php
cli/
config/
config.php
node_modules/
src/
test/
vendor/
composer.json
composer.lock
packages.json
根據項目需要添加其他文件夾和文件。
對於部署使用此結構:
/sites/project/ (project is your projectname)
current (alias to current release folder releases/v1.1.0)
previous (optional alias to previous release folder releases/v1.0.1)
releases/
v1.0.0/ (git checkout of tag v1.0.0)
v1.0.1/ (git checkout of tag v1.0.1)
v1.1.0/ (git checkout of tag v1.1.0)
shared/ (has all your shared files and folders to be aliased in all releases - maybe something like GlusterFS)
制作部署腳本。 像這樣的東西:
首先備份db或將其復制到新數據庫,將git repo復制到帶有release標簽的新文件夾,獲取所有git子模塊,運行composer install --no-dev,設置共享文件夾和上傳圖像等文件的任何別名配置文件,使用grunt生成js / css以及更少或等效,使用標記指向新文件夾的當前別名,運行更新數據庫腳本,重新啟動nginx / apache / fpm-php服務,運行測試以檢查網站是否已啟動。
有一個腳本可以回到以前的版本(或指南,所以你知道該怎么做)。
對於包含的核心文件:approot / inc /
對於數據訪問功能和類位於:approot / dao /
對於javascripts:approot / scripts /
對於CSS:approot / styles /
對於圖像:approot / img /
對於靜態內容(通常用於用戶個人資料圖片或上傳的圖像):approot / static /
對於緩存:approot / caches /
對於模板或視圖文件:approot / templates /
所有頁面文件:approot /
我在這里發布的答案來自2009年。多年來發布了更多標准,包括PSR-0 ,其中涵蓋了文件夾結構的主題。 我還有一個新的(我覺得它更好)文件夾結構與Packfire框架 。
根據我的經驗,你永遠不能為此做好計划。 您可以嘗試遵循框架所做的事情,但我發現我從未完全適應他們的模具。
我建議在最大目錄中保留20個文件的經驗法則。 如果您發現需要更多,只需創建一些子目錄並在其中移動常用組件。
我將codeigniter用於小型和大型項目。 它的MVC功能適度優秀。
這些是PHP / HTML文件。
現在關於其他文件:
有關詳細信息,請參閱codeIgniter框架的詳細信息。
這里“codeIgniter”是批准
這是我目前正在使用的結構,
public/
assets/ /* js, css, imgs, ... */
index.php
src/
config/ /* for config files */
helpers/ /* for functions */
libraries/ /* for free classes that are not MVC classes */
models/ /* for M in MVC */
views/ /* for V in MVC */
controllers/ /* for C in MVC */
vendor/ /* for vendors files */
uploads/ /* for uploaded images, docs, ... */
我相信這取決於項目的規模。 這是我主要使用的:
項目/
的index.php
IMG /
CSS /
JS /
意見/
職能/
只要所有項目文件都有條理......
即使這個問題很老,我仍然認為建議最新的可擴展應用程序結構是明智的,我已經在基於SOA的應用程序中工作並且工作得非常好。
myApplication/
app/
config/
+ this can include custom MVC structure
cli/
docker/
lib/ - most commonly reusable components
logs/
public/ - should contain all publicly exposable web contains
sql/ - db migration stuffs
tests/ - compulsory test
tools/ - application addon tools like any kinds of rulset etc
vendor/
看看symfony 1.4或symfony 2 dir結構。 選擇最直觀的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.