我在Mac上运行多个PHP应用程序,运行OS X 10.5.6,Apache 2,PHP 5.我为每个项目设置了子域,每个子域都有一个主机文件条目,Apache配置中有虚拟目录块。所以
project1.localhost转到/ Library / WebServer / Documents / Project1
project2.localhost转到/ Library / WebServer / Documents / Project2
等...
但是,这种方法并没有真正“隔离”Web应用程序。例如,如果我包含这样的脚本:
<?php
include("/includes/include.php");
?>
它从我的计算机的基本目录引用该脚本。所以它访问了 C:/includes/include.php
有没有办法让我参考 C:/Library/WebServer/Documents/Project2/includes/include.php
基本上,使它不知道它自己的目录之外的任何东西。另外,有没有办法在每个子域的基础上使用php.ini?
答案 0 :(得分:8)
我相信可以为每个虚拟主机设置一个php.ini
<VirtualHost *:80>
...
PHPINIDir /full/path/to/php/ini/
</VirtualHost>
这样你可以自定义open_basedir和其他
答案 1 :(得分:4)
您可以通过在httpd.conf文件中添加open_basedir指令文件夹块来限制脚本能够查看特定文件夹树之上的任何内容。它应该看起来像:
&lt; DIRECTORY / full / path / to / folder / containing / script /&gt;
php_admin_value open_basedir“/ full / path / to / top / folder / of / desired / tree /”
&LT; /目录&gt;
有一件事 - 如果你没有用/结束路径那么它是一个通配符匹配。换句话说,“/ var / etc / my”将匹配“/ var / etc / myFolder”以及“/ var / etc / myMothersFolder”,而“/ var / etc / my /”只匹配该完全文件夹名。
答案 2 :(得分:1)
关于应用程序隔离〜这是关于保护 PHP脚本,以便他们无法访问其他人?请详细说明 -
关于php.ini - 我不知道有任何方法可以在每个目录中使用特定的php.ini,但你当然可以使用一堆ini_set()行创建一个php include页面,也许是这样的.. < / p>
<?php
// in your header or along top of all php modules in your pap
require_once ( '/path/to/includes/ini_set.php' );
// ...
?>
和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 );
?>
如果您有兴趣了解有关ini_set()函数的更多信息,请访问php.net上的文档页面:http://us3.php.net/ini_set
希望这有点帮助〜
答案 3 :(得分:1)
最好的方法是通过FCGI(mod_fcgid)使用PHP。这样,您可以使用不同的用户和每个vHost的不同php.ini运行PHP。
以下是如何在Ubuntu上设置此类配置的示例:http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10
答案 4 :(得分:0)
如果要使用完整路径名,可以使用:
<?php
include dirname( __FILE__ ) . '/includes/include.php';
?>
答案 5 :(得分:-1)
尝试相对路径!喜欢:
<?php
include("./includes/include.php");
?>
或
<?php
include("includes/include.php");
?>