Как прописать путь к диску на сервере
У меня раньше в сети были только Windows-98. У всех полный доступ к диску C. На одном из них лежал файл base.gdb (база на InterBase), и все аботали с ним по сети. Путь в настройках программы я указывал такой - comp1:\Bug\Bug.gdb
где comp1 - имя компьютера
Bug - папка в корневом каталоге (C:\Bug\)
Bug.gdb - файл БД в C:\Bug\Bug.gdb
Всё работало без проблем. Но организация купила сервер, оставили Windows-2000, Разбили винт, Сделали в нём несколько общих папок.
Я положил базу на сервер. Но обратиться к ней как раньше не могу. Ведь раньше я не указывал имя общего ресурса - он был один - C.
Попробовал указать новые настройки. Попробовал много вариантов:
comp1:C:\Bug\Bug.gdb
comp1:C:/Bug/Bug.gdb
comp1C\Bug\Bug.gdb
comp1\C:\Bug\Bug.gdb
- не работают.
Как правильно путь задать .
(сетевой диск нельзя использовать)
Dionys ( 2003-10-11 09:03 ) [1]
попробуй \\comp1\C$\Bug\Bug.gdb
← →Коля ( 2003-10-11 15:46 ) [2]
Не работает. (Кстати общий доступ ведь может быть и лишь к папке Bug, как тогда).
← →Коля ( 2003-10-13 22:48 ) [3]
Не работает. (Кстати общий доступ ведь может быть и лишь к папке Bug, как тогда). Ещё варианты есть?
← →Rouse_ ( 2003-10-13 23:10 ) [4]
Сделай доступ только к Bug (К примеру сетевое имя будет TEST) тогда доступ будет \\TEST\Bug.gdb
← →MegaVolt ( 2003-10-14 17:14 ) [5]
\\Имя_Компа\Имя_папки\Имя_файла :)
Например
\\Megavolt\Book\kniga1.txt
Rouse_ ( 2003-10-14 19:22 ) [6]
> MegaVolt ©
Упс, точно :)) Что-то я запечатался, сенькс за поправку :)
Желаю успехов
← →MegaVolt ( 2003-10-15 09:13 ) [7]
;)
← →Коля ( 2003-10-15 10:20 ) [8]
Спасибо! Помогло! (хотя я вроде и до этого пробовал такой вариант, ведь то-же самое пишется в строке адреса проводника)
Путь на сервере до файла через php, выведем на экран ! Вообще получим путь на сервере до файла разными способами!
Что такое путь до файла на сервере -> теория
Иногда, очень трудно понять, что означают те или иные значения! Как можно объяснить по простому, Что такое путь до файла на сервере!?
Давайте посмотрим в адресную строку и там вы увидите ссылку на файл и выше выделенного красным, вы не сможете подняться, это домен или по-другому можно его обозвать -> корневая папка, но данный путь на корневой папке не останавливается.
Выше есть еще несколько папок, с разной степенью доступа! И если мы весь путь, который существует выше корневой папки поставим вместо домена. то получим путь на сервере до файла
И если вы используете php, то вам все равно придется использовать путь на сервере до файла, потому, что многие функции работают только с файлом, к которому прописан путь на сервере
Регистр символов и файловая система Windows
Особенность файловой системы Windows заключается в том, что пользователи и разработчики, имеющие дело с другими операционными системами, могут сталкиваться с проблемами из-за того, что в именах каталогов и путях не учитывается регистр символов. Это значит, что в именах каталогов и файлов сохраняется регистр строк, используемый в момент их создания. Например, вызов метода
создает каталог с именем TeStDiReCtOrY. Если переименовать каталог или файл так, чтобы изменился регистр символов, в имени будет отражен регистр, используемый в момент переименования. Например, следующий код переименовывает файл test.txt в Test.txt:
Тем не менее при сравнении имен каталогов и файлов регистр символов не учитывается. Если выполнить поиск файла с именем "test.txt", API файловой системы .NET будут игнорировать регистр символов при сравнении. Таким образом, при поиске файла "test.txt" будут возвращены совпадения для файлов "Test.txt", "TEST.TXT", "test.TXT", а также любых других их вариантов с различным сочетанием букв в верхнем и нижнем регистре.
Относительные - ведут отсчет от корня сайта или текущего документа.
При обращении к каталогу без явного указания названия файла (то, что пишется в конце, после /fail.html) обычно открывается индексный файл - index.html. Это стоит помнить, чтобы всегда вы могли защитить свой сайт от мошенников. Об этом я рассказываю в настройках WP.
Абсолютные ссылки обычно применяются для указания документа на другом сетевом ресурсе, впрочем, допустимо делать абсолютные ссылки и внутри текущего сайта. Однако подобное практикуется нечасто, поскольку такие ссылки достаточно длинные и громоздкие. Поэтому внутри сайта преимущественно используются относительные ссылки.
Если вы забыли как правильно написать ссылку в коде , то следует вернуться к этому посту.
Рассмотрим создание относительных ссылок более подробно.
Вариант 1 Фалы располагаются в одной папке?
Здесь все просто. Нужно сделать ссылку из исходного на ссылаемый. То есть вот так:
Здесь путь такой
Здесь нужно выйти - ../ из одной и второй ../ папки и там уже найти файл
Как видите, ничего трудного нет в этом, если знать, как правильно обозначить путь к файлу.
Хочется предупредить, что этот метод указания пути к файлу не работает на локальном компьютере и годится, только для серверов.
Зато на компьютере вообще все проще простого.
Как получить путь на сервере до файла с помощью -> __FILE__
Для того, чтобы получить путь на сервере до файла с помощью __FILE__, нам потребуется в самом файле установить код php!
Прямо здесь, выведем вот такую конструкцию получения всего пути на сервере до файла:
Пример вывода пути до файла на сервере:
Традиционные пути DOS
Стандартный путь DOS может состоять из трех компонентов:
- Буква тома или диска, после которой следует разделитель томов ( : ).
- Имя каталога. Символ разделителя каталогов служит для разделения подкаталогов во внутренней иерархии каталога.
- Необязательное имя файла. Символ разделителя каталогов служит для разделения пути к файлу и его имени.
Если присутствуют все три компонента, путь является абсолютным. Если буква тома или диска не указана и имя каталога начинается с символа разделителя каталогов, такой путь задан относительно корня текущего диска. В противном случае путь задан относительно текущего каталога. В следующей таблице показаны некоторые возможные пути к каталогам и файлам.
Путь | Описание: |
---|---|
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.
Применение текущего каталога
Если путь не является полным, система Windows применяет к нему текущий каталог. К UNC-путям и путям к устройствам текущий каталог не применяется. Также текущий каталог не применяется к полным путям к диску с разделителем C:\ .
Если путь начинается с одного разделителя компонентов, применяется диск текущего каталога. Например, для пути к файлу \utilities и текущего каталога C:\temp\ в результате нормализации будет получен путь C:\utilities .
Если путь начинается с буквы диска, разделителя томов и не содержит разделителя компонентов, применяется последний текущий каталог, установленный из командной оболочки. Если последний текущий каталог не был установлен, применяется диск сам по себе. Например, для пути D:sources , текущего каталога C:\Documents\ и последнего текущего каталога D:\sources\ на диске D: в результате будет получен путь D:\sources\sources . Пути, задаваемые относительно диска, являются распространенными источниками ошибок программ и логики скрипта. Предположение, что путь, начинающийся с буквы и двоеточия, не является относительным, очевидно неверно.
Если путь не начинается с разделителя, применяются текущий диск и текущий каталог. Например, для пути к файлу filecompare и текущего каталога C:\utilities\ в результате будет получен путь C:\utilities\filecompare\ .
Все о пути на сервере до файла на сайте
-
-> теория -> без php -> глобальная переменная -> __FILE__ -> PHP_URL_PATH
Пропуск нормализации
Как правило, любой путь, передаваемый в API Windows передается в функцию GetFullPathName и нормализуется. Существует одно важное исключение: путь к устройству, который начинается со знака вопроса, а не с точки. Если путь не начинается с последовательности \\?\ (обратите внимание на использование канонической формы с обратной косой чертой), он нормализуется.
Зачем нужно пропускать нормализацию? Существует три основных причины:
Получение путей, которые в обычных обстоятельствах недоступны, но являются допустимыми. Например, невозможно каким-либо иным способом получить доступ к файлу или каталогу с именем hidden. .
Повышение производительности за счет пропуска нормализации в тех случаях, когда нормализация уже выполнена.
Пропуск нормализации и проверки максимальной длины пути является единственным отличием между двумя видами синтаксиса путей к устройствам. В остальных аспектах они идентичны. Пропуск нормализации следует использовать с осторожностью, поскольку в этом случае легко получить пути, при работе с которыми в обычных приложениях будут возникать трудности.
Пути, начинающиеся с последовательности \\?\ , по-прежнему нормализуются, если явно передать их в функцию GetFullPathName.
Вы можете передавать пути длиной более MAX_PATH символов в функцию GetFullPathName без \\?\ . Она поддерживает пути произвольной длины, которая ограничивается лишь максимальным размером строки, поддерживаемым в Windows.
Как сделать путь на сервере самостоятельно?
Кроме всех выше перечисленных способов получения пути к файлу - мы констатируем, что файл уже существует , а если нам нужно создать путь к файлу, который не существует?
Для того, чтобы сделать такой путь на сервере нам понадобится:
Константа, которая не изменяется, (кроме если вы не выше корневой) - это путь до корневой на сервере :путь до корневой
Далее - нам нужно знать путь до папки(если папка будет существовать), например :
Члены большинства типов в пространстве имен System.IO имеют параметр path , который позволяет указать абсолютный или относительный путь к ресурсу в файловой системе. Этот путь передается в API файловой системы Windows. В этом разделе рассматриваются форматы путей к файлам, которые можно использовать в операционных системах Windows.
Сейчас я вам расскажу пару фишек о том, как легко и точно прописать путь к файлу.
- Выбираете нужный вам файл
- Зажмите кнопку Shift и щелкаете правой кнопкой мыши.
- В открывшемся меню выбираете копировать путь к файлу.
- Вставляете сразу после = без кавычек. Они подставятся автоматически.
Если вы пользуетесь командной строкой на компьютере. Лично у меня она даже закреплена в панели задач. То..
- Открываете командную строку
- Просто перетаскиваете туда нужный файл
- Получаете точный путь к вашему файлу. Копируйте и наслаждайтесь!
На этом все на сегодня. Хочется добавить. что при создании папок и файлов не стоит пользоваться кириллицей и тем более пробелом, или разными регистрами символов.
Пробуйте, экспериментируйте и делитесь своими "фишками" и "кейсами".
Хотите освоить самые современные методы написания React приложений? Надоели простые проекты? Нужны курсы, книги, руководства, индивидуальные занятия по React и не только? Хотите стать разработчиком полного цикла, освоить стек MERN, или вы только начинаете свой путь в программировании, и не знаете с чего начать, то пишите через форму связи, подписывайтесь на мой канал в Телеге, вступайте в группу на Facebook.
Есть инструкция и она не очень помогает.
Надо подключить программу А через интернет к папке JDebet на удаленной эвм. На этих двух ПК стоит Винда 7.
На удаленной эвм я открыл сетевой доступ к папке JDebet, в проводнике (Компьютер) в разделе Сеть (по моему так называется) появилась папка JDebet, что как я понял она стала доступной из интернета, так же этой папке я придал свойства для чтения и записи всем.
Я запускаю программу А и она предлагает указать удаленный адрес где должна находится папка JDebet.
Все это я делаю на работе (по заданию начальства), а сейчас по памяти восстанавливаю ход событий.
Так вот? по инструкции надо ввести как на фото \\server\DebetPlusV12\JDebet/
но так как это вариант для локальной сети, то мне надо правильно его изменить.
Вот как я cделал \\40.105.10.25\JDebet/
но после попытки соединения программа А пишет что такой папки нет.
server надо заменить на IP-адрес компьютера с папкой JDebet с открытым доступом, на номер айпи не обращайте внимания, реальный номер я на память не помню, его я брал в свойствах сетевого соединения той эвм на которой расположена папка JDebet.
полный путь к этой папке через диск C:\ и т. д. я не пишу т. к. папка даже в ее свойствах открыта для доступа как я понимаю на прямую.
На всякий случай для эксперимента я отключил файервол.
Может кто из вас опытных увидит мою ошибку в написании адреса или чего то еще, чего я не учел?
Вообще, вы всё правильно делаете. За исключением того, что в конце не нужно ставить "/".
Т. е., у вас на клиенте должно быть прописано что-то вроде \\40.105.10.25\JDebet
Учитывая что фаерволл отключен - всё должно работать.
При включенном фаерволе, необходимо будет ещё разрешить для входящих подключений порты 137, 139 и 445. Ну и 9999 соответственно.
Да, забыл уточнить, что всё это будет работать только в том случае, если на сервере (компьютер с расшареной папкой) в сетевых настройках прописан внещний айпи адрес. И его видно из Интернетов.
Проверить довольно просто, на компьютере вне вашей сети откройте Мой Компьютер и в строке адрес введите \\40.105.10.25
Однако, это не будет работать в случае если у пользователя имеющего права администратора на компьютере, нет пароля это раз.
Вывешивать папку в общий доступ в интернет. это, мягко говоря небезопасно, это два.
И я так думаю, серьезная фирма, а советует делать общий доступ и еще и в работе файервол отключить. Я отключаю только в эксперементальных целях.
Я пробовал без /, но не вышло ни чего.
А вот доступность этого айпи буду проверять на всякий случай
А папка как я и писал - расшаренная, в ее свойствах включил, и адрес внешний, т. к. кроме этого 3G модема в ноутбуке других типа роутеров нет
pelmen101 Гуру (4608) Понятно, по идее тогда всё должно быть хакей. Только убедитесь что на компьютере-сервере у пользователя с правами локального администратора стоит пароль, иначе не сработает.
Канонизация разделителей
Все символы косой черты ( / ) преобразуются в стандартные разделители Windows, то есть символы обратной косой черты ( \ ). Если они присутствуют, последовательность символов косой черты после первых двух таких символов свертывается в один символ косой черты.
Удаление знаков
Помимо удаленных ранее разделителей и относительных сегментов во время нормализации также удаляются некоторые дополнительные знаки:
Если сегмент заканчивается одной точкой, эта точка удаляется. (Сегмент одной или двойной точки нормализован на предыдущем шаге. Сегмент из трех или более периодов не нормализован и действительно является допустимым именем файла или каталога.)
Если путь не заканчивается разделителем, удаляются все конечные точки и пробелы (U+0020). Если последний сегмент содержит только одну или две точки, к нему применяется приведенное выше правило для относительных компонентов.
Это правило устанавливает, что вы можете создать имя каталога с конечным пробелом, добавив разделитель после пробела.
Создавать имена каталогов или файлов с конечным пробелом нельзя. Наличие конечных пробелов может затруднить или исключить возможность доступа к каталогу. В связи с этим при попытке обработать каталоги или файлы, имена которых содержат конечные пробелы, происходит сбой приложения.
Путь на сервере до файла php с использованием PHP_URL_PATH
Когда вам нужно избавиться от всякого мусора в пути до файла на сервере, то можно использовать ниже идущий способ:
Если вы собирайтесь делать сайт, то вам все равно придется иметь на борту несколько путей и разных, в разных переменных!
Так не получится, что например вы написали одну переменную и этого вам хватит - точно вам говорю не хватит!
Вчера мы рассматривали путь до корневой папки .
Из которой вы узнали, что путь до корневой папки я помещал в переменную - $home
В переменную $parse_url поместим функцию parse_url и разберем на части $_SERVER['REQUEST_URI'] из которой получим только часть ссылки где есть путь:
Выведем на экран путь на сервере до файла третьим способом:
Результат вывода пути на сервере до файла php:
Получить путь до файла на сервере
Можно ли получить путь до файла на сервере без php!? Можно, но зачем!? Предположим, что у вас нет php!? Очень странно, но возможно! Никогда такой херней не занимался, но что не сделаешь для своих любимых пользователей.
У меня только единственный способ . кроме обращения в тех поддержку.
Заходим в админку, поскольку я не умею гадать, то заходим в свою админку сайта, у нас это DIRECTADMIN на ruweb - е
Ищем вкладку создать ftp аккаунт.
После того, как вы попали на новую вкладку опять нажимаем ftp аккаунт
Получить путь до файла на сервере
Далее выбираем первый чекбокс и внизу видим путь на сервер до корневой папки:
Получить путь до файла на сервере
Получить путь до файла на сервере -> способ №1
Да! Напоминаю, что в зависимости от структуры вашего сервера, и будет зависеть путь до файла на сервере
Для того, чтобы получить путь до файла на сервере нам понадобится, путь на сервере до корневой папки
Далее нам понадобится путь от корневой, до файла:
Теперь соберем все вместе и выведем через echo
И получим путь на сервере до файла через глобальную переменную $_SERVER
Но у данной переменной есть некоторый минус, она вам покажет все, что есть после расширения, например get запрос.
Давайте сделаем живой пример и создадим ссылку с гет запросом нажмите по ссылке и посмотрите ниже пункта 4, что прибавилось в строке. выделено красным:
Вычисление относительных компонентов
При обработке пути выполняется вычисление любых его компонентов или сегментов, которые состоят из одной или двух точек ( . или .. ):
Если обнаруживается одна точка, текущий сегмент удаляется, поскольку он ссылается на текущий каталог.
Если обнаруживаются две точки, удаляются текущий и родительский сегмент, поскольку в этом случае задается ссылка на родительский каталог.
Родительские каталоги удаляются только в том случае, если они не находятся после корня пути. Корень пути зависит от его типа. Это будет диск ( C:\ ) для путей DOS, сервер или общий сетевой ресурс для UNC-путей ( \\Server\Share ) и префикс пути к устройству для путей к устройствам ( \\?\ или \\.\ ).
Пути к устройствам DOS
В операционной системе Windows используется унифицированная объектная модель, которая указывает на все ресурсы, включая файлы. Эти пути к объектам доступны из окна консоли и предоставляются на уровень Win32 с использованием специальной папки с символьными ссылками, с которыми сопоставляются устаревшие пути DOS и UNC. Доступ к этой специальной папке осуществляется с использованием синтаксиса пути к устройству DOS, который может иметь одну из приведенных ниже форм:
Помимо использования буквы диска, вы можете указать том с помощью его GUID. Синтаксис будет иметь вид:
Путь к устройству DOS состоит из следующих компонентов:
Описатель пути к устройству ( \\.\ или \\?\ ), который идентифицирует путь как путь к устройству DOS.
Символьная ссылка на "реальный" объект устройства (C: в случае имени диска или Volume в случае GUID тома).
Первый сегмент пути к устройству DOS после описателя пути к устройству идентифицирует том или диск. (Например, \\?\C:\ и \\.\BootPartition\ .)
Для UNC-путей существует специальная ссылка, которая называется UNC . Пример:
Для UNC-путей к устройствам часть сервера или общего сетевого ресурса образует том. Например, в пути \\?\server1\e:\utilities\\filecomparer\ часть server1\utilities представляет сервер или общий сетевой ресурс. Это важно при вызове такого метода, как Path.GetFullPath(String, String) с сегментами с относительным путем к каталогу, поскольку переход дальше тома невозможен.
Пути к устройствам DOS являются полными по определению и не могут начинаться с относительным сегментом каталога ( . или .. ). Они никогда не задаются относительно текущего каталога.
UNC-пути
UNC-пути (универсальное соглашение об именовании) используются для доступа к сетевым ресурсам и имеют следующий формат:
- Имя сервера или узла, которому предшествуют символы \\ . В качестве имени сервера может выступать имя компьютера NetBIOS, а также IP-адрес или полное доменное имя (поддерживаются адреса IPv4 и IPv6).
- Имя общего ресурса, которое отделяется от имени узла символами \ . Имя сервера и имя общего ресурса в совокупности образуют том.
- Имя каталога. Символ разделителя каталогов служит для разделения подкаталогов во внутренней иерархии каталога.
- Необязательное имя файла. Символ разделителя каталогов служит для разделения пути к файлу и его имени.
Ниже приводятся некоторые примеры UNC-путей:
Path | Описание |
---|---|
\\system07\C$\ | Корневой каталог диска C: на компьютере system07 . |
\\Server2\Share\Test\Foo.txt | Файл Foo.txt в тестовом каталоге тома \\Server2\Share . |
UNC-пути всегда должны быть полными. Они могут включать сегменты с относительным путем к каталогу ( . и .. ), однако они должны быть частью полного пути. Использовать относительные пути можно только посредством сопоставления UNC-пути с буквой диска.
Идентификация пути
На первом шаге процесса нормализации осуществляется идентификация типа пути. Пути могут относиться к одной из нескольких категорий:
- Пути к устройствам: начинаются с двух разделителей и знака вопроса или точки ( \\? или \\. ).
- UNC-пути: начинаются с двух разделителей без знака вопроса или точки.
- Полные пути DOS: начинаются с буквы диска, разделителя томов и компонентов ( C:\ ).
- Пути к устаревшим устройствам ( CON , LPT1 ).
- Пути относительно корня текущего диска: начинаются с одного разделителя компонентов ( \ ).
- Пути относительно текущего каталога указанного диска: начинаются с буквы диска и разделителя томов, но не содержат разделителя компонентов ( C: ).
- Пути относительно текущего каталога: начинаются с любых других символов ( temp\testfile.txt ).
Тип пути определяет, будет ли каким-либо образом применяться текущий каталог. Кроме того, от типа пути зависит применяемый корень.
Нормализация путей
Практически все передаваемые в API Windows пути нормализуются. При нормализации в Windows выполняются следующие действия:
- Идентифицируется путь.
- Текущий каталог применяется к неполным (относительным) путям.
- Выполняется канонизация разделителей каталогов.
- Вычисляются относительные компоненты каталога ( . для текущего и .. для родительского каталога).
- Удаляются некоторые символы.
Нормализация происходит неявно, но ее можно выполнить явным образом, вызвав Path.GetFullPath метод, который создает оболочку для вызова функции жетфуллпаснаме (). Также можно вызвать функцию GetFullPathName() Windows напрямую с помощью P/Invoke.
Работа с устаревшими устройствами
Если путь указывает на устаревшее устройство DOS, например CON , COM1 или LPT1 , он преобразуется в путь к устройству путем добавления перед ним последовательности \\.\ и возвращается в таком виде.
Путь, который начинается с имени устаревшего устройства, всегда интерпретируется как путь к устаревшему устройству с помощью метода Path.GetFullPath(String). Например, путь к устройству DOS CON.TXT будет выглядеть как \\.\CON , а путь к устройству DOS COM1.TXT\file1.txt будет выглядеть как \\.\COM1 .
Пример. Способы задать ссылку на один и тот же файл
В следующем примере демонстрируются некоторые способы задать ссылку на файл с использованием API в пространстве имен System.IO. В этом примере создается экземпляр объекта FileInfo и используются его свойства Name и Length, чтобы отобразить имя и длину файла.
Читайте также: