Какой путь к файлу из корневого каталога правильный

Обновлено: 03.07.2024

Что означает "/", "./", "../" при указании пути?

5 ответов 5

Корневой каталог, текущий рабочий каталог и родительский каталог соответственно.

Использование folder/file.html аналогично ссылке на ./folder/file.html . Есть ли вариант использования, когда кто-то предпочтет тот или иной вариант?

Значения пути:

  • / — корень текущего диска;
  • ./ — текущий каталог;
  • ../ является родительским для текущего каталога.

Давайте будем точными:

"/" — это путь, начинающийся с символа /, поэтому это абсолютный путь. Таким образом, нам нужно начать с корня файловой системы и перемещаться по папкам, заданным по имени, тогда как имена разделены /s (потому что это разделитель пути unix).
Таким образом, / — это корень файловой системы, после которого нет папок, и, таким образом, / описывает корень файловой системы.

./ не начинается с символа /, поэтому ./ не может быть абсолютным именем файла. Таким образом, это относительное имя файловой системы. Таким образом, нам нужно начать с текущего рабочего каталога и снова применить операции навигации, разделенные разделителем пути. В данном случае операция «.», что означает: оставаться в текущей папке. (Таким образом, нужно ввести ./foo, чтобы выполнить foo в текущем каталоге, если . не находится в переменной пути). После "остаться в текущей папке" дальше ничего не происходит, поэтому ./ описываем текущую рабочую директорию.

Учитывая, что .. означает: перейти в родительскую папку, ../ должно быть легко вывести и оставить в качестве упражнения.

  • / — это корневая папка файловой системы.
  • ./ обычно обозначает текущую папку, в которой находится ваша программа или скрипт, обычно ту же, что и файл, который вы запускаете.
  • ../ обозначает папку над текущей.

косая черта / – это разделитель каталогов. в каждом каталоге есть два каталога, а именно . (текущий каталог) и .. (родительский каталог)

если путь начинается с косой черты, это означает, что это корень файловой системы. если вы опускаете косую черту в начале, предполагается ./ (относительно текущего каталога)

Очень активный вопрос. Заработайте 10 репутации (не считая бонуса ассоциации), чтобы ответить на этот вопрос. Требование к репутации помогает защитить этот вопрос от спама и отсутствия ответа.

Не тот ответ, который вы ищете? Просмотрите другие вопросы с тегом path или задайте свой вопрос.

Связано

Связанные

Горячие вопросы о сети

Чтобы подписаться на этот RSS-канал, скопируйте и вставьте этот URL-адрес в программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; вклады пользователей под лицензией cc by-sa. версия 2022.3.24.41762

Члены многих типов в пространстве имен System.IO включают параметр пути, который позволяет указать абсолютный или относительный путь к ресурсу файловой системы. Затем этот путь передается API-интерфейсам файловой системы Windows. В этом разделе обсуждаются форматы путей к файлам, которые можно использовать в системах Windows.

Традиционные пути DOS

Стандартный путь DOS может состоять из трех компонентов:

  • Буква тома или диска, за которой следует разделитель томов ( : ).
  • Имя каталога. Символ разделителя каталогов разделяет подкаталоги во вложенной иерархии каталогов.
  • Необязательное имя файла. Символ разделителя каталогов разделяет путь к файлу и имя файла.

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

< td>Абсолютный путь от корня текущего диска.
Путь Описание
C:\Documents\Newsletters\Summer2018 .pdf Абсолютный путь к файлу от корня диска C: .
\Program Files\Custom Utilities\StringFinder.exe
2018\January.xlsx Относительный путь к файлу в подкаталоге текущий каталог.
..\Publications\TravelBrochure.pdf Относительный путь к файлу в каталоге, начиная с текущего каталога.
C:\Projects\apilibrary\apilibrary.sln Абсолютный путь к файлу из корня диска C: .
C:Projects\apilibrary\apilibrary.sln Относительный путь от текущего каталога диска C:.

