Как создать собственный URL для загруженных пользователем файлов с помощью php - PullRequest
0 голосов
/ 04 октября 2010

Как я могу предложить собственные 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.

Обратите внимание, у меня есть сотни файлов, для которых я хочу реализовать это.

Ответы [ 2 ]

1 голос
/ 04 октября 2010

Вы можете использовать директиву соответствия псевдонимов в своей конфигурации VHost: AliasMatch ^/[^/]+/(.*) /usr/local/uploads/$1

больше информации на http://httpd.apache.org/docs/1.3/mod/mod_alias.html

1 голос
/ 04 октября 2010

На ваш вопрос нелегко ответить быстро. Не существует простого решения на основе PHP, которое вы можете скопировать и вставить за 5 секунд. Функция, которую вы предлагаете, обычно подразумевает некоторую форму переписывания URL, схему маршрутизации или функциональность с этой целью.

Также на сайте с тысячами пользователей, возможно, где каждый пользователь может загрузить много файлов, вы должны задуматься о том, как хранить файлы файлов в файловой системе. Тысячи файлов в плоском каталоге просто не обрежут его.

Хорошо. Вот наивный пример того, как вы могли бы начать решать эту проблему:

Допустим, вы на самом деле храните файлы в виде:

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

Прочтите о mod_rewrite и создайте правило перезаписи на своем веб-сервере следующим образом:

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

Это позволит вам использовать URL как

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

Создайте php-скрипт с именем 'getfiles.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);

Но помните: это только один из многих способов реализовать нечто подобное. Я выбрал этот способ, потому что он очень прост в реализации. Опытный разработчик не будет реализовывать это таким образом. Но это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...