proyecto estructura correcta carpetas php directory

correcta - ¿Cuál es la estructura de directorios basada en PHP más escalable para un sitio grande?



estructura de carpetas de php (9)

Creo que esto depende de cuán grande será el proyecto. Esto es lo que usé principalmente:

proyecto/
index.php
img /
css /
js /
puntos de vista/
funciones /

Mientras todos los archivos del proyecto estén organizados ...

Estoy creando un sitio muy grande basado en PHP MVC que tendrá una gran biblioteca de clases php, javascripts y muchos archivos css (sin mencionar una gran cantidad de archivos para el MVC).

Por primera vez, me tomo el tiempo para planificar una estructura de directorios limpia y organizada.

¿Qué estructuras de directorios usas normalmente y cuáles serán las más fáciles de manejar cuando hay miles de archivos?


Debe tener un directorio como raíz web, donde solo deben residir los archivos que desee que estén expuestos a todo Internet.

project/ web/ index.php css/ js/ images/ config/ lib/

  • web / es la raíz mostrada a los visitantes
  • lib / es aquí la carpeta de la biblioteca, y donde los archivos se cargan automáticamente.

Puede agregar más subcarpetas al controlador de proyecto / como, módulos, vista, ayudante, etc. Esto depende de su marco.

EDITAR:

Si usa el compositor (que yo recomiendo) y tal vez npm con gruñido y menos su estructura de archivos sería la siguiente:

project/ web/ js/ css/ images/ index.php cli/ config/ config.php node_modules/ src/ test/ vendor/ composer.json composer.lock packages.json

  • web / tiene todos tus archivos públicos
  • cli / scripts y programas que se ejecutarán desde la línea de comandos NO en la web
  • config / tiene todos sus archivos de configuración (en git ignora config.php y en su lugar tiene config.dist.php sin nombres de usuario, contraseñas, códigos de validación y prefijos / sufijos de tabla y otros "secretos")
  • node_modules / tiene todos sus archivos de biblioteca de npm (en git le sugiero que ponga esto en un submódulo)
  • src tiene todos sus archivos PHP locales en la estructura psr4, configurados para autocargar en composer.json
  • prueba / tiene todas las pruebas unitarias para tus clases de src, configúralo en autload-dev en composer.json (recuerda usar el compositor instalar --no-dev en vivo, tal vez agrega -o si no tienes demasiadas clases)
  • el proveedor tiene todos los archivos de la biblioteca del compositor y ONE AND ONLY autoload.php para incluir en web / index.php y cualquier secuencia de comandos Cli (en git le sugiero que ignore esta carpeta del proveedor)

Agregue otras carpetas y archivos según sea necesario para su proyecto.

Para la implementación use esta estructura:

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

Hacer un script de implementación. Algo como esto:

Primero haga una copia de seguridad de la base de datos o para copiarla en una nueva base de datos, compruebe git repo en una nueva carpeta con la etiqueta de lanzamiento, obtenga todos los submódulos de git, ejecute composer install --no-dev, configure cualquier alias para carpetas compartidas y archivos como imágenes cargadas los archivos de configuración, generar js / css con grunt y menor o equivalente, apuntar el alias actual a la nueva carpeta con la etiqueta, ejecutar el script de actualización de la base de datos, reiniciar los servicios nginx / apache / fpm-php, ejecutar pruebas para verificar que el sitio web esté funcionando.

Tenga una secuencia de comandos para volver a la versión anterior (o una guía para que sepa qué hacer).


Eche un vistazo a la estructura de directorios de symfony 1.4 o symfony 2 . Elige lo que sea más intuitivo para ti.


En mi experiencia, nunca puedes planear esto. Puedes intentar seguir lo que hacen los marcos, pero me parece que nunca encajo exactamente en su molde.

Recomiendo mantener una buena regla general para 20 archivos en un directorio como máximo. Si encuentra que necesita más, simplemente cree algunos subdirectorios y mueva los componentes comunes allí.