Обратите внимание на разницу между двумя последними путями. Оба указывают необязательный спецификатор тома ( C: в обоих случаях), но первый начинается с корня указанного тома, а второй — нет.В результате первый — это абсолютный путь от корневого каталога диска C:, а второй — относительный путь от текущего каталога диска C:. Использование второй формы вместо первой является частым источником ошибок, связанных с путями к файлам Windows.

Вы можете определить, является ли путь к файлу полным (т. е. не зависит ли путь от текущего каталога и не изменяется при изменении текущего каталога), вызвав метод Path.IsPathFullyQualified. Обратите внимание, что такой путь может включать сегменты относительных каталогов ( . и .. ) и по-прежнему быть полным, если разрешенный путь всегда указывает на одно и то же место.

В следующем примере показана разница между абсолютным и относительным путями. Предполагается, что каталог D:\FY2018\ существует и что вы не задали текущий каталог для D:\ из командной строки перед запуском примера.

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

UNC-пути

Пути универсального соглашения об именах (UNC), которые используются для доступа к сетевым ресурсам, имеют следующий формат:

  • Имя сервера или хоста, перед которым стоит \\ . Имя сервера может быть именем компьютера NetBIOS или IP/FQDN-адресом (поддерживаются как IPv4, так и v6).
  • Имя общего ресурса, которое отделяется от имени хоста символом \ . Вместе имя сервера и общего ресурса составляют том.
  • Имя каталога. Символ разделителя каталогов разделяет подкаталоги во вложенной иерархии каталогов.
  • Необязательное имя файла. Символ разделителя каталогов разделяет путь к файлу и имя файла.

Ниже приведены некоторые примеры путей UNC:

Путь Описание
\\system07\C$\< /td> Корневой каталог диска C: в system07 .
\\Server2\Share\Test\Foo.txt Foo.txt в тестовом каталоге тома \\Server2\Share.

Пути UNC всегда должны быть полностью определенными. Они могут включать сегменты относительных каталогов ( . и .. ), но они должны быть частью полного пути. Относительные пути можно использовать только путем сопоставления пути UNC с буквой диска.

Пути устройств DOS

Операционная система Windows имеет единую объектную модель, которая указывает на все ресурсы, включая файлы. Эти пути к объектам доступны из окна консоли и отображаются на уровне Win32 через специальную папку символических ссылок, с которыми сопоставляются устаревшие пути DOS и UNC. Доступ к этой специальной папке осуществляется с помощью синтаксиса пути устройства DOS, который может быть одним из следующих:

Помимо идентификации диска по его букве, вы можете идентифицировать том по его GUID. Это принимает форму:

Путь устройства DOS состоит из следующих компонентов:

Спецификатор пути к устройству ( \\.\ или \\?\ ), который идентифицирует путь как путь к устройству DOS.

Символическая ссылка на «реальный» объект устройства (C: в случае имени диска или Volume в случае GUID тома).

Первый сегмент пути устройства DOS после спецификатора пути устройства идентифицирует том или диск. (Например, \\?\C:\ и \\.\BootPartition\ .)

Существует специальная ссылка для UNC, которая, что неудивительно, называется UNC . Например:

Для UNC устройств часть сервера/общего ресурса образует том. Например, в \\?\server1\e:\utilities\\filecomparer\ часть server/share — это server1\utilities . Это важно при вызове такого метода, как Path.GetFullPath(String, String) с относительными сегментами каталога; невозможно пройти мимо тома.

Пути устройств DOS являются полными по определению и не могут начинаться с сегмента относительного каталога ( . или .. ). Текущие каталоги никогда не входят в их использование.

Пример: способы ссылки на один и тот же файл

В следующем примере показаны некоторые способы обращения к файлу при использовании API в пространстве имен System.IO. В примере создается экземпляр объекта FileInfo и используются его свойства Name и Length для отображения имени файла и длины файла.

Нормализация пути

Почти все пути, передаваемые API Windows, нормализованы. Во время нормализации Windows выполняет следующие шаги:

  • Определяет путь.
  • Применяет текущий каталог к ​​частично определенным (относительным) путям.
  • Канонизирует разделители компонентов и каталогов.
  • Вычисляет относительные компоненты каталога ( . для текущего каталога и .. для родительского каталога).
  • Удаляет определенные символы.

