Какой путь к файлу из корневого каталога правильный
Обновлено: 21.11.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 может состоять из трех компонентов:
- Буква тома или диска, за которой следует разделитель томов ( : ).
- Имя каталога. Символ разделителя каталогов разделяет подкаталоги во вложенной иерархии каталогов.
- Необязательное имя файла. Символ разделителя каталогов разделяет путь к файлу и имя файла.
Если присутствуют все три компонента, путь является абсолютным. Если буква тома или диска не указана, а имя каталога начинается с символа разделителя каталогов, путь является относительным от корня текущего диска. В противном случае путь указывается относительно текущего каталога. В следующей таблице показаны некоторые возможные пути к каталогам и файлам.
Путь | Описание |
---|---|
C:\Documents\Newsletters\Summer2018 .pdf | Абсолютный путь к файлу от корня диска C: . |
\Program Files\Custom Utilities\StringFinder.exe | < td>Абсолютный путь от корня текущего диска.|
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-скрипт при чтении файлов данных или включении других скриптов работает с такими реальными файлами, которые существуют на физическом носителе.
Таким образом, этот дуализм является корнем многих проблем.
Однако, чтобы разобраться в этих вещах, достаточно усвоить всего две простые концепции:
- Разница между абсолютным и относительным путями.
- Разница между корнем веб-сервера и корнем файловой системы.
Разница между абсолютным и относительным путями
Это довольно просто.
- Если путь создается, начиная с корня системы, он называется абсолютным.
- Если путь строится, начиная с текущего местоположения, он называется относительным (что имеет смысл, поскольку он связан с нашим текущим положением).
Это точно так же, как и в реальной жизни. Учитывая абсолютный адрес, почтовый адрес, например «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.
Очень информативная статья.
Согласен. Хорошая статья. Если кто-то объяснит, что базовый каталог — это просто /, это очень поможет, так как большинство людей обычно пропускают это.
Очень полезная статья. Относительные и абсолютные пути продолжали сбивать меня с толку. Кажется, что каждый раз, когда мне приходилось кодировать что-то, что сохраняло бы загруженный пользователем файл на сервер, я пробовал несколько разных путей к папкам, пока не нашел тот, который работал, и заканчивал работу, но на самом деле не понимал, работает ли код, который я использовалась оптимальная и надежная версия.
Читайте также: