2009-02-28 3 views
1

Для уточнения заголовка вопроса, у меня есть код, такие как:Как я могу программно получить REAL URL/путь изображения?

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

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

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

Eg SomeFunction (longURL) ==> Изображения/галерея/album1/file1.jpg

Спасибо,

+0

нужен ли вам путь, или на самом деле само изображение? – cdonner

+0

Какой скрипт вы используете? – Garrett

+0

Я показываю изображения в собственном сценарии, но сценарий Gallery - это тот, который управляет изображениями. Они существуют в файловой системе, но отображаются через такие ссылки, как те, которые я опубликовал. Я ищу, чтобы получить реальный путь от длинного. – barfoon

ответ

3

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

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

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

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

$path, как представляется, файл, который при включении обеспечивает возможно, ВАР вас» Мне нужно.

0

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

Если вам нужна помощь, разместите часть кода main.php, и я дам вам руку.

+0

Я действительно пробовал это - код в Галерее очень абстрагирован и сложный. Просто задавался вопросом, существует ли более простой способ разрешить путь. – barfoon

4

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

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

function someFunction($id) { 
    // select path_name from g2_items where item_id = $id; 
} 
someFunction("8161"); 
+0

Хороший выбор, особенно учитывая галерею SID. (Я не смотрел достаточно близко и думал, что 8161 может привести к file8161.jpg или что-то еще). –

+0

path_name не хранится в базе данных как одна строка. Он создан из множества кусков пути. Его все фрагментировано и действительно запутывает (эксперты галереи там - ПОЧЕМУ ?!). Я бы просто попросил об этом, если бы знал, что он сидит там в базе данных. – barfoon

+0

barfoon, можете ли вы отправить мне по электронной почте файл main.php при моем имени @ hotmail.com? Трудно диагностировать это без какого-либо кода :-) –

0

, если вы просто хотите изменить IMG SRC URL, вы можете использовать gallery2-х rewrite module и переписать

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

в

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

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

1

Вот как это сделать используя 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. вы должны обеспечить правильный путь к врезать.файл PHP, который поставляется с Gallery2
  2. вы хотите только позвонить GalleryEmbed :: Init() один раз в запроса, так что если вы хотите, чтобы вызвать эту функцию дважды переместите первые две линии функции где-то еще
  3. вы, вероятно, хотите сделать что-то чуть более вменяемое с ошибкой обработкой
+0

Это идеальное решение - большое спасибо. Если бы я мог вознаградить вас за щедрость сейчас, я бы хотел. – barfoon

+0

Другое отслеживание - это возвращает путь, иногда, когда он находится в кеше. Эти кешированные изображения иногда представляют собой небольшие миниатюры. Есть ли способ получить путь к полноразмерному изображению? – barfoon

+1

Несомненно. В этом случае вам просто нужно отследить назад из кэшированного изображения (которое называется производным) в его исходный код. Вот код для этого: include ("embed.php"); GalleryEmbed :: init(); function get_g2_path ($ id) { list ($ ret, $ entity) = GalleryCoreApi :: loadEntitiesById ($ id); if ($ ret) {return null; } switch ($ entity-> getClassName()) { case "GalleryDerivativeImage": return get_g2_path ($ entity-> getDerivativeSourceId()); break; case "GalleryPhotoItem": list ($ ret, $ path) = $ entity-> fetchPath(); if ($ ret) {return null; } return $ path; } } – bharat

Смежные вопросы