如何用uuid创建一个link?
How to create a link with uuid?
可能是我问错了问题,我只是不知道如何更具体地定义它,抱歉。
我想创建看起来像这样的链接(img 标签中的 src):
“bla-bla.com/7e0cfd63-dfc1-4038-a859-ff201dea7b65”
并能够 "decode" 它回来。
原因>
我的链接(img 标签中的 src)现在看起来像这样 "myDomain/somefolder/image1.jpg" ,所以如果用户会将“image1.jpg”更改为“image2.jpg”他会得到一个"direct access"(我认为就是这么叫的)。
所以我想阻止 "direct access",但仍然可以共享链接。
可能是我把问题复杂化了,还有另一种简单的方法可以做到,或者 php 扩展这项工作,请告诉我。
服务器:
赢得 2012 r2
阿帕奇 + php5 + MySQL
P.S.
"7e0cfd63-dfc1-4038-a859-ff201dea7b65" - 这是一个 UUID,对吧?
我在 youtube 视频链接中看到了它。
Google 搜索给出了很多结果 UUID/GUID scripts/technics/how 它有效等等,但我找不到链接的实现...
P.P.S
如果你在 Whosebug 上转到我的个人资料图片:
https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0f?s=48&d=identicon&r=PG&f=1
并将 f 更改为 d 你会得到不同的图像
https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0d?s=48&d=identicon&r=PG&f=1
这是我不想发生的事情。
我建议使用:
mod_rewrite
- 解码php脚本和
- 您的数据库将 UUID 映射到路径
mod_rewrite
您使用它来将所有匹配 fake 文件夹的 URL 重定向到解码脚本。将假文件夹命名为 imgs
,apache 配置如下(未测试):
RewriteEngine on
RewriteRule ^/img/(.*)$ get_image.php?uuid= [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
此脚本将使用数据库找出图像的真实位置,该位置也可能位于应用程序的网络根目录之外!但是,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
table 中的两个字段:
uuid
:图片的UUID。将其设为主键,或者如果您更喜欢 auto_increment 整数键,请索引此列(为了提高性能)
rpath
:图片在存储位置的相对路径(例如:/somefolder/image1.jpg
)
应该就这些了:)。我没有测试过以上任何一项,但是当把所有这些放在一起时应该可以达到你想要的效果
可能是我问错了问题,我只是不知道如何更具体地定义它,抱歉。
我想创建看起来像这样的链接(img 标签中的 src): “bla-bla.com/7e0cfd63-dfc1-4038-a859-ff201dea7b65” 并能够 "decode" 它回来。
原因>
我的链接(img 标签中的 src)现在看起来像这样 "myDomain/somefolder/image1.jpg" ,所以如果用户会将“image1.jpg”更改为“image2.jpg”他会得到一个"direct access"(我认为就是这么叫的)。
所以我想阻止 "direct access",但仍然可以共享链接。
可能是我把问题复杂化了,还有另一种简单的方法可以做到,或者 php 扩展这项工作,请告诉我。
服务器: 赢得 2012 r2 阿帕奇 + php5 + MySQL
P.S.
"7e0cfd63-dfc1-4038-a859-ff201dea7b65" - 这是一个 UUID,对吧? 我在 youtube 视频链接中看到了它。
Google 搜索给出了很多结果 UUID/GUID scripts/technics/how 它有效等等,但我找不到链接的实现...
P.P.S
如果你在 Whosebug 上转到我的个人资料图片:
https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0f?s=48&d=identicon&r=PG&f=1
并将 f 更改为 d 你会得到不同的图像
https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0d?s=48&d=identicon&r=PG&f=1
这是我不想发生的事情。
我建议使用:
mod_rewrite
- 解码php脚本和
- 您的数据库将 UUID 映射到路径
mod_rewrite
您使用它来将所有匹配 fake 文件夹的 URL 重定向到解码脚本。将假文件夹命名为 imgs
,apache 配置如下(未测试):
RewriteEngine on
RewriteRule ^/img/(.*)$ get_image.php?uuid= [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
此脚本将使用数据库找出图像的真实位置,该位置也可能位于应用程序的网络根目录之外!但是,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
table 中的两个字段:
uuid
:图片的UUID。将其设为主键,或者如果您更喜欢 auto_increment 整数键,请索引此列(为了提高性能)rpath
:图片在存储位置的相对路径(例如:/somefolder/image1.jpg
)
应该就这些了:)。我没有测试过以上任何一项,但是当把所有这些放在一起时应该可以达到你想要的效果