Как программно префиксить URL изображения с помощью PHP?

Я работаю с PHP и API на основе JSON, который возвращает 2 поля со значениями для фотографий свойств:

  1. PHOTO_URL
  2. 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 изображений, которые изменяются для каждого свойства:

  1. Каталог 4-го уровня, в котором указан идентификатор свойства (в приведенном выше примере - 102)
  2. Само имя файла, которое состоит максимум из 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. $ конец строки

Regex demo

<?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. Я просто использовал здесь его код.

Другие вопросы по тегам