Domanda

Sto eseguendo più app PHP sul mio Mac, eseguendo OS X 10.5.6, Apache 2, PHP 5. Ho una configurazione dei sottodomini per ogni progetto, un file host per ciascun sottodominio e blocchi della directory virtuale nella configurazione di Apache . Quindi

project1.localhost va in / Library / WebServer / Documents / Project1
project2.localhost va in / Library / WebServer / Documents / Project2
ecc ...

Tuttavia, questo metodo in realtà non " isolare " le app web. Ad esempio, se includo uno script in questo modo:

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

Fa riferimento allo script dalla directory di base del mio computer. Quindi accede a
C: /includes/include.php

C'è un modo per me di farne riferimento
C: /Library/WebServer/Documents/Project2/includes/include.php

Fondamentalmente, rendilo in modo che non sia a conoscenza di nulla al di fuori della propria directory. Inoltre, c'è un modo per usare php.ini anche per sottodominio?

È stato utile?

Soluzione

Credo che sia possibile impostare un php.ini per host virtuale

<VirtualHost *:80>
    ...

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

</VirtualHost>

in questo modo puoi personalizzare open_basedir e altri

Altri suggerimenti

Puoi limitare la capacità degli script di vedere qualsiasi cosa sopra un albero di cartelle specifico aggiungendo open_basedir direttiva un blocco di cartelle nel file httpd.conf. Dovrebbe apparire come:

  

< DIRECTORY / full / path / to / folder / contenente / script / >

     

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

     

lt &; / DIRECTORY gt &;

Una cosa: se non finisci il percorso con un / allora è una corrispondenza jolly. In altre parole, & Quot; / var / etc / my & Quot; corrisponderà a " / var / etc / myFolder " così come " / var / etc / myMothersFolder " ;, mentre " / var / etc / my / " corrisponderà solo al nome esatto della cartella.

Per quanto riguarda l'isolamento delle applicazioni ~ è questo per quanto riguarda proteggere gli script PHP in modo che non possano accedere ad altri? Si prega di elaborare -

Riguardo a php.ini - Non sono a conoscenza di alcun modo per usare un php.ini specifico per directory, ma potresti certamente creare una pagina di inclusione php con un mucchio di righe ini_set (), forse qualcosa del genere ..

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

  // ...

?>

e lo 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 );
?>

Se sei interessato a saperne di più sulla funzione ini_set (), ecco la pagina della documentazione su php.net: http://us3.php.net/ini_set

Spero che questo sia stato in qualche modo utile ~

Il modo migliore per farlo è usare PHP tramite FCGI (mod_fcgid). In questo modo puoi eseguire PHP usando un utente diverso e un php.ini diverso per vHost.

Ecco un esempio di come configurare una tale configurazione su Ubuntu: http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10

Se si desidera utilizzare il nome percorso completo, è possibile utilizzare quello:

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

Possibile soluzione per il file php.ini

Prova un percorso relativo! Mi piace:

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

o

<?php
include("includes/include.php");
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top