1

У меня есть виртуальная папка в IIS. Когда я делаю корень документа сервера, я не получаю file_exists найти файлы. Но интересно, если я использую include (или требующие директивы, если на то пошло), то такие же файлы будут найдены.серверный переменный документ root не играет хорошенько с файлами_экзистов, когда задействована виртуальная папка

пример

$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")

ответ

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'); 
?> 
1

Я не знаю, как IIS виртуальные папки ведут себя, но вы получите текущие сценарии полный путь к файлу от глобальной константы __FILE__, см. на http://php.net/manual/en/language.constants.predefined.php.

Если вы знаете относительный путь от вашего сценария, использовать что-то вроде этого:

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

Не уверен, если это решает проблему, хотя.

+0

Спасибо, но моя проблема не в том, должен дать мне истинный путь к этому виртуальному пути в браузере. Пример: site.com/folderX/fileX.txt должен быть найден с помощью doc_root. "/folderX/fileX.txt" –