Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072

Нагромождение параметров в адресной строке

10.01.2017, 15:15. Показов 1628. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Организовал такой простенький файловый проводник

PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
error_reporting(-1);
$dir  = dirname(__FILE__);
$ref = (isset($_GET['aim'])) ? scandir($_GET['aim']) : scandir('.');
for ($i = 1; $i < count($ref); $i++) {
  if (is_dir($dir.'/'.(!isset($_GET['aim'])? '' : $_GET['aim']).'/'.$ref[$i])) {
    echo '<a href="index.php?aim='.(isset($_GET['aim']) ? $_GET['aim'].'/'.$ref[$i] : $ref[$i]).'">'.$ref[$i].'</a>'.'<br>';
  }
  else echo $ref[$i].'<br>';
}
echo '<a href="index.php">Back</a>';
?>
При многочисленных переходах по директориям, в адресной строке образуется такой бардак:
PHP
1
http://far.local/index.php?aim=../../far.local/www/xxx/gtr/../../../www/xxx/gtr/../../../../test.local/www
Это же наверное не очень правильно?
В таком примитивном варианте проводника стоит ли озаботиться этим вопросом?
Он вообще имеет несложную реализацию в рамках используемых средств в скрипте, или для этого нужен принципиально другой подход организации проводника?

И какие вообще в целом недостатки скрипта?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.01.2017, 15:15
Ответы с готовыми решениями:

