Jump to content
  • 0

opendir и /


kvant
 Share

Question

Не могу понять как работает функция opendir.

Вот такой код:

<?php
$h = opendir('modules');
print $h;
?>

работает. Код находится в файле index.php, который лежит в корне сайта, как и папка modules.

Вот такой код:

<?php
$h = opendir($_SERVER['DOCUMENT_ROOT'].'/modules');
print $h;
?>

Тоже работает.

А вот такой:

<?php
$h = opendir('/modules');
print $h;
?>

Работать не хочет.

Почему? Ведь / по идее эквивалентен $_SERVER['DOCUMENT_ROOT'].

Использую denwer.

Edited by kvant
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0
Почему? Ведь / по идее эквивалентен $_SERVER['DOCUMENT_ROOT'].

Нет вы путаете относительные и полные пути в ФС unix, "/modules" это полный путь начиная с корня файловой системы, а вот "$_SERVER['DOCUMENT_ROOT'].'/modules'" - это относительный и зависит от контектста исполнения

Link to comment
Share on other sites

  • 0
Нет вы путаете относительные и полные пути в ФС unix, "/modules" это полный путь начиная с корня файловой системы, а вот "$_SERVER['DOCUMENT_ROOT'].'/modules'" - это относительный и зависит от контектста исполнения

Понятно, / - это не DOCUMENT_ROOT, а ROOT, в этом заключается моё непонимание php. "$_SERVER['DOCUMENT_ROOT'].'/modules'" - это не относительный путь, как вы сказали, а тоже абсолютный, только он зависит от того, что находится в переменной $_SERVER['DOCUMENT_ROOT'], то есть как сервер настроен.

А как тогда правильно сделать с точки зрения PHP? Писать относительный путь нехорошо как-то, тогда путь будет меняться если исходный файл переложить в другую директорию

Link to comment
Share on other sites

  • 0
А как тогда правильно сделать с точки зрения PHP?

С точки зрения PHP все равно, тут имеет место архитектура приложения и то для чего вам нужно использовать такие вещи. В большинстве случаев абсолютные пути не используют т.к. они не предоставляют гибкость и переносимость кода. Всегда используют контекст выполнения и отностительный путь. Если modules это директория вашего приложения то путь до неё всегда должен быть отностительный и вычислятся от корня приложения, если это директория сервера то путь относительный и в большинстве случаев счиатется из $HOME и т.д.

"$_SERVER['DOCUMENT_ROOT'].'/modules'" - это не относительный путь, как вы сказали, а тоже абсолютный,

Заявление спорное так же как и моё, от куда вы знаете что лежит в $_SERVER['DOCUMENT_ROOT'] <_< шутка, я имелл ввиду то что если вы начинаете писать со слеша /A/B/C то это от корня и "абсолютно", а если A/B/C то это от контектса и отностительно

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy