Wie beschränke ich PHP-Anwendungen auf ihre eigenen Verzeichnisse und ihre eigenen php.ini?
-
11-07-2019 - |
Frage
Ich betreibe mehrere PHP-Anwendungen auf meinem Mac, OS X 10.5.6, Apache 2, PHP 5. Ich habe Subdomains Setup für jedes Projekt eine Host-Dateieinträge für jede Sub-Domain und Virtual Directory Blöcke in der Apache-Konfigurations . So
project1.localhost geht an / Library / WebServer / Documents / Project1
project2.localhost geht an / Library / WebServer / Documents / Project2
etc ...
Allerdings ist diese Methode nicht wirklich „isolieren“, um die Web-Anwendungen. Zum Beispiel, wenn ich schließe ein Skript wie folgt:
<?php
include("/includes/include.php");
?>
Es verweist auf das Skript aus dem Basisverzeichnis von meinem Computer. So greift sie
C: /includes/include.php
Gibt es eine Möglichkeit für mich, um es
verweisen
C: /Library/WebServer/Documents/Project2/includes/include.php
, macht es so, dass sie nicht bewusst, etwas außerhalb des eigenen Verzeichnisses. Auch ist es eine Möglichkeit, php.ini die auf einen als auch pro Sub-Domain Basis zu benutzen?
Lösung
Ich glaube, es ist möglich, ein php.ini pro virtuellem Host auf
<VirtualHost *:80>
...
PHPINIDir /full/path/to/php/ini/
</VirtualHost>
Auf diese Weise können Sie open_basedir und andere
anpassenAndere Tipps
Sie können eine Skripte Fähigkeit begrenzen etwas über einem bestimmten Ordner-Struktur, um zu sehen, indem Sie die open_basedir einen Ordner Block in der Datei httpd.conf Richtlinie. Es soll wie folgt aussehen:
php_admin_value open_basedir "/ full / path / to / top / Ordner / von / Soll- / Baum /"
Eine Sache - wenn Sie den Pfad nicht mit einem Ende / dann ist es ein Wildcard-Spiel. Mit anderen Worten: "/ var / etc / my" passt auf "/ var / etc / myFolder" sowie "/ var / etc / myMothersFolder", während "/ var / etc / my /" nur den genauen Ordner übereinstimmen Name.
In Bezug auf die Anwendungsisolierung ~ ist dies in Bezug auf Sicherung PHP-Skripte, so dass sie andere nicht zugreifen? Bitte erarbeiten -
In Bezug auf die php.ini - ich bin mir nicht bewusst irgendeiner Weise eine bestimmte php.ini pro Verzeichnis zu verwenden, aber man könnte sicherlich ein PHP-Include-Seite mit einem Bündel von ini_set () Linien, vielleicht so etwas wie dieses ..
<?php
// in your header or along top of all php modules in your pap
require_once ( '/path/to/includes/ini_set.php' );
// ...
?>
und das ini_set.php Skript:
<?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 );
?>
Wenn Sie daran interessiert sind, mehr über die ini_set () Funktion zu lernen, hier ist die Dokumentation Seite auf php.net: http://us3.php.net/ini_set
Hoffe, dass dies etwas hilfreich war ~
Der beste Weg, dies zu tun ist PHP über FCGI (mod_fcgid) zu verwenden. Auf diese Weise können Sie PHP mit einem anderen Benutzer und eine andere php.ini pro vHost ausgeführt werden.
Hier ist ein Beispiel, wie eine solche Konfiguration auf Ubuntu einzurichten: http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10
Wenn Sie vollständigen Pfadnamen verwenden möchten, können Sie diese verwenden:
<?php
include dirname( __FILE__ ) . '/includes/include.php';
?>
Versuchen Sie, einen relativen Pfad! Wie:
<?php
include("./includes/include.php");
?>
oder
<?php
include("includes/include.php");
?>