За последние 24 часа нас посетили 11105 программистов и 836 роботов. Сейчас ищут 330 программистов ...

Подключение файлов из папок

Тема в разделе "PHP для новичков", создана пользователем ZlobnyKolob, 11 дек 2017.

  1. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Предположим у нас есть два каталога
    setting
    config.php
    js
    jquery.js

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

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    scandir, opendir, readdir + рекурсия вам в помощь.

    Но, лучше бы, на мой взгляд, вы рассказали о своей задаче, т.к. есть такое чувство, что вы идете по не очень хорошему пути и рискуете набить на нем много шишек в будущем
     
  3. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    У меня есть файлы, один лежит в папке js, другой в основном каталоге, другие в папке settings
    Я хочу написать одну функцию, которая сможет require сделать в любой вложенности и любой файл подключить,
    Если что не понятно , пишите - отвечу
     
  4. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    Нет. Это не цель. Это ваше решение какой то глобальной задачи. Прежде чем это делать поразмыслите над следующей информацией:
    1. Каждый ли раз вам необходимо подключать все скрипты - не будет ли это напрасной тратой ресурсов
    2. Если у вас подключаемые файлы ООП не правильнее ли задействовать механизмы автозагрузки
    3. В вашем примере есть jquery.js что намекает, что там буду скрипты других вендоров. Рано или поздно вы придете к composer (или использованию git). И в этих каталогах могут оказаться дополнительные скрипты, которые не надо подключать на каждый чих. Подключение которых определяется программно в основном скрипте. (Простой пример, если не ошибаюсь, есть jqury плагин для маски ввода телефонов у него в комплекте скрипты для разных стран, их же не надо все подключть).
    4. Та же история(что и п.3) php-скрипты. Там вообще может быть уже реализована автозагрузка или подключение
     
  5. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    я понимаю, для этого я в функцию передаю массив имен , необходимых для подключения файлов, но не хочу передавать как "../../название.расширение" , хочу исключить "../../"
    Возможно ли это ?
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.128
    Симпатии:
    1.638
    Для классов - autoloader, js-файлы - а нахрена тебе их делать require? Они же js :)
     
  7. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    допустим у меня есть подключение
    less
    <link rel="stylesheet/less" type="text/css" href="style.less">
    <script type="text/javascript" src="javascript/less.js"></script>

    а если я подключаю её из папки user - тогда нужно, чтоб src был с "../"
    Возможно ли сделать так, чтоб я не использовал "../"
     
  8. Sail

    Sail Активный пользователь

    С нами с:
    1 ноя 2016
    Сообщения:
    1.402
    Симпатии:
    312
    Перечитайте на досуге про подключение js файлов: Внешние скрипты, порядок исполнения
    Ну и про порядок выполнения и отображение браузером информации, расположенной после подключения скрипта...
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.128
    Симпатии:
    1.638
    Я всегда в скриптах пишу от корня. А вообще, это же базовые знания html
     
  10. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    просто я подумал, что можно будет подключать библиотеки на разной вложенности страниц(в каталогах) одной функцией, но видно так сделать невозможно
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.128
    Симпатии:
    1.638
    Почему? Возможно. От корня просто всегда, на какой-бы странице не был. А ещё есть в html такая штуковина: http://htmlbook.ru/html/base
    --- Добавлено ---
    http://phpfaq.ru/newbie/paths - вот этого есть понимание?
     
  12. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    это перечитал уже кучу раз

    PHP:
    1.     function AddSelectedStandardLibraries($SelectedLibraries) {
    2.     if ($SelectedLibraries['LESS'] == true)  
    3.     {
    4.         // подключение LESS библиотеки и файла с кодом .less
    5.         echo
    6.         '
    7.            <link rel="stylesheet/less" type="text/css" href="style.less">
    8.            <script type="text/javascript" src="javascript/less.js"></script>
    9.        ';
    10.     }
    11.     if ($SelectedLibraries['jQuery'] == true)
    12.     {
    13.         // подключение библиотеки jQuery
    14.         echo
    15.         '
    16.            <script type="text/javascript" src="javascript/jquery-3.2.1.js"></script>
    17.        ';
    18.     }
    19. }
    Вот функция, которую я вызываю на страницах для добавления мне необходимых библиотек,
    Если файл вложен в каталог - тогда мне необходимо проставить в пути "../", чтоб правильно подключить файл
    Возможно ли сделать это универсально для любого каталога ?
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.128
    Симпатии:
    1.638
    Сколько раз ещё тебе ответить? Подключай скрипты и стили от корня сайта, и будет тебе счастье
     
  14. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    можно хоть один твой пример, спасибо
     
  15. vaajnur

    vaajnur Новичок

    С нами с:
    15 май 2017
    Сообщения:
    40
    Симпатии:
    3
    рекурсивно проверяй на is_dir()
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.128
    Симпатии:
    1.638
    А говоришь, статью читал
    Код (Text):
    1.  
    2. <script src="/js/jquery.js"></script>
    3. <link rel="stylesheet" href="/css/style.css">
    --- Добавлено ---
    Вот же, нормальным русским языком написано:
     
  17. vaajnur

    vaajnur Новичок

    С нами с:
    15 май 2017
    Сообщения:
    40
    Симпатии:
    3
  18. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    C помощью
    $_SERVER['DOCUMENT_ROOT'] - получаю каталог размещения,
    потом добавляю необходимый файл и получаю абсолютный путь к файлу, но он не накидывает стиль на страницу
    <link href="/var/www/пользователь/data/www/мой _сайт.ru/style.css" rel="stylesheet">

    Если я верно понимаю - то это html и он абсолютный путь не понимает ?
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.128
    Симпатии:
    1.638
    @ZlobnyKolob, нифига ты статью на phpfaq.ru не читал. А если читал, то нифига не понял. Скрипт подключает браузер, ему твой серверный путь до фени, он не имеет такого широкого доступа к твоему серверу. Путь должен быть от корня сайта, а не от корня файловой системы. Т.е. всё, до мой_сайт.ru включительно - лишнее, а вот обратную косую черту надо (если в корне лежит у тебя style.css
     
  20. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Статю я прочёл, но не понял, вот смотри, у меня файл с .css лежит на каталог выше, как мне его универсально вызвать?
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.128
    Симпатии:
    1.638
    Я сдаюсь, мне к тому, что я уже написал и что написано в статье добавить нечего.
     
  22. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    Попробую я. Для решения твоей задачи ты должен уяснить несколько моментов:
    1. В любой файловой системе пути к файлам и каталогам могут быть относительные и полные. Полный путь отсчитывается от самого начала файловой системы. Например windows С:\SitesDir\FirstSite\www\index.php, в линукс и макос /SiteDir/FirstSite/www/index.php. Относительные пути указываются относительно чего либо. Например ты вошел в каталог файловым менеджером (Проводник, TotalCommander и т.п.) вот относительно этой точки и можно указать путь. При запуске скриптов, пути могут (если упрощено, т.к. могут быть нюансы) относительно каталога из которого запущен скрипт. (нюансы - не замораивайся пока)

    2. В сфере вебдевелоперства можно оперировать двумя точками отсчета. Это корень файловой системы и корень сайта. И вот тут внимательно! PHP скрипты (они выполняются на сервере) работают со всей файловой системой сервера, и их ограничивают только права доступа пользователя от имени которого работает веб сервер. Если администратор идиот и веб сервер работает от имени root (Суперадминистратор) - то php скрипт может изменить/удалить вообще любой файл системы... Т.е. чтобы обратиться из любого файла сайта к скрипту что примере выше по полному пути то надо указать /SiteDir/FirstSite/www/index.php. Другое дело если обратится к этому же файлу из браузера (html или JS). Тогда корень уже от корня сайта. т.е. полный путь этого файла (без домена) /index.php и все.

    Теперь относительные. Для скриптов на сервере:
    - если скрипт лежит в /SiteDir/FirstSite/ он может обратится к нашему www/index.php или ./www/index.php (точка в начале)
    - если скрипт лежит в /SiteDir/ он может обратится к нашему FirstSite/www/index.php или ./FirstSite/www/index.php (точка в начале)
    - если скрипт лежит в /SiteDir/FirstSite/www/section/ он может обратится к нашему ../index.php (две точки в начале)
    - если скрипт лежит в /SiteDir/FirstSite/www/section/foo/ он может обратится к нашему ../../index.php
    - если скрипт лежит в /SiteDir/SecondSite/www/section/foo/ он может обратится к нашему ../../../FirstSite/www/index.php

    Для браузера (html,css,js)
    - если скрипт открыта страница /section/ он может обратится к нашему ../index.php (две точки в начале)
    - если скрипт открыта страница /section/foo/ он может обратится к нашему ../../index.php
    Если файл лежит выше чем корень сайта - к нему вообще нельзя обратиться


    Предположим такую структуру (от корня сайта)
    /css/style.css
    /html/test1.html
    test.php
    .
    Итак начинаем думать. У тебя два варианта:
    1. Полный путь от корня сайта т.е. всегда /css/styles.css (хотя в файовой системе сервера полный путь к нему, например, /var/www/css/styles.css)
    2.Относительный. И тут важно понимать что отсчет идет оттуда откуда открыто в браузере.
    http://yoursite/html/test1.html то можно ../css/style.css, но если у тебя test.php считывает test1.html и выводит его. Т.е. в адресной строке браузера http://yoursite/test1.php . Т.е. контент у тебя в обоих случаях один и тот же. Но во втором случае ссылка будет уже не верна, т.к. она будет относительно уже другой точки (да еще и с попыткой выйти выше корня сайта)

    уфф.
    --- Добавлено ---
    А теперь к практике.
    Какой путь к этому файлу в файловой системе сервера?
    Какой путь к этому файлу в файловой системе сайта?
     
    ZlobnyKolob и karmay нравится это.
  23. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Это полный путь начиная с С: и так далее до корня сайта и дальше
    От корня сайта
     
  24. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Получается в браузере я никак не смогу отказаться от использования "../" ?
     
  25. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.128
    Симпатии:
    1.638
    Чувак,начинай думать, а? Тебе уже два человека всё объяснили, @voral не поленился, ещё одну статью на тему написал. Всё равно, в какой папке твой html (или его генерирующий php), если ты будешь адрес стилей писать от корня сайта, он будет загружен. Просто начинай путь для стилей от корня сайта, всё, где бы ты ни был.

    Положим у тебя файл hello.php лежит в папке /var/www/твой.сайт/dir1/dir2/dir3/dir4/s.php. А стиль лежит в папке /var/www/твой.сайт/css/site.css. Просто в s.php пишешь:
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <link href="/css/site.css">
    5. </head>
    6. <body>
    7. <?php echo 2+2; ?>
    8. </body>
    9. </html>
    И всё подключится, потому что браузер пошлёт запрос на сервер для site.css от корня сайта, а не из папки. А если обратную косую черту в начале адреса стилей убрать, то всё, ничего не подключится, потому что тогда браузер будет запрашивать относительно текущей папки.