Эта нормализация происходит неявно, но вы можете сделать это явно, вызвав метод Path.GetFullPath, который заключает в себе вызов функции GetFullPathName().Вы также можете вызвать функцию Windows GetFullPathName() напрямую, используя P/Invoke.

Определить путь

Первым шагом в нормализации пути является определение типа пути. Пути относятся к одной из нескольких категорий:

  • Это пути к устройствам; то есть они начинаются с двух разделителей и вопросительного знака или точки ( \\? или \\. ).
  • Это пути UNC; то есть они начинаются с двух разделителей без знака вопроса или точки.
  • Это полностью определенные пути DOS; то есть они начинаются с буквы диска, разделителя тома и разделителя компонентов ( C:\ ).
  • Они обозначают устаревшее устройство ( CON , LPT1 ).
  • Они относятся к корню текущего диска; то есть они начинаются с одного разделителя компонентов ( \ ).
  • Они относятся к текущему каталогу указанного диска; то есть они начинаются с буквы диска, разделителя томов и без разделителя компонентов ( C: ).
  • Они относятся к текущему каталогу; то есть они начинаются с чего-то еще ( temp\testfile.txt ).

Тип пути определяет, применяется ли каким-либо образом текущий каталог. Он также определяет, что является «корнем» пути.

Обработка устаревших устройств

Если путь представляет собой устаревшее устройство DOS, такое как CON , COM1 или LPT1 , он преобразуется в путь устройства путем добавления \\.\ и возврата.

Путь, начинающийся с имени устаревшего устройства, всегда интерпретируется методом Path.GetFullPath(String) как устаревшее устройство. Например, путь устройства DOS для CON.TXT — \\.\CON , а путь устройства DOS для COM1.TXT\file1.txt — \\.\COM1 .

Применить текущий каталог

Если путь не указан полностью, Windows применяет к нему текущий каталог. К UNC и путям устройств не применяется текущий каталог. Не работает и полный диск с разделителем C:\ .

Если путь начинается с одного разделителя компонентов, применяется диск из текущего каталога. Например, если путь к файлу — \utilities, а текущий каталог — C:\temp\ , нормализация дает C:\utilities .

Если путь начинается с буквы диска, разделителя томов и без разделителя компонентов, применяется последний текущий каталог, заданный в командной оболочке для указанного диска. Если последний текущий каталог не был установлен, применяется только диск. Например, если путь к файлу — D:sources, текущий каталог — C:\Documents\, а последний текущий каталог на диске D: — D:\sources\, результатом будет D:\sources\sources. Эти «относительные» пути являются распространенным источником логических ошибок программ и сценариев. Предполагать, что путь, начинающийся с буквы и двоеточия, не является относительным, явно неверно.

Если путь начинается не с разделителя, применяются текущий диск и текущий каталог. Например, если путь — filecompare, а текущий каталог — C:\utilities\ , результатом будет C:\utilities\filecompare\ .

Канонизировать разделители

Все прямые косые черты ( / ) преобразуются в стандартный разделитель Windows — обратную косую черту ( \ ). Если они присутствуют, ряд косых черт, следующих за первыми двумя косыми чертами, сворачивается в одну косую черту.

Оценить относительные компоненты

По мере обработки пути оцениваются любые компоненты или сегменты, состоящие из одной или двух точек ( . или .. ):

На один период текущий сегмент удаляется, так как он ссылается на текущий каталог.

Для двойной точки текущий сегмент и родительский сегмент удаляются, поскольку двойная точка относится к родительскому каталогу.

Родительские каталоги удаляются только в том случае, если они не находятся за корнем пути. Корень пути зависит от типа пути. Это диск ( C:\ ) для путей DOS, сервер/общий ресурс для UNC ( \\Server\Share ) и префикс пути к устройству для путей к устройствам ( \\?\ или \\.\ ).

