Как я могу предложить собственный 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.
Вопрос, который вы задаете, непросто быстро ответить. Существует не простое решение на базе PHP, которое вы можете скопировать и вставить за 5 секунд. Функция, которую вы предлагаете, обычно подразумевает некоторую форму перезаписи URL, схему маршрутизации или функциональность для этого.
Также на сайте с тысячами пользователей, возможно, где каждый пользователь может загружать много файлов, вы должны начать думать о том, как хранить файлы файлов в файловой системе. Тысячи файлов в плоском каталоге просто не сократят его.
Хорошо. Вот наивный пример того, как вы могли бы решить это:
Скажем, вы фактически храните файлы в форме:
/uploads/<username>_<filename>.<extension>
Прочитайте mod_rewrite и создайте правило перезаписи на своем веб-сервере следующим образом:
RewriteRule ^(.*)/uploads/(.*) getfiles.php?username=$1&file=$2
Это позволит вам использовать URL, например
/<username>/uploads/<filename>.<extension>
Создайте php script с именем '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);
Но помните: это только один из многих способов реализовать что-то вроде этого. Я выбрал этот способ сделать это только потому, что его так просто реализовать. Опытный разработчик не будет реализовывать его таким образом. Но он должен работать.
Вы можете использовать директиву соответствия псевдонимам в своей конфигурации VHost:
AliasMatch ^/[^/]+/(.*) /usr/local/uploads/$1
Дополнительная информация на http://httpd.apache.org/docs/1.3/mod/mod_alias.html
stack.png
?