【问题标题】:How to have custom url for user uploaded files using php如何使用 php 为用户上传的文件设置自定义 url
【发布时间】:2010-10-04 10:57:56
【问题描述】:

如何为用户上传的文件提供自定义 url。

例如:用户上传了一个名为 stack.png 的文件,它被上传到目录http://www.website.com/uploads/stack.png

但我想允许用户在http://www.website.com/username/uploads/stack.png查看/下载相同的文件

请注意我不想使用 url 缩短/更改脚本,我想以某种方式将文件 url 映射到该位置。这样用户可以使用 url “http:/”将文件插入他们的网站或博客中/www.website.com/username/uploads/stack.png”而不是“http://www.website.com/uploads/stack.png”

有可能吗??如果是,我该如何使用 php。

请注意,我有数百个文件要实施 tis。

【问题讨论】:

  • 你会如何处理两个用户上传一个名为stack.png的文件?
  • 为什么要将所有图片都存储在 /uploads 中,而不是为每个用户创建一个目录?

标签: php jquery mysql .htaccess mod-rewrite


【解决方案1】:

您提出的问题不容易快速回答。没有一个简单的基于 PHP 的解决方案可以在 5 秒内复制和粘贴。您建议的功能通常意味着某种形式的 URL 重写、路由方案或实现该效果的功能。

同样在拥有数千名用户的网站上,也许每个用户都可以上传许多文件,您必须开始考虑如何将文件文件存储在文件系统中。一个平面目录中的数千个文件根本不会削减它。

好的。这是一个如何开始解决此问题的简单示例:

假设您实际上将文件存储在表单中:

/uploads/<username>_<filename>.<extension>

阅读mod_rewrite 并在您的网络服务器上创建一个重写规则,如下所示:

RewriteRule ^(.*)/uploads/(.*) getfiles.php?username=$1&file=$2

这将允许您使用 URL 之类的

/<username>/uploads/<filename>.<extension>

创建一个名为 'getfiles.php' 的 php 脚本并像这样返回文件

<?php

$path = '/uploads/'.$_GET['username'].'_'.$_GET['file'];

if (!file_exists($path)) {
    die(
        "OMFG! The user tried to access a file that doesn't exist. " .
        "I think I'm gonna die!"
    );
}

header('Location: '.$path);

但请记住:这只是实现此类功能的众多方法之一。我选择这种方式只是因为它实现起来非常简单。有经验的开发人员不会以这种方式实现它。但它应该可以工作。

【讨论】:

    【解决方案2】:

    您可以在 VHost 配置中使用别名匹配指令: AliasMatch ^/[^/]+/(.*) /usr/local/uploads/$1

    更多信息http://httpd.apache.org/docs/1.3/mod/mod_alias.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 2015-10-08
      • 2013-04-05
      • 2012-04-01
      相关资源
      最近更新 更多