2012-05-13 6 views
5

Estoy confundido en cuanto a lo que constituye "mejor práctica " para la estructura de una aplicación PHP basada en la web. Al leer este sitio, hay una serie de sugerencias. Una estructura frecuentemente mencionada es "no tiene ningún archivo php dentro de la raíz del documento". Si bien esto parece una buena práctica, no veo cómo funciona: el servidor web no reconoce nada fuera de la raíz del documento. Asumo aquí que la raíz del documento es el directorio de acceso público, algo así como se muestra a continuación:Acceder a los archivos de la clase PHP fuera de ROBLE DOCUMENTOS

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

O es que "aplicación" en el ejemplo anterior es la raíz del documento, y el htdocs DIR es el público área accesible de la estructura del sitio?

Después de eso, ¿cómo puedo asegurar que el acceso público no esté disponible para los archivos en directorios que no sean htdocs por favor?

Respuesta

7

El concepto es simple, especialmente si usa un marco basado en controlador frontal ya sea uno propio o uno existente (como el Zend Framework). Cuando todas las solicitudes llegan a través de un controlador central, los archivos necesarios para manejar la solicitud se incluyen según sea necesario. Los archivos incluidos no tienen que estar en la raíz web para funcionar. Solo necesitan estar disponibles para que el controlador se incluya y luego se ejecute. Entonces, solo su controlador debe estar en la raíz web. Todo lo demás puede estar fuera de él.

FYI, esto también funciona con aplicaciones que no son de OOP. Solo necesita incluir los archivos que necesita en cada página.

Lo que necesita estar en la raíz de la web son los asesinos como imágenes, styelsheets, archivos javascript, etc. que el navegador solicita.

+0

¡Gracias por la pronta respuesta! No uso la declaración ** include ** en mi aplicación OOP. Yo uso ** require_once **. Cada una de mis clases, en caso de ser necesario, requiere require_once declaraciones. ¿Esto afectará la capacidad de un controlador, como usted describe, para acceder a las clases requeridas? –

+0

No. Ellos fundamentalmente hacen lo mismo. –

+0

Gracias. Probaré tu solución y volveré con los resultados de eso. –

5

Si bien es cierto que el servidor web no reconocerá nada "fuera" de la raíz del documento, que solo se aplica a los archivos solicitados por el USUARIO a través de una solicitud HTTP.

PHP se ejecuta dentro del servidor web, y no tiene ningún concepto de raíces de documentos y URL. solo ve el sistema de archivos subyacente del sistema operativo host del servidor web y los datos que ingresan y salen y que cumplen con ciertos estándares. La única vez que PHP estaría limitado por alguna restricción basada en la web es si el servidor web se está ejecutando dentro de una cárcel chroot.

Como tal, puede poner un archivo php DONDEQUIERA en el sistema de archivos, y, suponiendo que los permisos sean correctos, PHP podrá alcanzarlo y ejecutarlo. No importa si ese archivo está enterrado en un directorio de 500 niveles de profundidad en algún lugar completamente fuera de la raíz del documento; si es alcanzable, PHP puede ejecutarlo.

+0

Ah sí, esto es similar en concepto a la respuesta publicada anteriormente. Siempre que una solicitud basada en el usuario se resuelva en la raíz del documento, todo debería estar bien. Gracias por la información agregada. No he tenido la oportunidad de volver a esto todavía, pero les contaré cómo funciona una solución basada en sus comentarios (y los comentarios anteriores). –

+0

Gracias - como se indicó anteriormente, la solución funcionó bien. –

Cuestiones relacionadas