Pregunta

Estoy ejecutando múltiples aplicaciones PHP en mi Mac, ejecutando OS X 10.5.6, Apache 2, PHP 5. Tengo configuración de subdominios para cada proyecto, entradas de un archivo de host para cada subdominio y bloques de Directorio virtual en la configuración de Apache . Entonces

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

Sin embargo, este método realmente no " aislar " Las aplicaciones web. Por ejemplo, si incluyo un script como este:

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

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

¿Hay alguna manera de hacerla referencia
C: /Library/WebServer/Documents/Project2/includes/include.php

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

¿Fue útil?

Solución

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

<VirtualHost *:80>
    ...

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

</VirtualHost>

de esta manera puede personalizar open_basedir y otros

Otros consejos

Puede limitar la capacidad de un script para ver cualquier cosa sobre un árbol de carpetas específico agregando open_basedir dirige un bloque de carpetas en el archivo httpd.conf. Debería verse así:

  

< DIRECTORIO / completo / ruta / a / carpeta / que contiene / script / >

     

php_admin_value open_basedir " / full / path / to / top / folder / of / deseado / tree / "

     

< / DIRECTORIO >

Una cosa: si no finaliza la ruta con un / entonces es una coincidencia comodín. En otras palabras, & Quot; / var / etc / my & Quot; coincidirá con " / var / etc / myFolder " así como " / var / etc / myMothersFolder " ;, mientras que " / var / etc / my / " solo coincidirá con el nombre exacto de la carpeta.

Con respecto al aislamiento de aplicaciones ~ ¿se trata de asegurar los scripts PHP para que no puedan acceder a otros? Por favor explique -

Con respecto 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 esto ...

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

  // ...

?>

y el script 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 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 de alguna ayuda ~

La mejor manera de hacerlo es usar PHP a través de FCGI (mod_fcgid). De esta forma, puede ejecutar PHP con un usuario diferente y un php.ini diferente por vHost.

Aquí hay un ejemplo de cómo configurar dicha configuración en Ubuntu: http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10

Si desea usar el nombre completo de la ruta, puede usar eso:

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

Posible solución para el archivo php.ini

¡Prueba una ruta relativa! Me gusta:

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

o

<?php
include("includes/include.php");
?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top