2009-03-12 14 views
6

Estoy ejecutando varias aplicaciones PHP en mi Mac, ejecutando OS X 10.5.6, Apache 2, PHP 5. Tengo la configuración de subdominios para cada proyecto, las entradas de un archivo de host para cada subdominio y los bloques de Directorio virtual en la configuración de Apache. Así¿Cómo limito las aplicaciones de PHP a sus propios directorios y su propio php.ini?

project1.localhost va a/Library/WebServer/Documents/Project1
project2.localhost va a/Library/WebServer/Documents/Project2
etc ...

Sin embargo, este método no hace realmente "aislar" las aplicaciones web. Por ejemplo, si incluyo una secuencia de comandos como sigue:

<?php 
include("/includes/include.php"); 
?> 

Hace referencia a la secuencia de comandos desde el directorio base de mi computadora. Por lo que accede a
C: /includes/include.php

¿Hay una manera para mí para hacer que la referencia
C: /Library/WebServer/Documents/Project2/includes/include.php

Básicamente , haga que no tenga conocimiento de nada fuera de su propio directorio. Además, ¿hay alguna manera de usar php.ini también por subdominio?

Respuesta

8

Creo que es posible establecer un php.ini por host virtual

<VirtualHost *:80> 
    ... 

    PHPINIDir /full/path/to/php/ini/ 

</VirtualHost> 

esta manera se puede personalizar open_basedir y otros

+0

¿Qué quiere decir con "de esta manera puede personalizar open_basedir y otros". ¿Open_basedir es una configuración INI? –

+1

sí, y es por eso que usar 'php_admin_value open_basedir'/path '' también funciona –

-1

¡Pruebe una ruta relativa! Al igual que:

<?php 
include("./includes/include.php"); 
?> 

o

<?php 
include("includes/include.php"); 
?> 
+0

Así que el punto hace que se vaya a DocumentRoot sub dominios? –

+0

¿Y el php.ini? –

+0

el "." es siempre el directorio actual! –

0

Si desea utilizar el nombre de ruta completo, puede utilizar lo siguiente:

<?php 
include dirname(__FILE__) . '/includes/include.php'; 
?> 

Possible solution for php.ini file

+0

Según la documentación de PHP "Si se usa dentro de una inclusión, se devuelve el nombre del archivo incluido". De modo que tampoco es tan útil, en el caso de que una inclusión incluya otros archivos. –

4

Puede limitar una la capacidad de scripts para ver cualquier cosa por encima de un árbol de carpetas específico al agregar la directiva open_basedir un bloque de carpetas en el archivo httpd.conf. Debe quedar como:

< AGENDA/full/ruta/a/carpeta/contiene/script/>

open_basedir php_admin_value "/ full/ruta/a/superior/carpeta/de/deseada/árbol /"

</DIRECTORIO >

una cosa - si usted no termina el camino con un/a continuación, se trata de un partido de comodín. En otras palabras, "/ var/etc/my" coincidirá con "/ var/etc/myFolder" y "/ var/etc/myMothersFolder", mientras que "/ var/etc/my /" solo coincidirá con esa carpeta exacta nombre.

+0

No he intentado esto todavía, pero ¿hay alguna advertencia al usar este método? –

+0

Advertencias? ¿Como que? ¿Con la directiva open_basedir o con poner la directiva en el archivo httpd.conf? – user13414

+0

No he encontrado ningún problema que no se mencione explícitamente en los documentos. – user13414

1

En cuanto al aislamiento de la aplicación ~ ¿se trata de asegurando scripts PHP para que no puedan acceder a los demás? Por favor, elabore -

En cuanto a php.ini: no conozco ninguna forma de usar un php.ini específico por directorio, pero ciertamente podría crear una página de inclusión de php con un montón de líneas ini_set(), tal vez algo como esta ..

<?php 
    // in your header or along top of all php modules in your pap 
    require_once ('/path/to/includes/ini_set.php'); 

    // ... 

?> 

y el guión ini_set.php:

<?php 
    // one of these for each override of defaults set in php.ini file -- 
    ini_set ($varname, $newvalue); 
    ini_set ($varname, $newvalue); 
    ini_set ($varname, $newvalue); 
?> 

Si usted está interesado en aprender más sobre la función ini_set(), aquí está la página de documentación en php.net: http://us3.php.net/ini_set

Espero que esto haya sido útil ~

+0

Estaba pensando en trabajar en varias aplicaciones simultáneamente y no usar el mismo INI para todas ellas. También quiero poder mover fácilmente las aplicaciones a Linux o Windows sin tener que volver a crear toda la estructura de directorios porque mis includes tienen rutas absolutas en ellas. –

+0

¿Hay problemas de rendimiento con la configuración de los valores de PHP INI en CADA carga de página? –

Cuestiones relacionadas