Предположим у нас есть два каталога setting config.php js jquery.js я хочу написать общую функцию подключения файлов, но есть вложенные каталоги , файлы в каталогах, посоветуй как мне лучше реализовать это
scandir, opendir, readdir + рекурсия вам в помощь. Но, лучше бы, на мой взгляд, вы рассказали о своей задаче, т.к. есть такое чувство, что вы идете по не очень хорошему пути и рискуете набить на нем много шишек в будущем
У меня есть файлы, один лежит в папке js, другой в основном каталоге, другие в папке settings Я хочу написать одну функцию, которая сможет require сделать в любой вложенности и любой файл подключить, Если что не понятно , пишите - отвечу
Нет. Это не цель. Это ваше решение какой то глобальной задачи. Прежде чем это делать поразмыслите над следующей информацией: 1. Каждый ли раз вам необходимо подключать все скрипты - не будет ли это напрасной тратой ресурсов 2. Если у вас подключаемые файлы ООП не правильнее ли задействовать механизмы автозагрузки 3. В вашем примере есть jquery.js что намекает, что там буду скрипты других вендоров. Рано или поздно вы придете к composer (или использованию git). И в этих каталогах могут оказаться дополнительные скрипты, которые не надо подключать на каждый чих. Подключение которых определяется программно в основном скрипте. (Простой пример, если не ошибаюсь, есть jqury плагин для маски ввода телефонов у него в комплекте скрипты для разных стран, их же не надо все подключть). 4. Та же история(что и п.3) php-скрипты. Там вообще может быть уже реализована автозагрузка или подключение
я понимаю, для этого я в функцию передаю массив имен , необходимых для подключения файлов, но не хочу передавать как "../../название.расширение" , хочу исключить "../../" Возможно ли это ?
допустим у меня есть подключение less <link rel="stylesheet/less" type="text/css" href="style.less"> <script type="text/javascript" src="javascript/less.js"></script> а если я подключаю её из папки user - тогда нужно, чтоб src был с "../" Возможно ли сделать так, чтоб я не использовал "../"
Перечитайте на досуге про подключение js файлов: Внешние скрипты, порядок исполнения Спойлер Ну и про порядок выполнения и отображение браузером информации, расположенной после подключения скрипта...
просто я подумал, что можно будет подключать библиотеки на разной вложенности страниц(в каталогах) одной функцией, но видно так сделать невозможно
Почему? Возможно. От корня просто всегда, на какой-бы странице не был. А ещё есть в html такая штуковина: http://htmlbook.ru/html/base --- Добавлено --- http://phpfaq.ru/newbie/paths - вот этого есть понимание?
это перечитал уже кучу раз PHP: function AddSelectedStandardLibraries($SelectedLibraries) { if ($SelectedLibraries['LESS'] == true) { // подключение LESS библиотеки и файла с кодом .less echo ' <link rel="stylesheet/less" type="text/css" href="style.less"> <script type="text/javascript" src="javascript/less.js"></script> '; } if ($SelectedLibraries['jQuery'] == true) { // подключение библиотеки jQuery echo ' <script type="text/javascript" src="javascript/jquery-3.2.1.js"></script> '; } } Вот функция, которую я вызываю на страницах для добавления мне необходимых библиотек, Если файл вложен в каталог - тогда мне необходимо проставить в пути "../", чтоб правильно подключить файл Возможно ли сделать это универсально для любого каталога ?
А говоришь, статью читал Код (Text): <script src="/js/jquery.js"></script> <link rel="stylesheet" href="/css/style.css"> --- Добавлено --- Вот же, нормальным русским языком написано:
C помощью $_SERVER['DOCUMENT_ROOT'] - получаю каталог размещения, потом добавляю необходимый файл и получаю абсолютный путь к файлу, но он не накидывает стиль на страницу <link href="/var/www/пользователь/data/www/мой _сайт.ru/style.css" rel="stylesheet"> Если я верно понимаю - то это html и он абсолютный путь не понимает ?
@ZlobnyKolob, нифига ты статью на phpfaq.ru не читал. А если читал, то нифига не понял. Скрипт подключает браузер, ему твой серверный путь до фени, он не имеет такого широкого доступа к твоему серверу. Путь должен быть от корня сайта, а не от корня файловой системы. Т.е. всё, до мой_сайт.ru включительно - лишнее, а вот обратную косую черту надо (если в корне лежит у тебя style.css
Статю я прочёл, но не понял, вот смотри, у меня файл с .css лежит на каталог выше, как мне его универсально вызвать?
Попробую я. Для решения твоей задачи ты должен уяснить несколько моментов: 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 . Т.е. контент у тебя в обоих случаях один и тот же. Но во втором случае ссылка будет уже не верна, т.к. она будет относительно уже другой точки (да еще и с попыткой выйти выше корня сайта) уфф. --- Добавлено --- А теперь к практике. Какой путь к этому файлу в файловой системе сервера? Какой путь к этому файлу в файловой системе сайта?
Чувак,начинай думать, а? Тебе уже два человека всё объяснили, @voral не поленился, ещё одну статью на тему написал. Всё равно, в какой папке твой html (или его генерирующий php), если ты будешь адрес стилей писать от корня сайта, он будет загружен. Просто начинай путь для стилей от корня сайта, всё, где бы ты ни был. Положим у тебя файл hello.php лежит в папке /var/www/твой.сайт/dir1/dir2/dir3/dir4/s.php. А стиль лежит в папке /var/www/твой.сайт/css/site.css. Просто в s.php пишешь: PHP: <!DOCTYPE html> <html> <head> <link href="/css/site.css"> </head> <body> <?php echo 2+2; ?> </body> </html> И всё подключится, потому что браузер пошлёт запрос на сервер для site.css от корня сайта, а не из папки. А если обратную косую черту в начале адреса стилей убрать, то всё, ничего не подключится, потому что тогда браузер будет запрашивать относительно текущей папки.