Как программно получить РЕАЛЬНЫЙ URL / Путь изображения? - PullRequest
1 голос
/ 28 февраля 2009

Чтобы уточнить заглавный вопрос, у меня есть такой код:

<img src='gallery/main.php?g2_view=core.DownloadItem&g2_itemId=8161&g2_serialNumber=2&g2_GALLERYSID=5b24df90ee45f0e01795a3c01a1d634b'>

с файлом, фактически находящимся в файловой системе под моим webroot. Есть ли какой-либо способ в PHP, чтобы получить реальный путь к изображениям, например:

<img src='images/gallery/album1/file1.jpg'>

Например, someFunction ( longURL ) ==> images / gallery / album1 / file1.jpg

Спасибо,

Ответы [ 6 ]

4 голосов
/ 28 февраля 2009

Учитывая этот URL, довольно легко понять, что он использует g2_itemId=8161, что означает, что он, вероятно, получает путь к изображению из базы данных.

Учитывая эту логику, вы можете запросить базу данных и получить нужный путь программным путем.

function someFunction($id) {
   // select path_name from g2_items where item_id = $id;
}
someFunction("8161");
3 голосов
/ 02 марта 2009

Я совершенно уверен, что у Gallery2 (которую вы, очевидно, используете) есть внутренний метод для этого - по крайней мере, он делает это в каком-то месте. Вам нужно будет найти этот фрагмент кода и использовать его напрямую (например, статический метод) или абстрагировать его оттуда.

Возможно, вы захотите задать вопрос на форумах Gallery2 - возможно, там уже был дан ответ.

Используя Google Codesearch, я обнаружил, что main.php, похоже, уже содержит код для этого:

$path = GalleryDataCache::getCachePath(
    array('type' => 'fast-download', 'itemId' => $itemId));

$path представляется файлом, который, если он включен, может содержать переменные, которые вам понадобятся.

1 голос
/ 03 мая 2009

Вот способ сделать это с помощью API Gallery2. Я написал это как вспомогательную функцию.

function get_g2_path($id) {
  include("embed.php");
  GalleryEmbed::init();
  list ($ret, $photo) = GalleryCoreApi::loadEntitiesById($id);
  if ($ret) { return null; }
  list ($ret, $path) = $photo->fetchPath();
  if ($ret) { return null; }
  return $path;
}

// Here's an example of how you'd call it:
print get_g2_path(8161);

Некоторые заметки:

  1. Вы должны предоставить право путь к файлу embed.php, который поставляется с Gallery2
  2. ты хочешь только позвонить GalleryEmbed :: init () один раз за запрос, так что если вы хотите позвонить дважды, переместите первые два строки функции где-то еще
  3. Вы, вероятно, хотите что-то сделать чуть более вменяемый с ошибкой обработка
0 голосов
/ 04 марта 2009

при условии, что это просто использует перенаправления «Location», тогда вы сможете использовать следующую функцию, чтобы сделать это для вас

function resolve_url($url)
{
    $location = $url;
    $lastlocation = '';

    while ($location != $lastlocation)
    {
        $lastlocation = $location;
        $context = stream_context_create(
            array(
                'method' => 'GET'
            )
        );

        $metadata = stream_get_meta_data(fopen($location, 'rb', false, $context));

        $headers = $metadata['wrapper_data'];

        foreach($headers AS $header)
        {
            if (preg_match("^Location: (.*)", $header, $parts))
            {
                $location = $parts[1];
            }
        }
    }

    return $location;
}
0 голосов
/ 04 марта 2009

Если вы просто хотите изменить URL-адрес img src, вы можете использовать модуль перезаписи и перезаписать

галереи2
<img src='gallery/main.php?g2_view=core.DownloadItem&g2_itemId=8161&g2_serialNumber=2'>

до

<img src='images/gallery/album1/file1.jpg'>
0 голосов
/ 28 февраля 2009

Ну, очевидно, в main.php параметры запроса разрешены в реальный путь. Просто делать то, что вы там делаете?

Если вам нужна помощь, опубликуйте код main.php, и я помогу вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...