可能我问错了问题,我只是不知道如何更具体地定义它,很抱歉。
我想创建如下链接(img标签中的src):"bla-bla.com/7e0cfd63-dfc1-4038-a859-ff201dea7b65"并且能够将其"解码"回来。
原因>
我的链接(img标签中的src)现在看起来像"myDomain/somefolder/image1.jpg",所以如果用户将"image1.jpg"更改为"image2.jpg",他将获得"直接访问"(我认为它是这样调用的)。
所以我想阻止"直接访问",但仍然可以共享链接。
可能是我把这个问题复杂化了,还有另一种简单的方法,或者这个工作的一些php扩展,请告诉我。
服务器:赢得2012 r2Apache+php5+MySQL
p.S.
"7e0cfd63-dfc1-4038-a859-ff201dea7b65"-这是一个UUID,对吧?我在youtube视频链接中看到了它。
谷歌搜索给出了很多关于UUID/GGUID脚本/技术/它的工作原理等的结果,但我找不到链接的实现。。。
p.p.S
如果你在stackoverflow上查看我的个人资料图片:
https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0f?s=48&d=标识图标&r=PG&f=1
将f更改为d,您将获得不同的图像
https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0d?s=48&d=标识图标&r=PG&f=1
这是我不想发生的事。
我建议使用:
mod_rewrite
- 解码php脚本和
- 将UUID映射到路径的数据库
mod_rewrite
您可以使用它将所有与fake文件夹匹配的URL重定向到解码脚本。将假文件夹命名为imgs
,apache配置看起来像(未测试):
RewriteEngine on
RewriteRule ^/img/(.*)$ get_image.php?uuid=$1 [L]
这应该与类似/img/7e0cfd63-dfc1-4038-a859-ff201dea7b65
的URL匹配,并重定向到/get_image.php?uuid=7e0cfd63-dfc1-4038-a859-ff201dea7b65
。(您现在的图片来源是:src="/img/7e0cfd63-dfc1-4038-a859-ff201dea7b65"
)
get_image.php
此脚本将使用数据库来确定图像的真实位置,该位置可能在应用程序的web根目录之外!但是,Apache需要访问该文件(基于文件系统权限)。在本例中,假设您的所有图像都在/data/mydomain/images
中。您的脚本可能看起来像:
$image_id = $_GET['uuid'];
// ...
$sql = "SELECT * FROM images WHERE uuid='$image_id' LIMIT 1";
$result = mysql_query($sql);
$r = mysql_fetch_array($result);
// DB has the RELATIVE path
$imagepath = "/data/mydomain/images" . $r['path'];
// Produce proper Image
header("Content-Type: image/jpeg");
header("Content-Length: " . filesize($imagepath));
echo file_get_contents("$imagepath");
请注意,如果您想支持更多的image/mime类型,则需要更多的代码。
数据库
最后,在数据库中,images
表中至少需要两个字段:
uuid
:图像的UUID。将其作为主键,或者如果您希望使用auto_increment整数键,请对此列进行索引(以提高性能)rpath
:存储位置中图像的相对路径(例如:/somefolder/image1.jpg
)
这应该是全部:)。我还没有测试过上面的任何一个,但当把所有这些放在一起时,应该会达到你想要的