Как программно префиксить URL изображения с помощью PHP?
Я работаю с PHP и API на основе JSON, который возвращает 2 поля со значениями для фотографий свойств:
- PHOTO_URL
- has_large
Photo_url - это URL фотографии обычного размера.
Пример: https://secure.example.org/Directory/AnotherDirectory/0008/102/12.jpg
Если has_large = true, то мы знаем, что большая фотография существует, но API не возвращает определенный URL.
Однако из документации API мы знаем, что, если мы добавим префикс "L" к имени файла изображения, это даст нам правильный URL-адрес большого изображения:
Пример: https://secure.example.org/Directory/AnotherDirectory/0008/102/L12.jpg
Как я могу программно префиксить имена файлов буквой L, прежде чем записывать их в базу данных (MySQL)?
Примечание. Структура URL практически одинакова для всех фотографий.
Единственные части URL изображений, которые изменяются для каждого свойства:
- Каталог 4-го уровня, в котором указан идентификатор свойства (в приведенном выше примере - 102)
- Само имя файла, которое состоит максимум из 3 цифр (в приведенном выше примере URL - 12.jpg).
После нескольких часов исследований RegEx, preg_replace() и поиска аналогичных решений в Stackru, я все еще не уверен, как сделать это правильно с помощью PHP.
Любая помощь будет оценена. Заранее спасибо.
2 ответа
Кажется, вам нужно только добавить имя файла (без пути) с L
, Имя файла без пути - это не что иное, как /
в конце строки, которая в регулярном выражении выглядит ([^\/]+)$
, Поэтому желаемая функция замены:
$large_photo_url = preg_replace('/([^\/]+)$/', 'L$1', $photo_url);
Здесь мы используем explode
функция, чтобы split
строка на /
а затем добавление L
в самом конце значение этого массива.
Решение 1:
Попробуйте этот фрагмент кода здесь
<?php
$link="https://secure.example.org/Directory/AnotherDirectory/0008/102/12.jpg";
$portions=explode("/",$link);
$portions[count($portions)-1]="L".$portions[count($portions)-1];
print_r(implode("/", $portions));
Решение 2:
Regex: ([^\/]+)$
1.
([^\/]+)
соответствовать всем до/
(не включая это), здесь круг()
фигурные скобки будут захватывать первый захваченный результат в$1
,2.
$
конец строки
<?php
$link="https://secure.example.org/Directory/AnotherDirectory/0008/102/12.jpg";
echo preg_replace("/([^\/]+)$/", 'L$1', $link);
В моем случае... Я использую эту функцию для получения обновленного URL-адреса изображения.
function thumb_url($image_url=''){
$prefix = 'thumb';
$photo_url = preg_replace('/([^\/]+)$/', "{$prefix}$1", $image_url);
return $photo_url;
}
кредит принадлежит @Dmitry. Я просто использовал здесь его код.