Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как устроена личная страница в социальной сети ВКонтакте?

Smoki Mo Профи (682), закрыт 4 года назад
Решил изучить программирование на php, задался таким вопросом. Для меня было немного неожиданно, что целые страницы могут генерироваться из базы данных, которых в реальности нет в корневой папке. Отсюда вопрос. Существует ли в действительности страница пользователя в ВК в корневой папке сервера, или это всё генерация "на лету" из базы данных? То есть, каждый уникальный пользователь не создает для себя уникальную страницу на сервере в вк, а только заносит данные в БД, из которой потом генерируется по стандартному шаблону в страницу пользователя каждому своё? И в такой же схеме работают группы? То есть не существует у группы уникальной страницы, всё что мы видим это стандартный шаблон на который натянуты данные, прогруженные из БД?

Меня смущает то, что мы можем поставить в адресную строку ID любое число и перейти на страницу пользователя. То есть, она как бы существует в корневой папке сервера. Но отсюда у меня сомнение, что на сервере лежат сотни миллионов уникальный страниц пользователей и групп.

Даже если смотреть на мыле. Мой id = 6372108. Это реально созданная страница на сервере, или всего лишь числа из базы данных?
Лучший ответ
Демиен Мыслитель (5538) 4 года назад
Это твой уникальный id, который присвоился тебе после создания аккаунта. По этому id выбираются данные из БД. Показал бы на примере кабинета пользователей, да, жаль, забыл сделать бекап БД и всё снеслось. Объясню на примере постов.

Пост "Идиот" (см. скриншот 1) имеет id 3 и подгружается в шаблон по этому id из url (http://site/posts/3), выполняется запрос к БД вида "SELECT * FROM `posts` WHERE id = :id", где :id это идентификатор поста. Если такой пост есть - возвращается массив данных, чьи ключи это имена полей, если нет, то false. Если вернулось false, то подключаем 404.php, иначе впихиваем в шаблон данные (см. скриншот 2).

Данные подставляются в html и пользователь получает страницу вида (см. скриншот 3).

Твой id это твоё место в БД. Перед тобой 6372107 пользователей, для каждого создавать страницу - невероятная нагрузка на сервер и просто забивание памяти.
Smoki MoПрофи (682) 4 года назад
Ну вот почему-то никогда раньше таким вопросом не задавался, а тут неожиданно открыл для себя Страну Чудес XD Что в реальности страницы нет, она сгенерирована из базы данных. Только у меня подключено orm RedBeanPhp, там чуть другой код, я в этом ещё не разобрался. Записать данные то записал, а выгрузить чёт не получается) Хочу учить язык через реализацию одного своего проекта тематического, чтобы на нем оттачивать навыки. И полезно и приятно. Регистрацию то я сделал с помощью ютуба. Но похоже что следует вернуться к "hello world" и на каждую тему делать по задаче. Потому что понимать то я понимаю, что написано. Но сам воспроизвести не могу.
Демиен Мыслитель (5538) RedBeanPHP без знаний ООП и регистрация по ютубу.. Ты Хауди Хо смотрел? С RedBeanPHP подсказать не могу - сам его вчера впервые поставил, так что для меня это, пока, тёмный лес.
Smoki MoПрофи (682) 4 года назад
Посидел немного с массивами, порешал задачки, почитал мануал php, смог воспроизвести что я сделал в регистрации) Правильно ли я мыслю?

1) Мы создаем массив $data и вынимаем из суперглобального массива $_POST переменные окружения лог, пас, мэил, которые нам записала кнопка do_signup.
2) Дальше у нас два действия, либо мы регистрируем, либо отказываем в регистрации.
3) Для отказа мы создаем массив $errors в который записываем все собранные ошибки
4) Если пользователь не заполнил поля, то есть значения ключей логин, мэил, пароль пустые, ему выдает ошибку, из накопленных значений массива errors. Как я понимаю array_shift вытаскивает одну ошибку, самоудаляя этот ключ.
5) Ошибок нет - мы зарегиались, в значение login записываем данные из массива data с ключом логин и т. д., присваем айди.
Демиен Мыслитель (5538) Больше не смотри Хауди Хо. Нафиг записывать ошибки в массив, если ты всё равно выводишь первую только? А какой смысл $_POST (массив) присваивать другой переменной и просто захламлять память? Тонна лишних пробелов и нарушений psr-2 (http://idealcms.ru/blog/PSR-2-coding-style-guide.html).
Остальные ответы
Лайт Ягами Искусственный Интеллект (282554) 4 года назад
На лету генерируются, естественно. В виде физических файлов хранятся только шаблоны, по которым генерируются страницы. Ну и кэш шаблонизатора, который записывает промежуточные результаты во временные файлы, чтобы по 100 раз одно и тоже не генерировать.
Smoki MoПрофи (682) 4 года назад
а если я в адресную строку ввожу любой другой айди, я как бы делаю запрос из базы данных по этому айди в стандартный шаблон?
Лайт Ягами Искусственный Интеллект (282554) Если не существующий - то будет совершён запрос в БД, он ничего не найдёт и вернёт страницу 404. Если существующий - то зависит от того, какой тип объекта соответствует этому id, будет использован соответствующий шаблон (для юзеров - один, для групп - другой и т. п.)
Александр Тарасов Мыслитель (5998) 4 года назад
Не хочу тебя никак ограничивать... но лучше учи html....
Smoki MoПрофи (682) 4 года назад
Жаль, что также Вы бы могли сказать Вашему же ребенку, подавляя его стремления к изучению чего-то нового и подталкивая к вечному существованию в поиске одобрения. Обычно это порождает множество комплексов неполноценности. Как хорошо, что я немножко взрослее и немножко положу на Ваш совет и буду дальше разбираться в языке программирования, если поставил задачу изучить язык программирования:)
Александр Тарасов Мыслитель (5998) Все равно тебе html учить придется) сайт на php без html...
Похожие вопросы