Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как узнать последнюю папку в урле?, поправьте пожалуйста
nikki4  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 1 месяц, 10 дней
Карма:




Создал такую регулярку, чтобы вытаскивать название папки

(.*)(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
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14980
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 4 дня
Карма: 444




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

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


Это сообщение отредактировал sergeiss - 15.01.2016 - 17:21


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

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

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

user posted image
PMICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 1 месяц, 10 дней
Карма:




Цитата (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

вот такую штуку пытаюсь сделать.
можно думаю через цикл, присвоить переименной количество слешей, и обратно так соединять, до названия папки.
но что-то мне подсказывает, что это громоздкое решение
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Медведь  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2482
Пользователь №: 37963
На форуме: 3 года, 4 месяца
Карма: 27




По регулярному выражению выдёргиваем перед последним слешем и производим замену нужным значением.

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


--------------------

Заходил 29.09.2016
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
xlebosol  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Знатный быдлокодер
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 337
Пользователь №: 32761
На форуме: 4 года, 5 месяцев, 21 день
Карма: 19




$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);
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14980
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 4 дня
Карма: 444




Цитата (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 тут не самое подходящее название для префиксов переменных, но уж не буду менять их.

Это сообщение отредактировал sergeiss - 15.01.2016 - 18:22


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

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

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

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 1 месяц, 10 дней
Карма:




После совета Медведя сделал регуляркой, вроде все ОК :)
$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;
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса