Как мне управлять несколькими файлами для пользователей? - PullRequest
1 голос
/ 26 февраля 2012

Я хочу иметь очень маленькое веб-приложение (использующее PHP), которое позволяет пользователю добавлять текстовый файл. отредактируйте его и сохраните.

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

Нужно ли мне прикрепить к нему случайное число вроде: myFile_randomness010101010.txt - так я буду знать, какой файл кому принадлежит? и что потом? Я просто вынимаю этот номер, когда они хотят скачать то, что они изменили? и как мне узнать, какие файлы отправляются кому?

Я думаю, что ответ как-то связан с Cookies - но я не знаю, как именно ..

Как это работает? с чего мне начать? Спасибо, Alon

Ответы [ 5 ]

1 голос
/ 26 февраля 2012

Да, вы правы насчет куки. Вы можете реализовать это, используя Session . PHP-сессия использует Cookies.

Простой подход:

//uploadbegin.php or login.php etc
session_start();

//validate user logon and
$_SESSION['USERNAME'] = <user name>

Следующая часть обрабатывает часть загрузки файла.

//fileupload.php

session_start(); //start the session..

$user = $_SESSION['USERNAME'];

$content = //get the contents of the file received by HTTP Post to a file or a database.

$rand = //some random number

$fileName = "$user/file$rand";

//this file may be inside a directory named after the user or something like that.
file_put_contents($fileName, $content);

//add this filename and path to the database along with the $user.

Теперь для получения содержимого файла проверьте переменную $_SESSION (после того, как пользователь войдет в систему или что-то в этом роде), получите путь к файлу, выложите содержимое на какой-нибудь редактируемый HTML-элемент управления.

НТН

1 голос
/ 26 февраля 2012

Это довольно просто на самом деле.Добавьте время и, возможно, какой-нибудь уникальный идентификатор (возможно, простой uniqid()).Если вы не хотите, чтобы время читалось, рассмотрите возможность его хеширования.

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

Другие решения не так уж и надежны.Например, вы можете добавить SID пользователя, но это означает, что пользователь не получит файл в другом сеансе (и, возможно, другие пользователи могут редактировать свой, чтобы получить его самостоятельно).

0 голосов
/ 26 февраля 2012

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

Когда вы перемещаете файл в новое место, вы перемещаете его в /files / $ userid / например.

Затем, чтобы получить доступ к файлам, вы должны сделать то же самое, например img src = "files / $ userid / filename".

Нет кроссовера, нет шансовперезаписи от кого-то другого, другие пользователи не могут получить доступ к файлам (если им не предоставлен доступ или они не знают идентификатор пользователя)

0 голосов
/ 26 февраля 2012

печенье будет работать; создайте случайный хеш, затем используйте PHP set_cookie(), чтобы сохранить этот хеш на своем компьютере столько времени, сколько вы хотите, а затем вызовите cookie, если он существует, когда посетитель заходит на страницу.

$fileName=($_COOKIE['your_cookie_name']) ? $_COOKIE['your_cookie_name'].'.txt' : 'myFile.txt';
0 голосов
/ 26 февраля 2012

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

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