Обрезать символы

Помимо удаленных ранее серий разделителей и относительных сегментов, при нормализации удаляются некоторые дополнительные символы:

Если сегмент заканчивается одним периодом, этот период удаляется. (Сегмент из одной или двух точек нормализуется на предыдущем шаге. Сегмент из трех и более точек не нормализуется и фактически является допустимым именем файла/каталога.)

Если путь не заканчивается разделителем, все завершающие точки и пробелы (U+0020) удаляются. Если последний сегмент представляет собой просто одинарную или двойную точку, он подпадает под действие приведенного выше правила относительных компонентов.

Это правило означает, что вы можете создать имя каталога с завершающим пробелом, добавив завершающий разделитель после пробела.

Вы никогда не должны создавать каталог или имя файла с пробелом в конце. Конечные пробелы могут затруднить или сделать невозможным доступ к каталогу, и приложения обычно не работают при попытке обработать каталоги или файлы, имена которых содержат конечные пробелы.

Пропустить нормализацию

Обычно любой путь, переданный API Windows, (фактически) передается функции GetFullPathName и нормализуется. Есть одно важное исключение: путь к устройству начинается со знака вопроса, а не с точки. Если путь не начинается точно с \\?\ (обратите внимание на использование канонической обратной косой черты), он нормализуется.

Почему вы хотите пропустить нормализацию? Есть три основные причины:

Чтобы получить доступ к путям, которые обычно недоступны, но разрешены. Файл или каталог, называемый скрытым. , например, невозможно получить доступ каким-либо другим способом.

Чтобы повысить производительность, пропустив нормализацию, если она уже была выполнена.

Пропуск проверки нормализации и максимального пути — единственное различие между двумя синтаксисами пути к устройству; в остальном они идентичны. Будьте осторожны, пропуская нормализацию, так как вы можете легко создать пути, с которыми "обычным" приложениям будет сложно работать.

Пути, начинающиеся с \\?\, по-прежнему нормализуются, если вы явно передаете их функции GetFullPathName.

Вы можете передавать пути, содержащие более MAX_PATH символов, в GetFullPathName без \\?\ . Он поддерживает пути произвольной длины вплоть до максимального размера строки, который может обрабатывать Windows.

Case и файловая система Windows

Особенность файловой системы Windows, которая сбивает с толку пользователей и разработчиков, отличных от Windows, заключается в том, что в именах путей и каталогов не учитывается регистр. То есть имена каталогов и файлов отражают регистр строк, используемых при их создании. Например, вызов метода

Определение и примеры корневых папок и корневых каталогов

Тим Фишер имеет более чем 30-летний опыт работы в сфере технологий. Он пишет о технологиях более двух десятилетий и является вице-президентом и генеральным директором Lifewire.

Майкл Хайне — сертифицированный CompTIA писатель, редактор и сетевой инженер с более чем 25-летним опытом работы в сфере телевидения, обороны, интернет-провайдеров, телекоммуникаций и образования.

Корневая папка, также называемая корневым каталогом или иногда просто корнем любого раздела или папки, является «самым высоким» каталогом в иерархии. Вы также можете думать об этом в целом как о начале или начале определенной структуры папок.

Корневой каталог содержит все остальные папки на диске или в папке и, конечно же, может содержать файлы. Вы можете визуализировать это с помощью перевернутого дерева, где корни (корневая папка) находятся вверху, а ветви (подпапки) находятся ниже; корень — это то, что скрепляет все его нижние элементы.

Например, корневой каталог основного раздела на вашем компьютере, вероятно, C:\. Корневая папка вашего DVD или CD-привода может быть D:\. В корне реестра Windows хранятся такие кусты, как HKEY_CLASSES_ROOT.

Иллюстрация, показывающая корневой каталог и его папки

ROOT также является аббревиатурой от ROOT Object Oriented Technologies, но не имеет ничего общего с корневыми папками.

Примеры корневых папок

Термин корень также может относиться к тому местоположению, о котором вы говорите. Например, программа, которая устанавливается в папку C:\Programs\Example, использует эту конкретную папку в качестве корневой папки с потенциальной серией вложенных папок под ней.

