Question

J'exécute plusieurs applications PHP sur mon Mac, sous OS X 10.5.6, Apache 2, PHP 5. J'ai des sous-domaines configurés pour chaque projet, des entrées de fichier hôte pour chaque sous-domaine et des blocs de répertoire virtuel dans la configuration Apache. . Donc

project1.localhost va dans / Bibliothèque / WebServer / Documents / Project1
project2.localhost va dans / Bibliothèque / WebServer / Documents / Project2
etc ...

Cependant, cette méthode n'isole pas vraiment & "; isoler &"; les applications web. Par exemple, si j'inclus un script comme celui-ci:

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

Il fait référence au script à partir du répertoire de base de mon ordinateur. Donc, il accède
C: /includes/include.php

Y a-t-il un moyen de le référencer
C: /Library/WebServer/Documents/Project2/includes/include.php

En gros, assurez-vous que rien ne se trouve en dehors de son propre répertoire. Aussi, est-il possible d’utiliser php.ini par sous-domaine également?

Était-ce utile?

La solution

Je crois qu'il est possible de définir un php.ini par hôte virtuel

<VirtualHost *:80>
    ...

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

</VirtualHost>

De cette façon, vous pouvez personnaliser open_basedir et d'autres

Autres conseils

Vous pouvez limiter la capacité des scripts à afficher tout ce qui se trouve au-dessus d'une arborescence de dossiers spécifique en ajoutant le open_basedir directive un bloc de dossier dans le fichier httpd.conf. Cela devrait ressembler à:

  

< REPERTOIRE / complet / chemin / vers / dossier / contenant / script / >

     

php_admin_value open_basedir & "/ full / chemin / vers / top / dossier / de / désir / arbre / &";

     

< / REPERTOIRE >

Une chose - si vous ne terminez pas le chemin avec un /, alors c'est une correspondance générique. En d'autres termes, & Quot; / var / etc / my & Quot; correspondra à " / var / etc / myFolder " ainsi que & "; var / etc / myMothersFolder &"; tandis que & "/ var / etc / my / &"; correspondra uniquement à ce nom de dossier exact.

En ce qui concerne l'isolation de l'application ~, s'agit-il de sécuriser les scripts PHP afin qu'ils ne puissent pas accéder aux autres? S'il vous plaît élaborer -

En ce qui concerne php.ini - Je ne connais aucun moyen d’utiliser un php.ini spécifique par répertoire, mais vous pouvez certainement créer une page d’inclusion php avec un tas de lignes ini_set (), peut-être quelque chose comme cela. <

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

  // ...

?>

et le 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 vous souhaitez en savoir plus sur la fonction ini_set (), voici la page de documentation sur php.net: http://us3.php.net/ini_set

J'espère que c'était un peu utile ~

Le meilleur moyen de le faire est d'utiliser PHP via FCGI (mod_fcgid). De cette façon, vous pouvez exécuter PHP en utilisant un utilisateur différent et un php.ini différent par hôte.

Voici un exemple de configuration d’une telle configuration sous Ubuntu: http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10

Si vous souhaitez utiliser le nom de chemin complet, vous pouvez utiliser celui-ci:

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

Solution possible pour le fichier php.ini

Essayez un chemin relatif! J'aime:

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

ou

<?php
include("includes/include.php");
?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top