簡體   English   中英

什么是大型站點最可擴展的基於PHP的目錄結構?

[英]What is the most scalable PHP-based directory structure for a large site?

我正在創建一個非常大的基於PHP MVC的站點,它將擁有一個龐大的php類庫,javascripts和許多css文件(更不用說MVC的大量文件)。

我有史以來第一次花時間計划一個干凈有序的目錄結構。

您通常使用哪些目錄結構,哪些目錄結構在有數千個文件時最容易管理?

這是我的設置。 對於小型 - 非常大的項目(包括社交網絡)來說,這對我來說非常有用。
這些文件夾都存在於我的主應用程序文件夾中:

  • config - 包含自定義PHP配置文件
  • css - 包含項目的CSS文件
  • helpers - 包含'helper'文件(每個文件是函數的集合)
  • 圖像 - 包含項目的圖像
  • js - 包含項目的Javascript文件
  • lib - 包含特定於項目的PHP類
  • 模塊 - 我的MVC框架允許將站點部分打包為模塊
    • 博客 - 示例模塊
      • 控制器 - 包含模塊的控制器
      • models - 包含模塊的模型
      • views - 包含模塊的視圖
  • views - 包含應該可全局訪問的視圖(頁眉,頁腳等)

所有目錄顯然都可以包含進一步組織文件的子文件夾。 例如,'css'文件夾可以包含名為'web'和'mobile'的子文件夾。 'images'文件夾可以包含'user_uploaded'文件夾,然后可以包含`'profile'。 當然,您可以根據需要添加文件夾,在一個項目中,我有一個名為“uploaders”的文件夾,它只包含獨立的上傳腳本。

我還使用方便的方法來幫助構建我想要加載的文件名。 例如,我的loadView()將在當前模塊目錄中查找視圖文件,或者如果傳遞可選的$ module參數,它將特別在該模塊的文件夾中查找。

我希望這有幫助。

您應該有一個目錄作為Web根目錄,其中只有您希望暴露給整個Internet的文件才能駐留。

project/
 web/
  index.php
  css/
  js/
  images/
 config/
 lib/
  • web /是向訪問者顯示的根
  • lib /是這里的庫文件夾,以及autoload查找文件的位置。

您可以向項目/類似控制器,模塊,視圖,助手等添加更多子文件夾。這取決於您的框架。

編輯:

如果您使用作曲家(我推薦),也許使用npm和grunt,你的文件結構將會更少:

project/
    web/
        js/
        css/
        images/
        index.php
    cli/
    config/
        config.php
    node_modules/
    src/
    test/
    vendor/
    composer.json
    composer.lock
    packages.json
  • web /包含所有公共文件
  • cli /腳本和程序從命令行而不是Web運行
  • config /擁有你所有的配置文件(在git中你忽略了config.php而不是沒有用戶名,密碼,驗證碼和表前綴/后綴以及其他“秘密”的config.dist.php)
  • node_modules /擁有來自npm的所有庫文件(在git中我建議你把它放在子模塊中)
  • src包含psr4結構中的所有本地PHP文件,在composer.json中設置為自動加載
  • test /擁有你的src類的所有單元測試,在composer.json中的autload-dev中設置(記得在live上使用composer install --no-dev ,如果你沒有太多類,可以添加-o
  • 供應商擁有來自composer的所有庫文件和ONE AND ONLY autoload.php將包含在web / index.php和任何cli腳本中(在git中我建議您忽略此供應商文件夾)

根據項目需要添加其他文件夾和文件。

對於部署使用此結構:

/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 /

Samstyle PHP Framework的結構


我在這里發布的答案來自2009年。多年來發布了更多標准,包括PSR-0 ,其中涵蓋了文件夾結構的主題。 我還有一個新的(我覺得它更好)文件夾結構與Packfire框架

根據我的經驗,你永遠不能為此做好計划。 您可以嘗試遵循框架所做的事情,但我發現我從未完全適應他們的模具。

我建議在最大目錄中保留20個文件的經驗法則。 如果您發現需要更多,只需創建一些子目錄並在其中移動常用組件。

我將codeigniter用於小型和大型項目。 它的MVC功能適度優秀。

  • codeIgniter \\ system \\ application \\ config:包含所有類型的配置文件,如DB,支付網關,ftp配置,路由和...
  • codeIgniter \\ system \\ application \\ models:包含各種數據庫類,你應該根據需要創建子文件夾,我用過customer,mailData,paymentModel,report,web-service和....
  • codeIgniter \\ system \\ application \\ views:包含將作為客戶端輸出的各種文件,如果可能,您應該考慮重用這些文件。 像模型一樣,您必須創建子文件夾,如管理,報告,電子郵件,email_template .....
  • codeIgniter \\ system \\ application \\ controllers:這是最重要的部分。 這將有助於創建SEO網址,所以這次你應該更加小心子文件夾。 您可以創建類似管理,產品,報告,訂單......並考慮控制器類功能的良好名稱。

這些是PHP / HTML文件。

現在關於其他文件:

  • codeIgniter \\ images:用於圖像
  • codeIgniter \\ scripts:用於Java腳本及其框架
  • codeIgniter \\ styles:用於CSS
  • codeIgniter \\ uploads:對於上傳的文件,如果您不想將文件放入數據庫中

有關詳細信息,請參閱codeIgniter框架的詳細信息。

這里“codeIgniter”是批准

這主要是一個偏好問題,快速谷歌搜索將揭示許多不同的項目結構。 但如果有一個商定的標准,那將是非常好的。 我認為PHP Package Development Standards的這一舉措是一個很好的選擇。

這是他們提出的目錄結構:

  • bin / :命令行可執行文件
  • config / :配置文件
  • docs :文檔文件
  • public / :Web服務器文件
  • resources / :其他資源文件
  • src / :PHP源代碼
  • tests / :測試代碼

編輯:

在公共目錄結構部分的PHP正確方法中也提到了這一點。

這是我目前正在使用的結構,

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.4symfony 2 dir結構。 選擇最直觀的選擇。

暫無
暫無

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

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