如何将PHP应用程序限制到自己的目录和自己的php.ini?

时间:2009-03-12 17:32:56

标签: php apache include subdomain server-side-includes

我在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?

6 个答案:

答案 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';
?>

Possible solution for php.ini file

答案 5 :(得分:-1)

尝试相对路径!喜欢:

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

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