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 虚拟文件夹的行为如何,但是您可以从全局常量中获取当前脚本的完整文件路径__FILE__,请参见http://php.net/manual/en/language.constants.predefined.php

如果您知道脚本中的相对路径,请使用以下内容:

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

不确定这是否可以解决您的问题。

于 2012-04-16T17:33:21.520 回答