Передача параметров в адресной строке
Очередной тупик... &lt;?php error_reporting(-1); $ref = (isset($_GET)) ? scandir($_GET) : scandir('.'); for ($i = 0; $i &lt;...

Логин пользователей в адресной строке вместо параметров
Здравствуйте. Не уверен что правильно сформулировал название темы, но задача такая. Есть зарегистрированные пользователи. У каждого есть...

Передача параметров в контроллер из адресной строки
Я пытаюсь сделать ленту новостей. у меня есть в контроллере функция(action) генерирует страницы новостей action_News($page) параметр номер...

13
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
10.01.2017, 16:17
Цитата Сообщение от СергейСереб Посмотреть сообщение
Это же наверное не очень правильно?
Да и не красиво
Цитата Сообщение от СергейСереб Посмотреть сообщение
В таком примитивном варианте проводника стоит ли озаботиться этим вопросом?
Почему нет, если можно сделать лучше?
Цитата Сообщение от СергейСереб Посмотреть сообщение
И какие вообще в целом недостатки скрипта?
Ты даешь доступ ко всей системе. Ты не проверяешь дерикторию, которую юзер всунет в параметр. Параметр бесконечно склеивается и становится все больше.
1
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
10.01.2017, 16:47  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
Ты даешь доступ ко всей системе. Ты не проверяешь дерикторию, которую юзер всунет в параметр.
Вопросы безопасности - понял. Думаю можно организовать массив разрешенных параметров а вдресной строке и поверять их в начале работы скрипта.

Цитата Сообщение от crautcher Посмотреть сообщение
Параметр бесконечно склеивается и становится все больше.
Для этого есть какие-то специальный ф-ции в php или все ручками организовывается?

Спасибо. Пока подумаю.
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
10.01.2017, 17:17
Цитата Сообщение от СергейСереб Посмотреть сообщение
Для этого есть какие-то специальный ф-ции в php или все ручками организовывается?
Посмотри http://php.net/manual/ru/function.realpath.php
0
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
10.01.2017, 22:35  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
Крутил и так и этак...
У меня везде путь содержится в переменных, а именно часть адреса, в которой параметры - преобразуется в полный путь от корня диска, если применить эту функцию...
0
Заблокирован
11.01.2017, 08:54
кстати в php есть функция http_build_query
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,229
11.01.2017, 22:14
зачем вообще через GET передавать название диры с диска, что за новшество не знаете?
0
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
11.01.2017, 23:38  [ТС]
Цитата Сообщение от полудух Посмотреть сообщение
зачем вообще через GET передавать название диры с диска, что за новшество не знаете?
Расскажите нам всем пожалуйста, чем это так ужасно и какой способ Вы считаете наилучшим для реализации задачи.
Вопрос по приведению адресной строки в порядок в контексте использованных инструментов остается открытым.
Цитата Сообщение от opupenny Посмотреть сообщение
кстати в php есть функция http_build_query
Есть еще варианты?
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
12.01.2017, 14:03
Когда-то делал файловый менеджер. Конечно так будет не красиво. При переходе к родительскому каталогу надо не к пути прибавлять "../", а вырезать имя папки.
Например имеем путь в переменной: "/files/etc/bla_bla"
При переходе на уровень выше нужно всего лишь удалить все, что находится после последнего слеша вместе с оным, чтобы получилось так: "/files/etc".
Далее, зачем начинать путь с "../../" ? Определите внутри кода константу, которая будет содержать часть пути, а именно корневую папку которую выберете. От клиента принимайте только путь относительно этого корня.
И еще. Запрещайте доступ выше корневой папки. Для безопасности. Ну и для всех файлов внутри корня должны автоматически выставлятся корректные права доступа. Обязательно запретите исполнение файлов. Разрешите только чтение/запись.
1
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
12.01.2017, 14:21
А я когда писал, полностью убрал все ссылки, начинающиеся с точки. Для перехода вверх оставил одни хлебные крошки – пока никто не жаловался. Ссылки лучше использовать нативные, без всяких GET-параметров.

Добавлено через 3 минуты
...Параметр использовал для выполнения сортировки на стороне сервера.
1
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
12.01.2017, 15:37
Как это красивее оформить и не держать путь в адресе? Текущую дерикторию можно держать в сессии. Чтобы она также не росла бесконечно, держим полный путь realpath(). В адресе передаем только добавочную часть, куда переходим.

Code
1
/index.php?aim=../../far.local/www/xxx/gtr/../../../www/xxx/gtr/../../../../test.local/www
Линк делаем
aim=www

Это бороду
"../../far.local/www/xxx/gtr/../../../www/xxx/gtr/../../../../test.local/"
Парсим в полный путь и кладем в сессию
1
Заблокирован
12.01.2017, 17:01
Цитата Сообщение от СергейСереб Посмотреть сообщение
Есть еще варианты?
тыж не пробовал. Попробуй. Потом варианты обсудим
0
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
12.01.2017, 21:00  [ТС]
Пока думаю над адресной строкой.
Все спасибо за варианты.

Добавлено через 1 час 19 минут
Цитата Сообщение от Зверушь Посмотреть сообщение
нужно всего лишь удалить все, что находится после последнего слеша вместе с оным
Вот это гуглил, не нашел с помощью чего можно сделать. Намекните немного...

Цитата Сообщение от crautcher Посмотреть сообщение
кладем в сессию
Хочу сделать вариант без сессий пока что.
Я организовал отображение динамического пути как в ФАРе например в верху панели. Но это путь на диске, а мне еще нужно URL... Не умею еще работать с URL
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
12.01.2017, 21:32
Цитата Сообщение от СергейСереб Посмотреть сообщение
не нашел с помощью чего можно сделать
strrchr находит последнее совпадение символа. По нему находите последний слеш, ну а дальше substr.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.01.2017, 21:32
Помогаю со студенческими работами здесь

Передача параметров в функцию на PHP из адресной строки, как в CodeIgniter
Я получаю массив значений из адресной строки, в виде: array('blog', 'article', '1') я перехожу к третьему элементу у меня...

Звездочки в адресной строке
В адресе страницы необходимо передать короткую фразу на латинице. Для этого я заменил пробелы на три звездочки, идущие подряд. Получился...

Переменные в адресной строке
Здравствуйте! При использовании навигации по сайте я отталкиваюсь от переменной page в адресной строке браузера. Выглядит так...

Параметр в адресной строке
Всем доброго времени суток! отсылка: знаний в JS нуль. Передаю параметр через адресную строку mysite.html?sum=100 пытаюсь...

ID сессии в адресной строке
Как и при каких обстоятельствах ИД сессии может попасть в адресную строку или в переменную $_SERVER? Весь код перелопатил ничего не...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru