Как настроить путь doc_root для файлов php? - PullRequest
1 голос
/ 16 января 2011

Я пытаюсь вызвать файлы или папки, например:

require('/functions.php');
$a = '/folder/';

но это не сработает и продолжает выдавать ошибку «не удалось открыть поток», я знаю, что могу изменить «doc_root» из php.ini, но не уверен, что это будет правильно и что именно изменить.

Кто-нибудь может предложить, пожалуйста?

спасибо.

------ ОБНОВЛЕНИЕ ----- Я просто пытаюсь создать файл внутри подпапок, используя fopen:

$ourFileName = "/folder/subfolder/index.php"
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");

но я не хочу использовать $ _SERVER ['DOCUMENT_ROOT'], потому что я хочу использовать ту же переменную $ ourFileName для построения ссылок

------ ОБНОВЛЕНИЕ ------ Чтобы сделать это еще более понятным, вот код, который не работает:

<?php 
$ourFileName = '/jobs/';
$ourFileHandle = fopen($ourFileName.'index.php', 'w') or die("can't open file");
fwrite($ourFileHandle, 'hello world');  
fclose($ourFileHandle); 
?>

Ответы [ 3 ]

4 голосов
/ 16 января 2011

как насчет использования: $ _SERVER [ "DOCUMENT_ROOT"]

3 голосов
/ 16 января 2011

Чтобы получить наилучший возможный корневой путь, вы должны определить константу в вашем файле представления, т.е. (index.php), и сделать ее кросс-платформенной совместимостью.

после нескольких лет работы в PHP и мультиплатформенностиПриложения, которые я обнаружил, лучший способ сделать это - комбинация следующих встроенных функций PHP и констант:

  • define
  • str_replace
  • dirname
  • __FILE__

Вот почему мы используем функции:

  • Причина, по которой мы используем define, заключается в том, чтобы корень документа оставался в глобальной области действия
  • Причина str_replace состоит в том, чтобы изменить косые черты для обеспечения кроссплатформенной совместимости
  • Причина dirname заключается в том, чтобы помочь относительный путь к файлу корневого представления
  • Причинадля __FILE__ это обнаружение файла вида для dirname

Мы можем использовать __DIR__ для PHP5, но __FILE__ лучше, так как он будет поддерживать предыдущие версии Windows.

Полностью в сочетании вы быдействительный относительный путь к вашему файлу просмотра.

define("ROOT_PATH",str_repalce("\\","/",dirname(__FILE__)));

это даст идеальный относительный путь к вашему каталогу индекса без косой черты, вы должны затем включить ваши файлы следующим образом:

require_once ROOT_PATH . "/system/classes/some.class.php";

В Windows допустимы и /, и \, а для других операционных систем это просто /, поэтому обычно вы всегда должны создавать свои приложения с / в качестве разделителя каталогов.

0 голосов
/ 16 января 2011

Если ваш файл functions.php не находится в корневом каталоге системы linux, этот путь работать не будет, так как первый символ / означает «весь путь до корня».

Если functions.php находится в том же каталоге, что и указанный вами файл, попробуйте следующее:

$dir = dirname(__FILE__);
$functions_absolute_path = $dir . '/functions.php';
require($functions_absolute_path);
...