如何用uuid创建链接?

时间:2016-04-10 09:03:57

标签: php uuid

可能是我提出了一个错误的问题,我只是不知道如何更具体地定义它,对不起。

我想创建看起来像这样的链接( src in img tag ): " bla-bla.com/的 7e0cfd63-dfc1-4038-A859-ff201dea7b65 " 并且能够解码"回来了。

原因>

我的链接(img标签中的 src )现在看起来就像那样" myDomain / somefolder / image1.jpg " ,如果用户将更改" image1.jpg "到" image2.jpg "他将获得直接访问" (我认为它就是这样称呼的。)

所以我想阻止"直接访问",但仍然可以分享链接。

可能是我的问题过于复杂,还有另一种 - 简单的方法,或者这个工作的一些php扩展,请告诉我。

服务器: 赢得2012年r2 Apache + php5 + MySQL

P.S。

" 7e0cfd63-dfc1-4038-A859-ff201dea7b65" - 这是一个UUID,对吧? 我在youtube视频链接中看到了它。

Google搜索为UUID / GUID脚本/技术/工作方式等提供了很多结果,但是我无法找到链接的实现...

P.P.S

如果你在stackoverflow上转到我的个人资料图片:

  

https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0˚F S = 48&安培; d =&identicon放大器; R = PG&安培; F = 1

并将f更改为d您将获得不同的图像

  

https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0 d S = 48&安培; d =&identicon放大器; R = PG&安培; F = 1

这是我不想发生的事情。

1 个答案:

答案 0 :(得分:1)

我建议使用:

  • localizer
  • 解码php脚本和
  • 您的数据库将UUID映射到路径

def create if user_signed_in? @trip = current_user.trips.new(trip_params) respond_to do |format| if @trip.save format.html { redirect_to @trip, notice: 'Trip was successfully created.' } format.json { render :show, status: :created, location: @trip } else format.html { render :new } format.json { render json: @trip.errors, status: :unprocessable_entity } end end else session[:trip] = params redirect_to new_user_session_path end end

您可以使用此选项将与 fake 文件夹匹配的所有网址重定向到解码脚本。命名假文件夹mod_rewrite,apache配置看起来像(未经测试):

mod_rewrite

这应与imgs之类的网址匹配,并重定向到RewriteEngine on RewriteRule ^/img/(.*)$ get_image.php?uuid=$1 [L] 。 (您现在的图片来源是:/img/7e0cfd63-dfc1-4038-a859-ff201dea7b65

get_image.php

此脚本将使用数据库来确定图像的实际位置,该位置可能位于应用程序的Web根之外!但是,Apache需要访问该文件(基于文件系统权限)。对于此示例,我们假设您的所有图片都在/get_image.php?uuid=7e0cfd63-dfc1-4038-a859-ff201dea7b65。您的脚本可能如下所示:

src="/img/7e0cfd63-dfc1-4038-a859-ff201dea7b65"

请注意,如果您想支持更多图像/ mime类型,则需要更多代码。

数据库

最后,在您的数据库中,/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"); :图片的UUID。使其成为主键或者如果您希望使用auto_increment整数键,请将此列编入索引(以提高性能)
  • images:存储位置中图片的相对路径(例如:uuid

那应该是全部:)。我没有测试过上面的任何一个但是当把它们放在一起时应该达到你想要的效果