[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как узнать последнюю папку в урле?
nikki4
Создал такую регулярку, чтобы вытаскивать название папки

(.*)(images)(\/)(.*)(\/)(\d+)([.][jJ][Pp][Gg])


/home/admin/web/sait.ru/public_html/images/nazvanie-papki/1.JPG
выведет nazvanie-papki

но потом обнаружил, что могут быть и вложенные папки, например
/home/admin/web/sait.ru/public_html/images/podkategoriya/nazvanie-papki/1.JPG

Как узнать название nazvanie-papki,
что дописать тут, пробовал всякое чет не получается.
т.е. по логике - первое название от конца между слешами

https://regex101.com/r/lK4nL9/2
sergeiss
Через explode() сделать, мне так сдается, будет куда как проще и понятнее: разбил на части по слэшу и взял предпоследний кусок.
Типа такого (надо еще проверку добавить, что действительно распарсилось и что там есть данные):

$url_parts = explode( '/', $url);
$dir = $url_parts[ count($url_parts) - 2 ];


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
nikki4
Цитата (sergeiss @ 15.01.2016 - 13:19)
Через explode() сделать, мне так сдается, будет куда как проще и понятнее: разбил на части по слэшу и взял предпоследний кусок.
Типа такого (надо еще проверку добавить, что действительно распарсилось и что там есть данные):

$url_parts = explode( '/', $url);
$dir = $url_parts[ count($url_parts) - 2 ];

а как потом следует вернуть?
это для переименования пути.
на входе:
/home/admin/web/sait.ru/public_html/images/nazvanie-papki/1.JPG
на выходе
/home/admin/web/sait.ru/public_html/images/nazvanie-papki/nazvanie-papki-1.JPG

вот такую штуку пытаюсь сделать.
можно думаю через цикл, присвоить переименной количество слешей, и обратно так соединять, до названия папки.
но что-то мне подсказывает, что это громоздкое решение
Миша
По регулярному выражению выдёргиваем перед последним слешем и производим замену нужным значением.

P.S. Точнее между последними двумя слешами.

_____________
Принимаю заказы, писать в ЛС
xlebosol
$path = pathinfo('/home/admin/web/sait.ru/public_html/images/nazvanie-papki/1.JPG');
$parts = explode('/', $path['dirname']);
$dir = array_pop($parts);
var_dump($dir);
sergeiss
Цитата (nikki4 @ 15.01.2016 - 17:55)
можно думаю через цикл, присвоить переименной количество слешей, и обратно так соединять, до названия папки.
но что-то мне подсказывает, что это громоздкое решение

Ну делай через регулярки или циклы, ежели так хочется :) А я бы примерно так сделал (код не самый оптимальный, но должен работать), с использованием максимально подходящих для этого функций, а не циклов:
$url_parts = explode( '/', $url);
$parts = count($url_parts);
// каталог - предпоследний элемент массива
$dir = $url_parts[ $parts - 2 ];
// заменяем имя файла - последний элемент массива
// цифру и расширение файла надо определить до выполнения следующей строки

$url_parts[ $parts - 1 ] = $dir . '_1.jpg';
$new_url = implode( '/', $url_parts);


Медведь, ты код-то напиши этого самого "выдергивания регуляркой и вставки". А то так сказать всякий может, как ты написал.

PS. $url тут не самое подходящее название для префиксов переменных, но уж не буду менять их.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
nikki4
После совета Медведя сделал регуляркой, вроде все ОК :)
$url_parts = explode( '/', $article->filepath);

$newfilename=mb_strtolower($url_parts[count($url_parts) - 2].'-'.$url_parts[count($url_parts) - 1]);

$newname=preg_replace('/(.*)(\/)(\d+)([.][jJ][Pp][Gg])/u',"$1$2",$article->filepath).$newfilename;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.