我正在运行多个PHP应用程序在我Mac,运行OS X10.5.6,Apache2,PHP5.我域设置为每个项目中,一个主文件中的条目为每个子和虚拟目录块Apache配置。所以

项目1.localhost去/Library/WebServer/Documents/项目1
项目2.localhost去/Library/WebServer/Documents/项目2
等等...

然而,这种方法并没有真正"隔离"的网络应用程序。例如,如果包括一个脚本,像这样:

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

它引用脚本的基本目录我的计算机。因此它访问
C:/includes/include.php

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

基本上,这样做,其不知道还有什么外的其自己的目录。此外,是否有办法使用php.ini的每域的基础上吗?

有帮助吗?

解决方案

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

<VirtualHost *:80>
    ...

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

</VirtualHost>

这种方式,您可以自定义的open_basedir和其他

其他提示

你可以限制一个脚本中能够看到任何东西上面特定文件夹树通过加入 open_basedir 指令的一个文件夹块在httpd.conf文件。它应该是这样的:

<DIRECTORY full="" path="" to="" folder="" containing="" script="" />

php_admin_value open_basedir"/full/path/to/顶/目录/中/期望/树"

</DIRECTORY>

一件事情-如果你不端的道路带然后这是一个通配相匹配。换句话说,"/var/etc/"我将匹配"/var/etc/我的文件夹",以及"/var/etc/myMothersFolder",同时"/var/etc/my/"只会相匹配确切文件夹的名称。

关于应用程序隔离〜这是在问候的固定的PHP脚本,使他们不能访问其他人?请详细 -

关于php.ini中 - 我不知道任何方式使用每个目录中的特定的php.ini,但你肯定可以创建一个PHP页面包含了一堆的ini_set()的线条,或许是这样的..

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

希望这是有些有用〜

最好的方式这样做是使用PHP通过FCGI(mod_fcgid).这样你就可以运行PHP使用不同的用户以及一个不同的php.ini每个虚拟主机.

这里有一个例子如何设立这种结构上的Ubuntu: http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10

如果您要使用全路径名,您可以使用:

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

为php.ini文件可能的解决方法

尝试相对路径!像:

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

<?php
include("includes/include.php");
?>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top