Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
useruser
82 / 77 / 35
Регистрация: 29.06.2015
Сообщений: 810
1

Как правильно формировать путь к файлу, при разработке на Open Server?

26.12.2017, 13:28. Просмотров 2635. Ответов 11
Метки нет (Все метки)

Пишу вопрос в эту тему, а не в тему к новичкам. На первый взгляд все кажется просто, но скорее всего это не так.
Поэтому описываю простые вещи подробно. Игнорирую часть обязательных директив и синтаксис (head, body...echo).
----
Разрабатываю сайт/систему на Open Server.
Мне нужно правильно (корректно, с точки зрения разработки/языка/его возможностей) формировать путь к файлу, файлам в моем проекте.

Пример с реальным сервером.
Пусть есть сервер 11.11.11.11. На этом сервере есть папка /var/www/4/.
В папке 4 расположен сайт. Сайт состоит из 3х файлов. index.php, page_header.php, main.css.

Файл index.php Расположен по адресу /var/www/4/index.php
PHP
1
include_once ('common/page_header.php');
Файл page_header.php Расположен по адресу /var/www/4/common/page_header.php
PHP
1
<link rel="stylesheet" type="text/css" href="main.css">
Файл main.css - каскадная таблица стилей. Расположен по адресу /var/www/4/main.css

Так как index.php и main.css расположены в одной папке /var/www/4/, то при включении кода page_header.php в index.php мы получим следующее
Файл index.php
PHP
1
2
//include_once ('common/page_header.php'); выполняем команду
<link rel="stylesheet" type="text/css" href="main.css"> //результат
Путь верен, файл main.css найден и подключен. Всё хорошо.

Перемещаем файл index.php в папку /var/www/4/common/
Изменяем его.
PHP
1
2
//include_once ('common/page_header.php'); Мы его переместили в папку common, значит
include_once ('page_header.php');
Выполняем скрипт. Аналогично.
PHP
1
2
//include_once ('page_header.php'); выполняем команду
<link rel="stylesheet" type="text/css" href="main.css"> //результат
Но файла main.css в папке /var/www/4/common/ нет.

Пример упрощен - 3 файла.
Как сделать так, чтобы вне зависимости от расположения index.php, при включении в него page_header.php, путь к main.css был всегда верным?
На практике это будут разные файлы, на разных уровнях (в разных папках, подпапках). И в каждый файл будет включен код page_header.php. К многим файлам нужно подключать таблицу стилей, скрипты и другие файлы.

Существуют магические константы.
Очевидное решение __DIR__
Тогда

Файл index.php
PHP
1
2
$path_to_root_dir=__DIR__;
include_once ($path_to_root_dir.'/common/page_header.php');
Файл page_header.php Расположен по адресу /var/www/4/common/page_header.php
PHP
1
<link rel="stylesheet" type="text/css" href="$path_to_root_dir.main.css">
__DIR__ нельзя использовать в шапке сайта (а так хочется) т.к.
"Если используется внутри подключаемого файла, то возвращается директория этого файла. "((c) мануал).

Теперь при перемещении index.php в любую папку, на надо просто изменять $path_to_root_dir
PHP
1
2
3
//$path_to_root_dir=__DIR__; Переместили в папку common, т.е. на уровень выше 
//Значит путь к начальной папке с сайтом на уровень ниже
$path_to_root_dir=__DIR__.""\\..\\";
И всё будет работать.

Но не на open server
Там путь будет таким

HTML5
1
<link rel="stylesheet" type="text/css" href="D:\OpenServer\domains\my_site.ru/main.css">
Как правильно формировать путь к файлу, при разработке на Open Server?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2017, 13:28
Ответы с готовыми решениями:

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

Как правильно указать путь к файлу?
Парни! Такое дело: есть приложение, есть DLL, написанная мною, которая проигрывает определённый...

