Ответы пользователя по тегу Веб-разработка
  • Как реализовать хранение изображений отдельно от кода и запрос нужного размера на лету?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Вариантов масса, все зависит от кучи неозвученных нюансов, давайте опишу первые 3 приходящие в голову:
    1) Хранить готовые изображения разного размера, ключ для которых в таблице будет один, а по факту, в зависимости от гет параметров тащится нужного размера, сопоставленное по ключу и размеру.
    То есть табличка имеет вид : [id] | key | size | real_aws_key , через софт бэкенда тянете картинку с сервера хранения, отдаете в виде потока.
    2) NGINX + модуль, тут вроде нужно будет подергать настройки, и поплясать с бубном, но зато решение практически коробочное. Минус - жрет проц. Можно организовать то же самое, но через софт, тот же imagick например.
    3) Хранить превьюшки локально, на облако заливать только большие файлы, по запросу тащить нужные превьюхи из папок, например что-то типа \storage\images\500\[image_id].jpg
    Ответ написан
  • В чем причина ошибки Failed opening required из .htaccess в Open Server Panel?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Никак не могу понять куда смотреть.
    Для таких случаев нужно логирование и проверки. Начать можно с file_exists(), is_file(), is_readable(), is_writable(), fileowner()...
    Ответ написан
  • Счетчик с онлайн отображением, как сделать?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    1. Реально ли это сделать на HTML/CSS и JS?
    Без бэкенда не получится организовать общий сбор и обработку данных, так что если бэкенд делать на нодеЖС - то да, если же речь чисто о фронтенде - нет.

    2. Можно ли обойтись без WP?
    Здесь он вам не понадобится

    3. Куда будут сохраняться данные?
    Зависит. Если общая статистика не нужна, то на такой примитив вполне хватит просто записи в редис/мемкеш, ну или в самом банальном случае в файл. В противном случае нужна бд. Данные для вывода на экран просто вытаскиваются по крону, скажем, каждые 5-10 секунд.

    4. Можно ли сделать что бы у оператора была своя статистика своего рабочего места?
    Можно, но для этого уже нужны минимальные заморочки с аккаунтами и тут уже без базы будет как минимум сложно и странно.

    5. Есть ли уже готовые решения?
    Если и есть, то они вряд ли где-то выложены в публичный доступ, слишком специфичная задача. Не сложная, но не сказать чтобы распространенная.

    1. Я так понимаю что у каждого оператора будет своя страница, как то же программа должна понимать что эти данные пришли от пользователя 1.
    Да, это желательно, но не обязательно, если статистика не особо нужна.

    или можно просто с эти не заморачиваться и не делать отдельные учетки. но тогда если все одновременно нажмут отправить данные что в итоге отобразиться?
    Во первых не бывает "одновременно", все равно будут задержки на клик, на сеть, на реакцию браузера и т.д., мало вероятно но более реально что на сервер придут данные одновременно, но для этого существует очередь обработки. Если запись будет вестись в бд, то все запишется по порядку обработки. Впрочем, с другими хранилищами тоже проблем не должно быть.
    Ответ написан
    Комментировать
  • Как быстро сделать админ-панель для сайта?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    За деньги https://directus.io/ например, типа админка SAAS...
    Ответ написан
    Комментировать
  • Что учесть в начале создания веб-портала и перейти с начальной версии на продвинутую без потерь? Как выбрать разработчика, структуру и платформу?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Я всегда стараюсь приводить какую-то ясную аргументацию к конкретной предлагаемой технологии.
    Мое мнение - берите вордпресс. При всей моей нелюбви к нему. На вырост - самое то.
    Плюсы:
    1) Это просто, базовый функционал вы и сами знаете, плагинов миллиард. Да, есть вопросы к качеству некоторых, но почти всегда есть альтернатива или в крайнем случае возможность написать/заказать нужный функционал.
    2) Он поддерживает внятное чпу, которое легко перенести в более серьезный проект с нормальным роутингом.
    3) Структура хранения хорошо известна, не идеальна, но нормально переносится.
    4) Удобная админка. Не каждый разработчик заморачивается с админкой, так как "это же не фронтенд, сойдет".
    5) По нему много спецов, продукт весьма популярный, так что в случае каких-то проблем легче найти спеца.
    6) Это бесплатно, хотя ничего не мешает вам купить к нему стильный дизайн или крутой плагин за деньги.

    Минусы:
    1) Невысокая производительность на специфических задачах
    2) Качество кода оставляет желать... Что не особо мешает функционалу
    3) На больших нагрузках сильно проседает, но до этого еще дожить надо...

    По перечисленным плюсам у него просто нет альтернатив. Как вариант - разработка чего-то своего, но это сразу деньги, и чаще всего просто выброшенные. Для мвп слишком жирно.
    Dixi.
    Ответ написан
    Комментировать
  • Какой стек технологий лучше использовать для корпоративного сайта и с чего начинать разработку?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    У нас есть дизайн сайта в фигме. Это корпоративный сайт.
    Так все таки сайт или дизайн в фигме?

    Помимо самого сайта, у нас будет также самописная cms — для того, чтобы добавлять статьи, проекты и редактировать некоторый контент на сайте.
    А кто будет самописать? И почему готовые системы не подходят?

    Дизайн cms тоже готов.
    Серьезный подход.

    сделали даже визуализацию БД через mind map.
    Оу, у вас нет разработчика, но зато нашелся датабэйс архитект, прикольно...

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

    1. С чего нам начинать разработку сайта, если большая часть контента создается через cms? С бэкенда или фронтенда?
    Хинт: 99% сайтов создают практически весь контент из админки. Любой готовый цмс движок (вордпресс, октобер, да даже друпал) скорее всего полностью покроет ваши требования, кроме разве что дизайна админки (я хз можно ли там что-то кастомизировать малой кровью).

    2. Какой стек технологий лучше использовать под нашу ситуацию для фронтенда?
    Встречный вопрос - какие требования кроме хтмл и пары сладеров к форнтенду? Если особо никаких - подойдет все что отображает хтмл, то есть любой цмс движок.

    3. Какой стек технологий лучше использовать под нашу ситуацию для бэкенда?
    Ситуация конечно сложная (наверное, хотя вы ее не описали), но не безнадежная. Ответ тот же - подойдет любой готовый продукт из известных цмс.

    Если у вас есть ОЧЕНЬ специфичные штуки, которые вы не перечислили в вопросе - пишите, возможно под них действительно нужно писать самостоятельный продукт.
    Ответ написан
    Комментировать
  • Оптимизация сайта под высокие нагрузки (php,nginx, mysql). Какие критерии доработок? Что необходимо сделать в первую очередь?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Как уже заметили коллеги - первое что нужно выяснить - что тормозит.

    Спойлер: 90% что проблема в запросах к бд, так как сам по себе код в большинстве случаев банально отсылает запросы и принимает их результат, выводя его пользователю в несложных действиях. В редких случаях - запросы идут к внешним тормозящим сервисам, например к фейсбуку или другим СС. И крайне редко тормозит сам код, но тут уже опять же - 90% что это некомпетентность разраба, например, не способного построить нормальный запрос и сортирующий данные от бд в коде...

    Что конкретно надо делать:
    1) Взять за шкирку самого разбирающегося в коде (если таковой существует в проекте), и дать задание описать базовый стек вызовов, если это какой-то самопис, или сразу расставить код замера времени с метками в случае понятной архитектуры. Что то типа такого(класс - древний костыль, но работает, так что матом не ругаться):
    Class Timer.php:
    class Timer {
    
        static $start;
        static $end;
        static $marks = [];
        static $formats = [1=>''];
    
        static function init(){
            if(empty(self::$start)) self::$start = microtime(true);
        }
    
        static function setMark($markName = ''){
            $time = microtime(true);
            if($markName == '')$markName = $time;
            $data['name'] = $markName;
            $data['time'] = $time;
            $res['time'] = $time;
            if(count(self::$marks) > 1)$res['diff'] = $time - self::$marks[count(self::$marks)-2]['time'];
            else $res['diff'] = 0;
            $data['diff'] = $res['diff'];
            self::$marks[] = $data;
            return $res;
        }
    
        static function timeFormat($number,$format = ''){
            if(empty($format)) $format = 3;
            return number_format ($number,$format,'.','');
        }
    
        static function report(){
            self::$end = microtime(true);
            self::$marks['start'] = self::$start;
            self::$marks['end'] = self::$end;
            self::$marks['all_time'] =  self::$end - self::$start;
            if(!empty(self::$marks)) return self::$marks;
        }
    }


    In code:
    \Timer::init()
    //some code block 1
    \Timer::setMark('after block 1');
    //some code block 2
    \Timer::setMark('after block 2');
    ...
    //some code block n
    \Timer::setMark('after block n');
    //near end of code 
    \Timer::setMark('end');
    var_dump(\Timer::report());
    exit;

    2) Смотрите на блоки жрущие время, делите их до атомарных операций путем деления блоков пополам таймерами.
    3) Смотрите что там происходит - оптимизируете*. И так по кругу.
    4) Профит.

    * Оптимизация
    Запросы:
    1) Смотреть план запроса (use explain, Luke!).
    2) Расставить индексы которых явно не хватает
    3) Смотреть не вызывается ли 50 запросов в цикле? Если да - выписать пенделя писавшему, затем переписать в 1 запрос с нормальным джоином.

    Код:
    Иногда запрос сложно оптимизировать, он вытаскивает много данных, хотя эти данные не часто обновляются. Такие запросы нужно кешировать, для чего используют быстрые ин-мемори хранилища типа редис или мемкеш. В крайнем случае в файлах...
    Чаще всего код тормозит на регулярках, хотя "хороший" программист может придумать и более креативные способы погреть процессор.

    Что нужно сделать обязательно кроме тестов и как тогда лучше спрашивать с разработчиков, если они предлагают размытые предложения? Хочется понять в какую сторону копать
    Бить палкой не вариант? Тогда берите других, эти испортились. Если разработчик не знает как выявить узкие места кода - нахрена он нужен? Код написать сегодня любой чат может... Ну, на крайняк дайте им вышеприведенный вариант решения проблемы...

    PS: Кстати, сервер может банально не выдерживать наплыв сетевых соединений, пните адимна, пусть глянет логи.

    PPS:
    достаточно 2000-4000 человек, заходящих в течение 20 минут на сайт
    это равномерные 3-4 рпс, ну или пусть в пике 50 рпс, должно держать даже на несложной конфигурации... Копайте код.
    Ответ написан
    Комментировать
  • Какой стек технологий выбрать для разработки веб-приложения по учету успеваемости студентов?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    • регистрация/авторизация пользователей;
    • добавление/удаление записей;
    • формирование отчета в формате docx.
    практически все что перечислено в качестве инструментов - хватает или избыточно.

    1) Нужна ли асинхронность, исходя из функций приложения?
    Нет, тем более для подхода через REST API.

    2) Что лучше выбрать из перечисленного стека, если необходимо представить приложение в короткие сроки?
    Как самый простой вариант смотрится лара + 4 готовых модуля, 2 из которых вроде даже идут из коробки, остальные добиваются 1 командой композер инсталл %пакетнейм%.

    3) Исходя из функций приложения, это будет SPA (одностраничное приложение) или PWA (многостраничное приложение)?
    Это не противопоставление, это вообще не взаимосопоставимые технологии. PWA может быть SPA, может не быть... PWA это вообще не про "многостраничность".

    Остальное не скажу, так как не в теме.
    Ответ написан
  • Как реализовать функцию статистики просмотра страницы за некий период?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Важно, что бы это была статистика за день/месяц/год/всё время.
    Первое что нужно - определитесь с минимальной статистической единицей, если это день - значит храните сумму за день, табличка соответственно будет что-то типа:
    id, page_id, date, views;
    Соответственно если нужен меньший таймфрейм - дата будет уже дататайм. Далее простой джоин, груп с аггрегацией и sum()
    Ответ написан
    9 комментариев
  • Как лучше хранить много изображений для веб-приложения?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Хранение файлов в бд - самый хреновый вариант из имеющихся. По многим причинам, но основная - файлы должны лежать в файловой системе. Это их естественное состояние. Это быстро, не затратно, не потребляет лишнюю память/процессор и просто удобно. В зависимости от необходимости давать к ним доступ всем или по авторизации, будет либо работа напрямую с статикой через какой-нить нжинкс, либо программно сформированный поток байт через что-то типа пхпшного readfile...

    В зависимости от возможностей хостинга, файлы хранят либо локально(в случае например собственного выделенного сервера и наличия райд стойки), либо, как уже написали, в облачных хранилищах, что чаще всего достаточно выгодно в плане денег за объем/трафик, плюс расширение хранилища будет просто отражаться на счете за услуги, а не ложиться ответственностью на вас как владельца сгоревших винтов с данными клиента. АПИ у всех весьма несложные, а драйвера для работы с удаленными файлохранилищами есть практически для всех популярных движков в виде готовых пакетов.
    Ответ написан
    3 комментария
  • Как называют "сервисный сбор" в корзине?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Упаковка/сборка заказа, можно даже сделать ее бесплатной от какой-то суммы.
    Ответ написан
    1 комментарий
  • Где и как хранить файлы пользователей?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Это вообще не вопрос. Реальная проблема в том, как проверить, сколько физического места занимает папка пользователей "users"?
    Во первых если это реальная проблема - почему вопрос совершенно о другом?

    Во вторых - у вас в примере виндовый диск, что как бы странно для хостинга. В случае линуха все решается либо командой du -sm /your/directory/* либо установкой ncdu, который сильно быстрее, и соответственно что-то типа ncdu /your/directory/.
    Ответ написан
    7 комментариев
  • Как изменять сайт на питоне, аналогично javascript коду сайта?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Как мне использовать питон код в javascript коде сайта
    Никак. Это не предусмотрено браузером. В среде браузера исполняется только яваскрипт.

    Как я могу вносить изменения на работающую html страницу, аналогично работе javascript кода, написанного выше
    Исходя из вышенаписанного - никак. Код клиентской части может быть написан только на яваскрипте.

    В общем случае ПРИ ИНИЦИАЛИЗАЦИИ страницы вы можете заранее сформировать что-либо в коде самого хтмл шаблона с помощью питона, но это происходит на стороне сервера, далее загруженная с сервера в браузер страничка может оперировать только яваскриптом.
    Ответ написан
    2 комментария
  • Как реализовать настройки пользователя на сайте в laravel?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Я б хотел понять как мне реализовать настройки
    как и все остальное в Ларавел, да и в любом другом адекватном ООП движке - миграция, модель, связь один к одному.

    и как ими манипулировать с базы данных.
    Обычный crud, сетим поля, сохраняем...
    Ответ написан
    Комментировать
  • Как обновить страницу напрямую через сервер?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    WebSocket
    Ответ написан
    2 комментария
  • Что выбрать для мультиязычного сайта?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    https://www.google.com/search?q=%D1%80%D0%B5%D0%BA...

    3 линк - рекомендации гугла для разрабов. Остальное читать в качестве материала для ознакомления.
    Ответ написан
    Комментировать
  • Как получить удаленный доступ к локальным доменам?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Самым очевидным выходом выглядит впн + ремоут десктоп. Да, работать вы в таком случае будете именно на удаленной машине, но в принципе это самое удачное решение из имеющихся...
    Ответ написан
    Комментировать
  • Как правильно оповестить пользователю о занятых его данных?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Мол, даем злоумышленнику понять, что почта верная и достаточно ему просто подобрать пароль.
    Это неправильные разработчики, и они делают неправильный мед код...

    Во первых не понятно чего вы боитесь - взлома почты или взлома аккаунта вашего сайта?
    Если первое - это как минимум глупо, все сервисы почты достаточно хорошо защищены от атак перебором, 99,9% взломов - фишинг и социнженерия. А емэйл достаточно публичная информация, чтобы не парится конкретно с вашим сайтом.

    Если второе - у вас так же должна быть защита от перебора, а подтверждение наличия зарегистрированности емэйла - нормальная практика, НИЧЕГО не дающая злоумышленнику. Ну, в случае ХОТЬ КАКОЙ-ТО РЕАЛЬНОЙ, а не мнимой защиты (как в случае "ой, нельзя говорить что такой имэйл уже есть, а то у нас от перебора защиты нету...").

    Спокойно отдавайте сообщение об ошибке, при введении 3 и более раз неверного пароля в авторизации - капча. При введении более 3 раз неверного пароля с капчей - письмо на мыло с кодом разблокировки, взломщику бан по айпи и сообщение о возможности разблокировки через емэйл.
    Ответ написан
  • Как отключить кэширование сайта на сервере?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых не понятно, что закешировалось? Стили/скрипты или сама страничка?
    Если именно страничка, то:
    Во вторых, браузер волен по своему усмотрению учитывать или не учитывать заголовки сервера, по этому можно попробовать отдать заголовки, указывающие что документ не требует кеширования или устарел, но это не гарантия.
    В третьих прописывать мета заголовки в сам документ особо смысла не имеет, так как собсно проблема в том что эти заголовки не прочтутся из нового документа, а будет использована закешированная версия.
    Ну и в четвертых, естественно, кеширование у вас происходит на клиенте, а не на сервере.
    В случае проблем именно со скриптами и стилями, просто добавьте гет параметр с версией в конец пути, типа:
    <link rel="stylesheet" href="/some/style.css?ver=2" >
    Ответ написан
    Комментировать
  • Как реализовать печать форм документов из браузера?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    Для принтера существует отдельный медиа запрос, в котором вы пишете все свои хотелки по форматированию листа под печать, в том числе колонтитулы, размер страницы, нумерацию, так же описываете элементы в стандартных единицах печати - cm/pt. Все весьма просто гуглится и на том же хабре вроде даже пару толковых статей было (тыц тыц).
    Ответ написан
    Комментировать