• Как узнать width и height видеофайла при загрузке на сервер?

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

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

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

    @rPman
    Веб приложения максимально оптимизированы при работе с файлами на диске.
    Никакой другой метод не позволит дать такую производительность.

    Поэтому - авторизацию доступа делай на уровне веб сервера (вот пример с нормальным oauth)

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

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

    Тупой пример - числовой идентификатор переводи в hex, дели на группы по 4 символа и создавай соответствующие каталоги: /images/0d4f/3b00/a841/0d88, тут 0d88 это файл, остальные части - каталоги. Идентификатор соответственно 64-битное число 0x0d4f3b00a8410d88

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

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

    @Drno
    в БД обычно хранится "ссылка" \ хеш на файл, а сам файл может хранится либо просто на диске в системе, либо на подключенном S3 к примеру, это уже как по деньгам \ удобству итд...
    Ответ написан
    7 комментариев
  • Взгляд опытных программмистов, что улучшить и исправить?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    1. #define SPACE ' ' - смысла не несет такая замена. Или какое-то более осмысленное имя, вроде EMPTY_FIELD, или просто в коде используйте ' '. Хотя лучше хорошее имя.

    2. check_field - ужас. Во-первых, проверки на крестики и на нолики идентичны - только сравниваете вы или с 'X' или с 'O'. Ну напишите функцию, которая принимает char и ищет тройку из этих символов. Далее, используйте циклы. 3 строки можно проверить одним и тем же кодом, только индексы сдвигаются на 3 - вот и запустите цикл на 3 итерации. Так же со столбцами. В итоге вместо 8 условий будет только 4.
    Вообще, можно до одного условия в трех вложенных циклах ужать:
    const int dx[4] = {0, 1, 1, 1};
    const int dy[4] = {1, 0, 1, -1};
    for (dir = 0; dir < 4; ++dir) {
      for (int start = 0; start < 9; ++start) {
        int step;
        int x = start % 3;
        int y = start / 3;
        for (step = 0; step < 3; ++step) {
          if (x < 0 || x > 2 || y < 0 || y > 3 || field[x+3*y] != player) break;
          x += dx[dir];
          y += dy[dir];
        }
        if (step == 3) {
          return 1;
        }
      }
    }
    return 0;


    3. print_field тоже делается циклами. Хотя бы по трем строкам.

    4. основной игровой цикл можно делать while (1), ибо по любому из значений check происходит break;
    Ответ написан
    Комментировать
  • Взгляд опытных программмистов, что улучшить и исправить?

    bingo347
    @bingo347
    Crazy on performance...
    1. Много дублирующегося кода в функции check_field.
    Можно вынести в константу массив массивов с выигрышными позициями и проверять в цикле.
    При этом позиций проверяется 7, хотя их должно быть 8.

    2. Проверку на ничью в той же check_field, можно делать ранний выход из цикла если найдена первая пустая клетка.

    3. Вынести в enum результат функции check_field, сейчас там магические числа возвращаются.

    4. Ввод имен игроков в функции game_with_people.
    Буффер на 10 байт на стеке легко переполнить и будет UB.

    5. В функции main опять повторяющийся код на вывод меню.

    6. Нет проверки на некорректный ввод в scanf.

    7. В game_with_people проверки на результат check_field можно сделать через switch case.

    8. Если игрок введет некорректную клетку, то ход уйдёт другому игроку.

    9. Можно перетереть уже занятую клетку.
    Ответ написан
    3 комментария
  • Почему выдает ошибку Apache?

    IvanU7n
    @IvanU7n
    ошибка в том, что в VirtualHost указываются ip-адреса и/или порты, для разруливания по доменам используются как раз ServerName и ServerAlias

    т.е. не нужно пытаться запихнуть в VirtualHost доменное имя из ServerName
    Ответ написан
    Комментировать
  • Скомпилированный в GCC exe файл вылетает досрочно?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Звучит в точности как симптомы Undefined Behavior. На самом деле программа вылетает из-за, например, доступа к неправильным указателям. Но во время отладки звезды выстраиваются так, что это некорректное действие не приводит к падению программы.

    Добавляйте больше отладочного вывода во всех функциях и между всеми важными кусками кода, например на каждой итерации цикла. Выводите разные строки везде, а в циклах еще и переменные цикла вставляйте.
    Выводите в stderr.

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

    Возможно, там где-то выход за границы массива, Попробуйте еще, например, увеличить все выделенные строчки и массивы в коде раз в 10. Если после этого программа отработает, ищите, где у вас ошибка в логике - почему массивов не хватает.
    Ответ написан
    32 комментария
  • Можно ли Фронт сделать на Ангуляр а Бек на PHP MySql?

    vabka
    @vabka Куратор тега Веб-разработка
    Токсичный шарпист
    Можно, разрешаю
    Ответ написан
    1 комментарий
  • Почему на хостинге у многих есть папка public_html и почему она так называется?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    Раньше, когда трава была зеленее, интернет меньше и добрее, существовало вот такое в настройках веб сервера:

    # UserDir: The name of the directory that is appended onto a user's home
    # directory if a ~user request is received.
    #
    # The path to the end user account 'public_html' directory must be
    # accessible to the webserver userid. This usually means that ~userid
    # must have permissions of 711, ~userid/public_html must have permissions
    # of 755, and documents contained therein must be world-readable.
    # Otherwise, the client will only receive a "403 Forbidden" message.
    #
    # See also: httpd.apache.org/docs/misc/FAQ.html#forbidden
    #


    Т.е. можно было просто получить логин на сервер, где был запущен веб сервер и получить домашнюю страничку вида:
    example.com/~username

    И вот с тех древних времен так и потянулось... Каталог, в котором размещаются файлы сайта - public_html....
    Ответ написан
    4 комментария
  • Поможет ли замена SSD на NVME ускорить работу с браузером Firefox?

    @Zzzz9
    Нет
    Ответ написан
    Комментировать
  • Как в конфиге NGINX запретить напрямую доступ к файлу кроме запросов с определенного домена?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Для запрета напрямую доступа к файлу кроме запросов с определенного домена вам необходимо использовать директиву valid_referers в блоке location.

    Вот пример конфигурации:

    nginx
    server {
        listen 80;
        server_name example.com;
    
        location /path/to/file {
            valid_referers none blocked example.com;
            if ($invalid_referer) {
                return 403;
            }
            
            # Дополнительная конфигурация для доступа к файлу
        }
    
        # Другая конфигурация сервера
    }


    В данном примере, example.com является разрешенным доменом, с которого разрешены запросы к файлу по указанному пути /path/to/file. Если запрос идет с другого домена или напрямую, то сервер возвращает код состояния 403 "Forbidden".

    Обратите внимание на необходимость добавления модуля ngx_http_referer_module при сборке NGINX, так как эта директива зависит от него.
    Ответ написан
    7 комментариев
  • Блок питания для ПК потребляет электричество константно или динамически?

    vabka
    @vabka
    Токсичный шарпист
    Включаем логику.
    Если потребляет константно, но при этом само железо ничего не потребляет - значит БП должен всё рассеять сам, ибо закон сохранения энергии.
    В худшем случае это будет 1квт+.
    Вопрос: А есть ли у этого БП возможность столько рассеять вообще? Нет, нету.
    Ответ написан
    Комментировать
  • Почему ноутбук виснет на определении ide устройств?

    @alexalexes
    Если ноутбук поддерживает загрузку с USB, то можете попробовать записать на флешку Alkid live CD (присутствует в комплекте к ZverCD / ZverDVD) и загрузить на ноутбуке эту ОС. Далее, зайти в "Диспетчер устройств" и посмотреть, какие есть устройства "Контроллеры IDE ATA". Eсли не очевидно их присутствие, то можно воспользоваться программой AIDA64 (в старой версии она называется Everest, присутствовала в комплекте утилит live CD) - там просмотреть наличие дисковых контроллеров.
    Если они ни в каком виде не обнаруживаются в системе, то скорее всего проблема в чипсете ноута.
    Ответ написан
    Комментировать
  • Совместимость сокета для процессоров Intel Pentium 4 630 и Core 2 Duo E8400?

    @LuchS-lynx
    инженер-ПТО
    Нет, нужно смотреть список поддерживаемых ЦП на сайте производителя, возможно это связано так же с чипсетом. Простой пример: топовая, в свое время, плата на 775м Сокете официально не поддерживает Core2Duo. Это Asus P5GDC-Deluxe, чипсет i915, при этом плата подлерживает Р4 600ю серию и серию D
    https://www.asus.com/ru/supportonly/p5gdc-v%20delu...
    Ответ написан
    Комментировать
  • Как использовать часть URL как переменную?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Язык нужно учить!

    <?php echo $_REQUEST[$channel]; ?>

    Или более сложный вариант, точно соответствующий формулировке задачи:
    <?php parse_str($_SERVER['REQUEST_URI'], $output); $output = array_keys($output); echo $output[0]; ?>
    Ответ написан
    6 комментариев
  • Как правильно экранировать символ [ в regex ansible?

    martin_koh
    @martin_koh Автор вопроса
    Нашёл в чем была проблема:
    regex: "(exclude_lines: [)" у меня указан в "" , заключил его в ' и добавил \ перед [ , и всё заработало как положено =)
    regex: '(exclude_lines: \[)'

    Получается - извините за столь глупый вопрос ^_^
    Ответ написан
    Комментировать
  • Что не так с PHP?

    @My_Second_Nickname Автор вопроса
    Всем спасибо, понял в чём проблема. В списке репозиториев остался подключенный диск с ОС. Apt update спотыкался об него, и не подключал репозиторий с php
    Ответ написан
    Комментировать
  • Как переустановить windows рядом с linux?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Загрузчик Linux затрется. Нужно будет загрузиться с диска с Linux и восстановить загрузчик
    Ответ написан
    Комментировать