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

Joh*_*ski 6 php apache subdomain include 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");
?>
Run Code Online (Sandbox Code Playgroud)

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

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

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

J.C*_*cio 8

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

<VirtualHost *:80>
    ...

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

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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


use*_*414 5

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

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

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 /”仅匹配该文件夹名称。