6

我在我的 Mac 上运行多个 PHP 应用程序,运行 OS X 10.5.6、Apache 2、PHP 5。我为每个项目设置了子域、每个子域的主机文件条目以及 Apache 配置中的虚拟目录块。所以

project1.localhost 转到 /Library/WebServer/Documents/Project1
project2.localhost 转到 /Library/WebServer/Documents/Project2
等...

但是,这种方法并没有真正“隔离”网络应用程序。例如,如果我包含这样的脚本:

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

它从我的计算机的基本目录中引用脚本。所以它访问
C:/includes/include.php

有没有办法让我参考
C:/Library/WebServer/Documents/Project2/includes/include.php

基本上,让它不知道它自己的目录之外的任何东西。另外,有没有办法在每个子域的基础上使用 php.ini?

4

6 回答 6

8

我相信可以为每个虚拟主机设置一个 php.ini

<VirtualHost *:80>
    ...

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

</VirtualHost>

这样你可以自定义 open_basedir 和其他

于 2009-03-12T21:14:32.933 回答
5

您可以通过将open_basedir指令添加到 httpd.conf 文件中的文件夹块来限制脚本查看特定文件夹树上方的任何内容的能力。它应该看起来像:

<目录/完整/路径/到/文件夹/包含/脚本/>

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

</目录>

一件事 - 如果你不以 / 结束路径,那么它就是通配符匹配。换句话说,“/var/etc/my”将匹配“/var/etc/myFolder”以及“/var/etc/myMothersFolder”,而“/var/etc/my/”将只匹配那个确切的文件夹姓名。

于 2009-03-12T19:31:52.730 回答
1

关于应用程序隔离〜这是关于保护PHP 脚本以使它们无法访问其他脚本吗?请详细说明 -

关于 php.ini - 我不知道每个目录使用特定 php.ini 的任何方法,但您当然可以使用一堆 ini_set() 行创建一个 php 包含页面,也许是这样的..

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

希望这有点帮助~

于 2009-03-12T21:05:34.017 回答
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

于 2009-03-15T21:24:06.563 回答
0

如果要使用完整路径名,可以使用:

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

php.ini 文件的可能解决方案

于 2009-03-12T19:29:05.667 回答
-1

尝试相对路径!像:

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

或者

<?php
include("includes/include.php");
?>
于 2009-03-12T18:00:38.813 回答