То же самое относится и к любой другой папке. Вам нужно перейти в корень папки пользователя для User1 в Windows? Это папка C:\Users\Name1\. Это, конечно, зависит от того, о каком пользователе вы говорите — корневая папка User2 будет C:\Users\User2\.

Доступ к корневой папке

Быстрый способ попасть в корневую папку жесткого диска, когда вы находитесь в командной строке Windows, — это выполнить команду изменения каталога — cd — следующим образом:

После выполнения вы будете немедленно перемещены из текущего рабочего каталога в корневую папку. Так, например, если вы находитесь в папке C:\Windows\System32, а затем вводите команду cd с обратной косой чертой (как показано выше), вы сразу же будете перемещены из того места, где вы находились. на C:\.

Аналогично выполнение команды cd следующим образом:

<р>. переместит каталог на одну позицию вверх, что полезно, если вам нужно добраться до корня папки, а не до корня всего диска. Например, выполнение команды cd .. в папке C:\Users\User1\Downloads\ изменяет текущий каталог на C:\Users\User1\. Повторное выполнение приведет к C:\Users\ и т. д.

Ниже приведен пример, в котором мы начинаем с папки Германия на диске C:\.Как видите, выполнение той же команды в командной строке перемещает рабочий каталог в папку непосредственно перед/над ним, вплоть до корня жесткого диска.

Вы можете попытаться получить доступ к корневой папке только для того, чтобы обнаружить, что не видите ее при просмотре через Проводник. Это связано с тем, что некоторые папки по умолчанию скрыты в Windows. См. нашу статью Как показать скрытые файлы и папки в Windows? если вам нужна помощь, чтобы отобразить их.

Подробнее о корневых папках и каталогах

Термин корневая веб-папка иногда может использоваться для описания каталога, содержащего все файлы, составляющие веб-сайт. Здесь применяется та же концепция, что и на вашем локальном компьютере: файлы и папки в этой корневой папке содержат основные файлы веб-страницы, такие как файлы HTML, которые должны отображаться, когда кто-то обращается к основному URL-адресу веб-сайта.

Термин root, используемый здесь, не следует путать с папкой /root в некоторых операционных системах Unix, где она используется вместо домашнего каталога определенного пользователя. учетная запись (иногда называемая корневой учетной записью). Однако в некотором смысле, поскольку это основная папка для конкретного пользователя, вы можете называть ее корневой папкой.

В некоторых операционных системах файлы могут храниться в корневом каталоге, например на диске C:/ в Windows, но некоторые ОС не поддерживают это.

Термин корневой каталог используется в операционной системе VMS для определения места хранения всех файлов пользователя.

Корневая папка — это папка самого нижнего уровня на SD-карте. Это первая папка, которую вы видите, когда открываете SD-карту. Вы можете увидеть папки с именами DCIM и MISC или вообще ничего не увидеть, если недавно отформатировали карту памяти.

Каталог /root в Linux — это пользовательская папка системного администратора или пользователя root. Как и в папке Windows C:\Users, в ней есть подкаталоги для каждого пользователя, содержащие все данные учетной записи.

Папка /html — это корневой каталог для ваших файлов WordPress. Вы можете получить доступ к корневой папке через SFTP, SSH или файловый менеджер.

Ваш сайт существует сразу в двух мирах: реальном и виртуальном.

С другой стороны, для разработчика сайта его сайт - это некая программа, работающая на определенном сервере, на самом реальном компьютере с жестким диском, файлами и каталогами. И ваш PHP-скрипт при чтении файлов данных или включении других скриптов работает с такими реальными файлами, которые существуют на физическом носителе.

Таким образом, этот дуализм является корнем многих проблем.

Однако, чтобы разобраться в этих вещах, достаточно усвоить всего две простые концепции:

  1. Разница между абсолютным и относительным путями.
  2. Разница между корнем веб-сервера и корнем файловой системы.

Разница между абсолютным и относительным путями

