если вы внимательно прочитали все ответы то среди них есть например такие http://stackoverflow[dot]com/a/21805580/2110663 где указано что в папке в которой 10к файлов поиск происходит более чем в 10 раз медленнее чем в папке в которой 1к и соответственно если меньше то еще быстрее
ну и надеюсь вы прочти то что при количестве овер 32к некоторые программы перестают работать (как то ls)
а теоретически вы можете конечно писать туда сколько угодно, я же даю всего лишь рекоммендацию как лучше
ну и если ближе к делу то достаете md5 hash из файла или названия файла к примеру файл называется test.jpg делаем из него мд5 хеш 0412c29576c708cf0155e8de242169b1
берем первые 2 буквы хеша и создаем с таким названием папку. то есть 04. соответстенно в базу запишите относительный путь вместе с названием файла 04/test.jpg
при таком алгоритме у вас получится размещать файлы примерно одинаково распределенными по 16^2 = 256 папкам это как раз <1000
если файлов намного больше и в каждой папке у вас будет получаться (или теоретически вы предполагаете) >1000 файлов, создаете еще один подуровень по тому же принципу, то есть берем следующие 2 буквы хеша 12.
соответственно создаете папку внутри 04 и уже внутри папки копируете свой файл 04/12/test.jpg - этот же путь будет записан в базу
файлы в идеале тоже лучше переименовывать в latin-digital формат чтобы в файловую систему не попадали всякие юникод символы, но это уже другая тема
а по сути у вас получится 256*256 = 65к файлов относительно равномерно распределенных по файловой системе и доступ к ним будет происходить с приемлемой скоростью.
можно увеличивать иерархию еще на уровень, больше наверное смысла не будет так как такое количество файлов наверняка не влезет на ваш диск, но теоретически можно
Да, я комментарии не читал, все верно.
Спасибо за информацию, буду знать!
Спасибо за информацию, даже не знал о разных файловых системах. Но в той ссылке, которую вы сбросили указано, что в одну папку можно помещать миллионы файлов. Или я что-то не понял?
дополнительное поле в таблице, 1/0 модерирован/немодерирован (Добавление)
Yan9 пишет:
Тоже склонялся хранить путь к картинкам
а разве фотки будут храниться в разных папках??
обычно достаточно имени файла
Я так и подумал, чтобы добавить еще одно поле в таблицу, просто новичок и думал, что может есть какой-то другой способ, все меняется быстро и я многого могу не знать.
Здравствуйте! Хочу реализовать возможность добавления пользователями данных (картинки и текст), как это сделано в Википедии.
Вопрос в том, как это лучше сделать? У меня 2 варианта:
1. Сделать две БД, в первой сделать таблицу, в которую будет попадать информация от пользователей. Затем я эту информацию проверяю и переношу во вторую БД в нужную таблицу, из которой потом выводится информация на сайт.
2. Одна БД, но данные от пользователей вносятся в одну таблицу, я эти данные проверяю и переношу их в другую таблицу, из которой потом выводится информация на сайт.
И еще вспомогательный вопрос:
Картинки от пользователей лучше хранить в самой таблице либо в папке, а в таблице хранить путь к этим картинкам?
ага, лет на 10, если не больше.
В принципе базовые принципы работы с БД вы конечно уясните. Главное не зациклится на том, на чем вам дают эти базовые знания, и продолжить изучать современные методики.
Да, уже почитал про sql инъекции, про PDО, хорошая штука, не понимаю почему нам это не преподавать. Нам действительно там дают лишь самую базу. Спасибо за помощь!
Я хожу на курсы по php и этот обработчик был частью д/з.
Охренеть... Что за курсы такие... Попробуйте у преподавателя курсов поинтересоваться, слышал ли он что-нибудь о PDO
Уже за сегодня не только от вас слышу о PDO, похоже знания, которые мне даются, отсталые, жаль(
Обязательно об этом спрошу
Курсы в компьютерной академии ШАГ
Использование функций mysql_* ваша ошибка. Они сильно устарели и уже удалены из последней версии PHP
Именно ваша ошибка была не в php, а в sql синтаксисе. Я намерено об этом умолчал.
При использовании PDO, а именно параметризированных запросов (как в моем примере), подобной ошибки бы не возникло, и кроме того, защитило бы ваш код от sql-инъекций.
Можете, пожалуйста, подсказать хорошие ресурсы, где об этом можно подробно почитать? Я хожу на курсы по php и этот обработчик был частью д/з. То, о чем вы написали, нам преподаватель не говорил ни слова.
Спасибо вам, что откликнулись! У меня была функция для подключения к БД, она хранится в другом файле, но у меня как-то все по-другому пишется.
Я знаю, что пароль не нужно проверять, а именно логин, не знаю почему решил проверить пароль, просто думал, что разницы никакой, поменять местами потом и все. Но оказалось, что я при проверке пароля видимо создал ошибку, но которую, наверное, php не видел и проверял так. А решение элементарное оказалось, просто надо было переменную, в которой новый логин, обрамить одинарными кавычками и все (я не полностью знал синтаксис запроса):
echo'Пользователь с таким логином уже зарегистрирован';
}
Я вообще ничего не понял в этом коде, но исправил на свои данные таким образом:
$dsn = 'mysql:yan=testdb;host=127.0.0.1'; // yan-имя БД
$log=htmlspecialchars(trim($_REQUEST['uname'])); // uname-имя формы логина
$password=htmlspecialchars(trim($_REQUEST['upass'])); // upass-имя формы пароля
$pdo = new \PDO($dsn, $log, $password);
$stmt = $pdo->prepare("SELECT * FROM `users` WHERE `name` = :login");
$stmt->execute(array('login' => $login));
$res = $stmt->fetch();
if ($res) {
echo 'Пользователь с таким логином уже зарегистрирован';
}
Показало три строчки какой-то ошибки, что проблема в строке $pdo = new \PDO($dsn, $log, $password);
Или я вообще что-то не то сделал?
Добрый день! Пишу обработчик для формы, в которую пользователь вносит логин, пароль. Создаю запрос в БД для проверки существующего пароля, если такого нет, то вносим новые данные, все работает, запрос выглядит так:
$res=mysql_query("SELECT * FROM users WHERE pass=".$password);// users-таблица, pass-поле
Далее писал условие и если пароль совпадал, то данные не вносились, все работает ОК.
Но нужно еще проверить существует ли в базе такой логин (в БД поле name) и пароль, написал такую строку: