为了澄清标题问题,我有以下代码:
<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 )==&gt;图像/画廊/ album1 / file1.jpg
谢谢,
答案 0 :(得分:4)
鉴于url,很容易理解它正在使用g2_itemId=8161
,这意味着它可能从数据库中获取图像的路径。
考虑到这一逻辑,您可以查询数据库并以编程方式获取所需的路径。
function someFunction($id) {
// select path_name from g2_items where item_id = $id;
}
someFunction("8161");
答案 1 :(得分:3)
我很确定,Gallery2(你显然正在使用)有一个内部方法 - 至少它会在某个地方解决这个问题。 你必须找到那段代码并且可以直接使用它(如果它是静态方法)或从那里抽象它。
您可能想在Gallery2论坛上提问 - 它甚至可能已在那里得到答案。
使用Google Codesearch,我发现main.php似乎已经有了代码来执行此操作:
$path = GalleryDataCache::getCachePath(
array('type' => 'fast-download', 'itemId' => $itemId));
$path
似乎是一个文件,当包含该文件时,可能会提供您需要的变量。
答案 2 :(得分:1)
以下是使用Gallery2 API执行此操作的方法。我把它写成便利功能。
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);
一些注意事项:
答案 3 :(得分:0)
很明显,在main.php中,查询参数被解析为真实路径。做你在做什么吗?
如果您需要一些帮助,请发布一些main.php代码,我会帮您解决。
答案 4 :(得分:0)
如果您只想更改img src网址,可以使用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'>
答案 5 :(得分:0)
假设这只是使用“位置”重定向,那么您应该能够使用以下函数为您执行此操作
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;
}