1

IIS に仮想フォルダーがあります。サーバー ドキュメント ルートを実行するとfile_exists、ファイルが見つかりません。しかし興味深いことに、インクルード (またはその件についてはディレクティブを必要とする) を使用すると、同じファイルが見つかります。

$full_path = $_server['DOCUMENT_ROOT'] . "/file.txt";
include($full_path); // works fine. 
if file_exists($full_path) : // returns false!

繰り返しますが、これは仮想フォルダーが関係している場合のみです。

仮想フォルダーの有無に影響されない別のサーバー変数を使用する必要があると思います。

最終的には、次のように動作するようにしたいと思います

/wwwroot/file.txtこれで見つかるはずです

file_exists($_server['?'] . "/file.txt")

4

2 に答える 2

3

構成ファイルを使用して、baseroot と publicroot を定義します。

<?php
// myconfig.php -- stored in the public root
$direx = explode("/", getcwd());
DEFINE ('BASEROOT', '/'.$direx[1].'/'.$direx[2].'/'); // host/mysite/
DEFINE ('PUBLICROOT', '/'.$direx[1].'/'.$direx[2].'/'.$direx[3].'/'); // host/mysite/public_html/
?>

<?php
require_once('myconfig.php'); // called on every page

IF (File_Exists(PUBLICROOT.'some_folder/file.txt')) { /* do something */ }

include_once(PUBLICROOT.'some_folder/file.txt');
?>
于 2012-09-17T16:54:33.770 に答える
1

IIS 仮想フォルダーがどのように動作するかはわかりませんが、現在のスクリプトの完全なファイル パスをグローバル定数から取得します。http://php.net/manual/en/language.constants.predefined.php__FILE__を参照してください。

スクリプトからの相対パスがわかっている場合は、次のように使用します。

$filepath = dirname(__FILE__) . "/../../file.txt";

ただし、これで問題が解決するかどうかはわかりません。

于 2012-04-16T17:33:21.520 に答える