6

OS X 10.5.6、Apache 2、PHP 5 を実行している Mac で複数の PHP アプリを実行しています。プロジェクトごとにサブドメインをセットアップし、サブドメインごとにホスト ファイル エントリを設定し、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 を使用する方法はありますか?

4

6 に答える 6

8

仮想ホストごとにphp.iniを設定することは可能だと思います

<VirtualHost *:80>
    ...

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

</VirtualHost>

このようにして、open_basedirなどをカスタマイズできます

于 2009-03-12T21:14:32.933 に答える
5

httpd.conf ファイルのフォルダー ブロックにopen_basedirディレクティブを追加することで、特定のフォルダー ツリーより上にあるものを表示するスクリプト機能を制限できます。次のようになります。

<DIRECTORY /full/path/to/folder/contains/script/>

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

</ディレクトリ>

1 つのこと - パスを / で終わらない場合、それはワイルドカード マッチです。つまり、「/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()行の束を含むphpincludeページを作成することはできます。

<?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 でこのような構成をセットアップする方法の例を次に示します

于 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 に答える