Esta es mi configuración. Ha funcionado muy bien para mí en proyectos pequeños, muy grandes (incluida una red social).
Estas carpetas vivirían todas dentro de mi carpeta principal de aplicaciones:

  • config - contiene archivos de configuración PHP personalizados
  • css - contiene los archivos CSS del proyecto
  • helpers: contiene archivos ''helper'' (cada archivo es una colección de funciones)
  • imágenes - contiene las imágenes del proyecto
  • js - contiene los archivos Javascript del proyecto
  • lib - contiene clases de PHP específicas para el proyecto
  • módulos - My MVC framework permite empaquetar secciones del sitio como módulos
    • blog - Un módulo de ejemplo
      • controladores - contiene los controladores para el módulo
      • modelos - contiene los modelos para el módulo
      • vistas - contiene las vistas para el módulo
  • vistas: contiene vistas que deberían ser accesibles globalmente (encabezado de página, pie de página, etc.)

Obviamente, todos los directorios podrían contener subcarpetas que organizarían aún más sus archivos. Por ejemplo, la carpeta ''css'' podría tener subcarpetas llamadas ''web'' y ''mobile''. La carpeta ''imágenes'' podría contener una carpeta ''user_uploaded'' que luego podría contener ''perfil''. Y, por supuesto, puede agregar carpetas como mejor le parezca, en un proyecto tengo una carpeta llamada "cargadores" que solo contiene scripts de carga independientes.

También utilizo métodos de conveniencia que ayudan a construir los nombres de archivo de lo que quiero cargar. Por ejemplo, mi loadView () buscará el archivo de vista en el directorio del módulo actual, o si pasa un argumento opcional de $ módulo, se verá específicamente dentro de la carpeta de ese módulo.

Espero que esto ayude.


Esto es principalmente una cuestión de preferencia, una búsqueda rápida en Google revelaría muchas estructuras de proyectos diferentes. Pero sería realmente bueno si hubiera un estándar acordado. Creo que esta initiative de los estándares de desarrollo de paquetes PHP es un buen candidato.

Esta es la estructura de directorio que proponen:

  • bin / : ejecutables de línea de comandos
  • config / : archivos de configuración
  • docs / : archivos de documentación
  • public / : archivos del servidor web
  • recursos / : otros archivos de recursos
  • src / : código fuente PHP
  • pruebas / : código de prueba

Para los archivos principales que se incluyen: aprueba / inc /

Para el acceso a datos, las clases y clases están en: aprueba / dao /

Para javascripts: aprueba / scripts /

Para CSS: aprueba / estilos /

Para imágenes: aprueba / img /

Para contenido estático (normalmente para imágenes de perfil de usuario o imágenes cargadas): aprueba / estática /

Para cachés: aprueba / cachés /

Para plantillas o Ver archivos: aprueba / plantillas /

Archivo de todas las páginas: aprueba /

Estructura de PHP Framework de Samstyle

La respuesta que publiqué aquí fue de 2009. A lo largo de los años se publicaron más estándares, incluido el PSR-0 que cubre el tema de la estructura de carpetas. También tengo una nueva estructura de carpetas (y creo que es mejor) con Packfire Framework .


Uso codeigniter para proyectos pequeños y grandes. Su característica MVC es moderadamente buena.

  • codeIgniter / system / application / config: contiene todo tipo de archivos de configuración como DB, pasarela de pago, configuración ftp, rutas y ...
  • codeIgniter / system / application / models: contiene todo tipo de clases de base de datos, debe crear subcarpetas según sus necesidades, utilicé clientes, mailData, paymentModel, report, web-service y ...
  • codeIgniter / system / application / views: contiene todo tipo de archivos que funcionarán como salida para los clientes, debe pensar en reutilizar estos archivos si es posible. Al igual que los modelos que tuvo que crear subcarpetas como administración, informes, correo electrónico, plantilla de correo electrónico ...
  • codeIgniter / system / application / controllers: esta es la parte más importante. Esto ayudará a crear la URL de SEO, por lo que debe tener más cuidado con las subcarpetas esta vez. Puede crear como administración, productos, informes, pedidos ... y considerar un buen nombre para las funciones de la clase de controlador.

Estos fueron para el archivo PHP / HTML.

Ahora sobre los otros archivos:

  • codeIgniter / images: para las imágenes
  • codeIgniter / scripts: para los scripts de Java y su marco
  • codeIgniter / styles: para el CSS
  • codeIgniter / uploads: para los archivos cargados, si no desea poner archivos en la base de datos

Para el detalle vea el framework codeIgniter en detalle.

Aquí "codeIgniter /" es el nombre correcto


Esta es la estructura que estoy usando actualmente,

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, ... */