И так в продолжении своих войн с пхп без наличия бд я задался вопросом 8D : Предположим мы хотим регистрировать юзеров и каждому юзеру конечно же нужен отдельный id , представим что мы создали отдельный пхп файл который инклудится в рег и в котором стоит тупо кол-во уже зарегенных. Как это происходит - юзер нажимает кнопочку "отправить" , идут всякие проверочки , инклудится наш файл с кол-вом зареганных , к тому числу прибавляется 1 и создаётся файл с данными юзера. Всё это разумеется так же просто как и на словах , но меня смущает тот факт что , к примеру , одовременно зарегаются 100 юзеров и к каждому приинклудится файл с кол-вом юзеров , каждый его перезапишет и каждый создаст файл с профайлом юзера и лично по моим догадкам при 100 юзерах вполне возможно такое что нескольким юзерам присвоится 1 и тот же id и перезапишет профайл другого. Это возможно ?
Я тут вижу несколько вариантов решения, но сам не юзал, использую базы данных, это куда быстрее) 1. акамулировать все в какую нить папку временную, в последствии скриптом на сервере проходицца по папке и добавлять из этой папки файлики в твой файл.. так ты будешь в ручную контролировать момент создания пользователя, вместо того чтобы предоставлять все на волю скриптам.. 2. Делать пхп демон, который будет обрабатывать твои запросы на регистрацию поочереди, используя буфер. 3. Можешь использовать какие нить мпд5 хэше меток времени + рандомное число огромное + ip адрес пользователя что нить такое, что отвечает уникальности в достаточно большой степени.. и чем больше таких параметров, тем выше вероятность несовпадений))) Но лучше использовать бд конечно))
http://kurepin.ru/php/zametki/flock/ запись будет идти последовательно. скрипт будет открывать файл, блокировать от записи другими и только после этого продолжать работу с файлом.. а по завершению закрывать. тем самым другие копии скрипта буду ждать очередь на запись и не смогут дописать новый id
да и ещё , с флоком теперь всё понятно и просто. если я буду его ещё и походу инклудить например на главную "у нас зарегестрированно 100500" польщователей флок не будет мешать инклуду ?
мде написано что блокирует файл от посторонних программ и потому во время флока ничто неможет начать с ним работать , теперь понятно к чему мой вопрос ?
вообще include будет производить такую же попытку чтения файла и просто ругнется что досутп к файлу закрыт.. тут нужно использовать fopen. но локать не надо. когда ты локаешь файл на запись, другие программы не могут получить доступ к файлу также как и любая попытка скрипта к доступу на файл. думаю при частых запросах будут задержки сильные.
Ещё одно подтверждение, что ты не понимаешь разницу между вызовом анализатора и обычным чтением. А что он читать не может - дело последнее.
ещё одно подтверждение того что во время флока не будет работать инклуд , тоесть мои подозрения вполне обоснованы можно было не выёживаться , а написать "да" , вместо необоснованного "ты не понимаешь разницу" тогда при реге айди будут переписываться
боже , что тут не понимать ? у вас 100500 постов на этом форуме , а вы не понимаете как может не работать инклуд при заблокированном файле , как же вам не стыдно , ай-я-яй. выход справа-сверху
siiXth Ты не понимаешь разницу между инклудом текстового файла и его чтением, а понтов хоть отбавляй. Сходи почитай мануал и тихонько угомонись. Блокировка файла и разница в способах загрузки - не одно и то же.
вы вот сейчас в кэпа играете ? вы только что написали 757 символов потратив своё время вместо максимум 10 символов дав ответ на вопрос думаю теперь ясно у кого удачи в повествовании ртфм будьте так любезны...
буду, блин. =) ЮЗАТЬ БД Без обид, но делать автоинкремент на файле не сложно, но ужасно ТУПО так поступать. просто позорно. Тем не менее, флок будет краеугольным камнем при реализации на файлах.
да разумеется это понятно что БД!!! я не отношусь к тем юзерам которые хотят работать без бд только из-за того что не умеют или это "сложно" 8) просто люблю поэксперементировать и хотелось бы реализовать данный сабж таким каким его задумал. ну а теперь действительно возможно глупый вопрос , у меня раньше был сайт на виртуальном хосте на одном движке и при определённом кол-ве юзеров онлайн он ужастно тормозил. и тогда я оптимизировал его заменив определённую часть запросов на пхп файлы которые инклудились и переписывались (например новости и комментарии к ним сохраняемые в одном или нескольких пхп файлах) и так сайт смог держать юзеров без тормозов то кол-во которое держал с тормозами раньше. и так я придумал сделать полностью динамический сайт без бд. да и в то время про ддос почитал и как я понимаю , сайту без бд как-то побоку на ддос. вопрос в том что либо я выбрал неудачного хостера , либо вирт хостинги не держат большой онлайн ?
Все какие-то самонадеянные, слова им не скажи. Релизация AI в том же MySQL более сложна. Индекс первичного ключа с автоинкрементом (как и другие индексы) хранится отдельно и обрабатывается совместно с запросом. В случае с РНР тут получается что-то наподобии залоченой таблицы или жалкого подобия транзакции: если уж не удалось обновить запись в файле, то не запишем и данные (двухшаговое действие). В MySQL у нас есть LOW_PRIORITY вставка, именно таким образом должна происходить обработка. Сбор данных по индексам и записям - неправильно и БД это знают. Значение AI обычно никогда не равно количеству записей. Сбор этих данных должен происходить во время вставки отдельным процессом, независимым и неожидаемым. flock — не панацея.
siiXth ну есть всякие другие технологии. например докупить оперативки =) и пихать в нее всякие промежуточные результаты, готовые страницы и прочую хрень, чтобы не дергать из бд. И так далее. Короче, можно на файлах, можно. Но всякие регистрации и тп лучше на бд.
ну регу я уже сделал добавляющую в бд только логин и id , пароль и все остальные данные сохраняю в файл который инклудится при залогинивании для проверки пароля(тут 1 запрос в бд) и при просмотре профиля(без запросов в бд). Думаю это как-никак выглядит валидно и данный метод сэкономит немного средств в остальном. В общем - спасибо за ответы.
siiXth А сколько примерно юзеров онлайн сидело, когда сайт начинал тормозить? Мне кажется, всё-таки хостинг худой... Хотя если сайт был суперпосещаемым..?.. А вообще, если любишь эксперементировать - покупай (если нет) постоянный реальный ip у провайдера, регистрируй на него доменное имя и будет у тебя свой выделенный сервер дома...
siiXth у тебя фобия перегрузить бд. Профиль тоже можно сделать на БД. Профили редактируются и просматриваются очень редко. Хотя если конечно посещаемость и тп - можно прибегнуть к кэширующим фишкам. Но опять же, это не через инклуд делается, просто потому что есть более удобные для управления механизмы. но через инклуд конечно забавно, быстро и геморно править наверное.
непомню сайты бывают разные те же соц.сети , что лучше - когда 10к юзеров одновременно зашарятся у друг-друга по профилям запрашивая как минимум по 1 запросу или каждому поинклудится 10к профилей тем более что кроме профилей есть и другие ф-ции.