Как правильно задать путь к файлу
Пытаюсь прочитать файл string doc = System.IO.File.ReadAllText(string.Format(@&quot;экс/{0}/{1}&quot;,...

Как правильно указать путь к файлу
Добрый вечер! Как правильно указать путь к файлу? При переходе с главной страницы на...

Как правильно указать путь к файлу?
Вопрос следующий: необходимо указать путь к файлу в такой строке: Icon ic=new...

11
Jodah
Эксперт PHP
3366 / 2845 / 1199
Регистрация: 01.08.2012
Сообщений: 9,859
26.12.2017, 13:45 2
Цитата Сообщение от useruser Посмотреть сообщение
Как сделать так, чтобы ... путь к main.css был всегда верным?
Указывайте / в начале ссылки, например /styles/style.css
0
useruser
82 / 77 / 35
Регистрация: 29.06.2015
Сообщений: 810
26.12.2017, 13:49  [ТС] 3
Цитата Сообщение от Jodah Посмотреть сообщение
Указывайте / в начале ссылки, например /styles/style.css
И что это даст? Поясните пожалуйста.
0
Phantom-84
290 / 243 / 64
Регистрация: 15.09.2017
Сообщений: 1,134
26.12.2017, 14:31 4
useruser, это тема для яслей, а новички - это уже детский сад.

Добавлено через 4 минуты
Цитата Сообщение от useruser Посмотреть сообщение
И что это даст? Поясните пожалуйста.
Не знаете разницу между относительным и абсолютным адресом?

Добавлено через 9 минут
Цитата Сообщение от useruser Посмотреть сообщение
Файл page_header.php Расположен по адресу /var/www/4/common/page_header.php
Тяжелый случай. Файл "расположен" по адресу /common/page_header.php.
0
26.12.2017, 14:31
useruser
82 / 77 / 35
Регистрация: 29.06.2015
Сообщений: 810
26.12.2017, 14:32  [ТС] 5
Цитата Сообщение от Phantom-84 Посмотреть сообщение
useruser, это тема для яслей, а новички - это уже детский сад.
Цитата Сообщение от useruser Посмотреть сообщение
На первый взгляд все кажется просто, но скорее всего это не так.
Я же написал. И не просто так подробно всё расписал. Вы не уловили суть?
Если уловили - не могли бы вы написать решение данной задачи. Можно кратко.

Цитата Сообщение от Phantom-84 Посмотреть сообщение
Тяжелый случай. Файл "расположен" по адресу /common/page_header.php.
Предположим (я не просто это пишу, для красоты). Так тоже будет работать.
Что с "внутренней" ссылкой на css делать будете? Как там формировать путь?
0
Jodah
Эксперт PHP
3366 / 2845 / 1199
Регистрация: 01.08.2012
Сообщений: 9,859
26.12.2017, 14:42 6
Цитата Сообщение от useruser Посмотреть сообщение
И что это даст? Поясните пожалуйста.
Когда вы пишете путь без слеша в начале, этот путь считается относительным и файл подключается относительно текущего URL. Путь со слешем - абсолютный, подключается относительно корня сайта.

Подробней тут: http://phpfaq.ru/newbie/paths
0
Phantom-84
290 / 243 / 64
Регистрация: 15.09.2017
Сообщений: 1,134
26.12.2017, 14:51 7
Цитата Сообщение от useruser Посмотреть сообщение
Вы не уловили суть?
Вы показали полное непонимание простых вещей. Не стал это комментировать, чтобы окончательно не втаптывать вас в грязь.

Цитата Сообщение от useruser Посмотреть сообщение
Как там формировать путь?
Зачем вам "внутренняя" ссылка? И что это вообще такое, местоположение/имя в файловой системе сервера? Вы же не содержимое файла стилей вставляете динамически в формируемую страницу. Вам адрес нужен. Уже сказали, как он должен выглядеть: /main.css.
0
otto-fukin
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
26.12.2017, 16:36 8
Это называется - каша в голове
Цитата Сообщение от useruser Посмотреть сообщение
Файл index.php Расположен по адресу /var/www/4/index.php
это не адрес, а полный путь к файлу.
Цитата Сообщение от useruser Посмотреть сообщение
<link rel="stylesheet" type="text/css" href="main.css"> //результат
Путь верен, файл main.css найден и подключен. Всё хорошо.
это не путь, это ссылка.
Ссылки это для браузера, а пути для скриптов на сервере.
Ссылки всегда указываются от корня сайта '/'. Относительные ссылки - зло.
Пути указываются от корня файловой системы сервера с использованием __DIR__ или __FILE__. Относительные пути - зло.
Используя относительные пути,ссылки - рискуете опять столкнуться с тем что файл не будет найден.
А опенсервер здесь вообще не причем
0
Vassia008
26.12.2017, 16:48
  #9

Не по теме:

Да это ладно, многие пишут полный путь к файлу вместе с доменом, например http://site.ru/css/css.css. Но это ладно, смешнее всего то, когда они пытаются переехать на другой домен :D

0
useruser
82 / 77 / 35
Регистрация: 29.06.2015
Сообщений: 810
26.12.2017, 17:54  [ТС] 10
Цитата Сообщение от Phantom-84 Посмотреть сообщение
чтобы окончательно не втаптывать вас в грязь
Спасибо. Наверно, схожу на стак.
PS
Ну не поняли и ладно. С другой стороны оно вам и не надо. Мне надо.
Тему можно закрывать. Автор, разумеется, "слился" (убежал с позором).
0
Jodah
Эксперт PHP
3366 / 2845 / 1199
Регистрация: 01.08.2012
Сообщений: 9,859
26.12.2017, 18:03 11
useruser, попробуйте ещё раз. В чём именно проблема? Я увидел только проблему с динамическим адресом css и по этому вопросу всё подробно расписали (хоть и с излишней, на мой взгляд, агрессией).
0
Phantom-84
290 / 243 / 64
Регистрация: 15.09.2017
Сообщений: 1,134
26.12.2017, 18:59 12
useruser, судя по всему, вам это надо меньше всего. Вы изначально нагнали эмоциональность в тему и продолжаете это делать, выбирая из множества ответов по существу то, что таковым не является. Правильный ответ был дан и несколько раз продублирован. Тему действительно можно закрывать.

Добавлено через 2 минуты
Vassia008, в этом есть свой смысл, но это вовсе не означает, что нужно всегда и везде так делать.

Добавлено через 6 минут
Цитата Сообщение от otto-fukin Посмотреть сообщение
Ссылки это для браузера, а пути для скриптов на сервере.
Это терминология. Часть адреса тоже часто называют путем.

Цитата Сообщение от otto-fukin Посмотреть сообщение
Относительные пути - зло.
Зависит от ситуации. Относительные пути компактнее. При работе с файловой системой эффективнее.

Добавлено через 10 минут
В плане адресации в тему: естественно, для файлов, относящихся к дизайну, нужно использовать абсолютные адреса, но вместе с ними, если вы в состоянии обеспечить отсутствие дублей, находящихся на других уровнях вложенности, на страницах со сложными адресами вполне уместно использовать относительные адреса - их проще/эффективнее строить, они компактнее, как уже писал.
0
26.12.2017, 18:59
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2017, 18:59

Как правильно указать относительный путь к файлу?
Если открываю файл с именем &quot;filename.ext&quot;, оно ищет &quot;\filename.ext&quot;. как ону указать, где искать?...

Как правильно указать путь к Word файлу?
Есть программа ,которая меняет текст в word файле на текст из textBox, но для этого нужно указывать...

Open with vs double click - путь к файлу
Проблема такова - если открывать файл пкм - открыть с помощью, все норм. А если прописать в реестре...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.