Это довольно просто.

  • Если путь создается, начиная с корня системы, он называется абсолютным.
  • Если путь строится, начиная с текущего местоположения, он называется относительным (что имеет смысл, поскольку он связан с нашим текущим положением).

Это точно так же, как и в реальной жизни. Учитывая абсолютный адрес, почтовый адрес, например «7119 W Sunset Blvd West Hollywood, CA 90046», вы можете найти местоположение из любого места. Однако, учитывая относительные направления, например, "держать три квартала в этом направлении, а затем повернуть направо" будет работать только из текущего местоположения, в противном случае вы будете сбиты с толку.

Так и с путями в компьютерном мире: по абсолютному адресу всегда можно попасть в нужное место, откуда бы вы ни начали. В то время как относительный путь сложен, и его следует использовать с осторожностью, только если вы точно знаете, где находитесь в данный момент.

Абсолютные пути

Итак, еще раз: абсолютный путь — это путь, начинающийся от корня системы

Некоторые примеры абсолютных путей:

В Windows файловая система не имеет общего корня для всей системы, а разделена между дисками, поэтому абсолютные пути начинаются с буквы диска. Принимая во внимание, что у каждого диска есть собственный корень, который представляет собой обратную косую черту - \ . Таким образом, вы можете ввести cd \ и перейти в корень текущего диска.

Таким образом, вы можете сказать, что Windows довольно запутанна, но для простоты мы будем делать вид, что у нас есть только один диск, и в его пределах правила почти такие же, как и в Unix.

Теперь вы можете отличить абсолютный путь от относительного — он начинается с корня, а именно:

  • в файловой системе Unix это /
  • на веб-сервере это снова /
  • в Windows это либо \ (для текущего диска), либо D:\ (для всей системы)

Относительные пути

Если вы не указали корень, это означает, что ваш путь относительный.

Самый простой пример относительного пути — просто имя файла, например index.html . Поэтому следует быть осторожным с относительными путями. Если ваш текущий каталог /about/, тогда index.html будет одним, но если вы переключите его на /contacts/, то это будет другой.

Другие примеры относительных путей:

  • ./file.php (файл находится в текущей папке. То же, что и просто file.php )
  • images/picture.jpg (файл находится в папке с изображениями, которая находится в текущем каталоге)
  • ../file.php (файл находится в папке на один уровень выше текущей папки)
  • ../../file.php (файл находится в папке на два уровня выше текущей директории)

Вы должны знать, что система, встречая относительный путь, всегда достраивает его до абсолютного. И веб-сервер, и файловая система делают это, но по-разному. Итак, давайте изучим их.

Корень документа

Это самая интересная часть. Есть точка, где реальный мир встречается с виртуальным.

И тут хорошо видно суть: есть общая для обоих адресов часть: /forum/index.php , которая и является источником путаницы.

Чтобы получить рабочий путь к этому файлу, мы должны добавить недостающую часть. В нашем примере это /var/www/site , который называется DOCUMENT_ROOT и является наиболее важным параметром конфигурации для взаимодействия с файловой системой. В PHP вы можете получить к нему доступ через $_SERVER['DOCUMENT_ROOT'] .

Теперь вы можете сказать, что для того, чтобы любой путь к файловой системе работал, он должен быть абсолютным и создан с использованием DOCUMENT_ROOT . Таким образом, правильный PHP-код для доступа к /forum/index.php из PHP будет

здесь мы используем часть пути веб-сервера, предваряя ее корнем документа. Вуаля!

Пути веб-сервера

намного проще.

Как уже было сказано ранее, для браузера на сервере нет файлов. Пользователь сайта никогда не имеет доступа к файловой системе сервера. Для браузера есть только корень сайта. Это константа и всегда просто косая черта.

Поэтому, чтобы сделать HTML-ссылку абсолютной, просто создайте ее из корня сайта, и вы больше никогда не увидите ошибку 404 для существующего файла!

Представьте, что на вашем сайте есть два раздела,

То же самое относится ко всем внутренним ссылкам на сайте — изображениям, файлам js и css, гиперссылкам или любым другим ресурсам, по которым можно щелкнуть или загрузить на страницу.

Консольные скрипты. Единая точка входа

К сожалению, для консольных скриптов наша полезная переменная $_SERVER['DOCUMENT_ROOT'] недоступна. Таким образом, мы обязаны использовать пути относительно вызывающего скрипта, полученные из текущего местоположения скрипта.

Например, если ваше приложение размещено в /var/www/app и есть две подпапки, /var/www/app/bin и /var/www/app/config , и вы хотите получить доступ к последней из первый, вы можете написать следующий код:

Хотя технически абсолютный (начиная с косой черты), этот путь по сути является относительным для вызывающего скрипта, потому что, если вызывающий скрипт будет перемещен в другой каталог, он больше не найдет файл конфигурации.

Вот почему рекомендуется использовать единую точку входа для вашего приложения. Или, как в нашем случае, две точки входа, одна для веб-запросов и одна для консольных команд.

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

  • /var/www/app/html/index.php
  • /var/www/app/bin/console.php
  • /var/www/app/config/bootstrap.php

Тогда мы могли бы написать следующий код (среди прочего) в bootstrap.php:

чтобы определить константу ROOT_DIR, содержащую путь к корневому каталогу нашего приложения (который находится непосредственно над каталогом конфигурации).

А затем и в index.php, и в console.php

чтобы сделать доступными все элементы начальной загрузки, включая константу ROOT_DIR. Отныне мы можем использовать его для создания абсолютных путей, начиная с корневого каталога (при условии, что наши скрипты вызываются через точку входа, веб-или консольную):

Примеры реализации можно найти в Laravel Artisan или консоли Symfony.

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

Полезные команды и константы PHP

  • __FILE__ константа, содержащая полный абсолютный путь к файлу, который выполняется в данный момент.
  • __DIR__ константа, содержащая путь к каталогу, в котором находится исполняемый в данный момент файл (фактически это просто __FILE__ без имени файла и косой черты в конце)
  • команда realpath() преобразует относительный путь в абсолютный
  • getcwd() предоставит вам текущий каталог

Статьи по теме:

Есть вопрос?

Я единственный человек, имеющий золотой значок в , и в Stack Overflow, и я стремлюсь указать правильный путь для разработчиков PHP.

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

СМ. ТАКЖЕ:

Последние комментарии:

  • 27.03.22 21:41
    Джеймс Миллер за (единственно подходящее) руководство по PDO:
    Как люди делают такие красивые текстовые фрагменты кода и простого текста. бр />читать дальше
  • 27.03.22 21:37
    Джеймс Миллер за (единственно правильный) учебник по PDO:
    Я пытаюсь подражать вашему блогу, используя хранимые процедуры. Две таблицы. комментарии и ответ. родитель.
    читать дальше
  • 27.03.22 14:00
    Вишвас Кумар Синха за Забавные истории произошли на форумах PHP:
    Черт возьми, большое спасибо за то, что спасли мой день, вы, ребята, сделали мое воскресенье точным и.
    читать дальше
  • 14.03.22 11:48
    Jolly Boy для Top 10:
    Спасибо за нападки на начинающих программистов на stackoverflow. Держу пари, ты чувствуешь себя очень тяжело. Вместо.
    читать дальше
  • 12.03.22 20:50
    Дон за аутентификацию пользователя с помощью PDO и password_verify():
    Спасибо за написание ЛУЧШЕГО (только?) понятного вводного руководства по расшифровке PDO/MySQLi PHP.
    читать дальше

Добавить комментарий

Пожалуйста, воздержитесь от рассылки спама или рекламы любого рода.
Сообщения с гиперссылками ожидают рассмотрения модератором.

  • > до и пустая строка после для цитаты
  • четыре пробела для обозначения блока кода

Комментарии:

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

DIR хорошо подходит для включения файлов в скрипты. Но для указания на изображения или для генерации URL это не работает, так как вам нужен веб-корень. Если вы переключаетесь между Windows и Linux, $projectDir с заменой preg также не работает. Вот пример:

Это вывод из приведенного выше для Windows:

Здесь, в Linux со скриптом в корневом каталоге веб-сервера

Ответить:

Я чувствую, что вы слишком много думаете об этом.

Для указания на изображения это намного, намного проще, потому что веб-корень всегда просто / независимо от того, что. В linux, в windows, в apache или nginx, с бэкендом PHP или node.js — корневой веб-сайт — это просто /

Так что вам просто нужно написать

и это будет работать везде.

Иногда путь проекта отличается при локальной разработке и динамическом развертывании. В этом случае полезно иметь путь от корня веб-сайта к сценарию, если используются абсолютные пути от корня веб-сайта. Один из способов добиться этого: rtrim(dirname($_SERVER['SCRIPT_NAME']), ); Также на днях я заметил, что в проекте с перезаписью URL использование относительных путей не работает.

Ответить:

Гораздо проще использовать переменную __DIR__.

И да, относительные URL вообще не должны использоваться. Все локальные URL должны быть указаны как абсолютные пути, т.е. /articlas/paths

Отличное введение, но не помогает с путаницей, вызванной требованием или включением. Я не думаю, что когда-нибудь полностью пойму, что происходит в цепочке включаемых файлов с текущим каталогом и используется ли текущий каталог директивами include, когда они интерпретируют свой аргумент пути. И это до того, как мы рассмотрим эффекты включения пути!

Эй, я хочу получить доступ к файлу, расположенному в другой папке. Файл называется config.php и содержит конфигурации базы данных и находится в папке с библиотеками. Когда мне нужно это в другом файле с именем table.php внутри папки администраторов, это дает мне большую ошибку «требовать не найдено blablablaa». Помогите!

Ответить:

Просто прочитайте статью выше, в ней объясняется, что делать. В основном вам нужно использовать абсолютный путь и использовать для него $_SERVER['DOCUMENT_ROOT']

Большое спасибо. Я пытаюсь создать безопасный сайт, где мои файлы HTML/CSS/JS находятся в корневом каталоге веб-сервера, а все мои файлы PHP находятся в корневом каталоге файловой системы (думаю, у меня это правильно) и поэтому не видны посторонним. Я буду изучать эту страницу некоторое время, пока не сделаю все правильно.

Ответить:

Большое спасибо за добрые слова.
Пожалуйста, не стесняйтесь спрашивать, если у вас есть какие-либо вопросы. Имейте в виду, что таким образом вы поможете мне сделать статью лучше, поэтому приветствуются все вопросы!

Вы должны написать книгу. Серьезно. Очень хорошо объяснили и очень помогли. Спасибо, что поделились своими знаниями.

это здорово, но, к сожалению, когда скрипт выполняется через cron, он не видит $_SERVER, потому что он не установлен. Что бы вы порекомендовали в качестве временного решения?

Ответить:

Спасибо за очень хороший вопрос! Действительно, это очень вероятный и очень важный случай.

Если ответ вас не удовлетворил, поделитесь своими сомнениями. Спасибо, что помогаете мне делать сайт лучше!

Здравствуйте! У нас есть приложение, размещенное в IIS. Это приложение имеет контроль загрузки файлов.Когда я выбираю файл для загрузки из папки, он берет полный путь вместе с именем файла, и этот полный путь рассматривается как имя файла в системе. Иногда он превышает максимальную длину имени файла и выдает ошибку. Эта функция была рабочим файлом раньше. Но сейчас мы мигрируем на другой сервер. Отсутствует ли какая-либо функция IIS на этом новом сервере, так что он говорит полный путь, а не просто имя файла? Пожалуйста, помогите

Ответить:

Согласно моему опыту, полный путь отправляется, когда тег формы не имеет атрибута "moutipart/form-data". Но у меня мало опыта работы с IIS.

Очень информативная статья.

Согласен. Хорошая статья. Если кто-то объяснит, что базовый каталог — это просто /, это очень поможет, так как большинство людей обычно пропускают это.

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

Читайте также: