• В чем отличие ngnix от golang?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Ну раз с фронта пересели, то аналогию понять должны: В чëм отличие Google Chrome от JavaScript?
    Ответ написан
    3 комментария
  • Как обрабатывать файл полученный пост запросом правильно?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вероятно вы вообще не изучали тему. Когда на PHP обработчик поступает запрос из браузера в кодировке multipart/form-data, то все полученные файлы автоматически записываются во временную директорию, а ссылки эти файлы добавляются в суперглобальный массив $_FILES.

    Чтобы сохранить файл, надо его из временной директории перенести куда-нибудь в другое место, для этого существует специальная функция move_uploaded_file. Если НЕ использовать данную функцию, то после завершения работы PHP обработчика все полученный файлы из временной директории автоматически будут удалены.

    Иными словами, вам абсолютно ни что не мешает сразу при получении файла прочесть его содержимое из временной директории при помощи file_get_contents и потом делать с ним что хотите. Можете сохранить, а можете ничего не делать, тогда файл из временной директории автоматом сотрется потом.

    P. S. Я хочу сказать, что при получении файла файл сохраняется на сервере автоматом, пусть и во временную директорию. Это ключевой момент, который вы похоже не поняли. Удаляется он потом тоже автоматом.
    Ответ написан
    Комментировать
  • Как сделать проверку роли у пользователя и выдачи второй роли, если первая роль есть?

    Vindicar
    @Vindicar
    RTFM!
    Программа не работает как именно? Отсутствие реакции? Сообщение об ошибке? Комп встаёт со стола и идёт искать Сару Коннор?
    Далее, ты проверил, on_guild_update() вообще вызывается? Хотя бы временный print() в начало вставь.
    Потому что если почитать документацию, там английским по белому написано:
    This requires Intents.guilds to be enabled.

    Какие интенты ты задаёшь боту?

    Ещё важнее: а причём тут вообще on_guild_update()? Это событие отрабатывает, когда изменяются настройки сервера, а из твоего описания следует, что тебя интересуют роли участников. За это отвечает on_member_update().

    Короче, нужно прояснить происходящее.
    Ответ написан
    Комментировать
  • Как экранировать sql запрос внутри texarea?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Подготовленные выражения PDO и MySQLi.
    Ответ написан
    1 комментарий
  • Как экранировать sql запрос внутри texarea?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это очень просто сделать.
    Надо всего лишь освоить подготовленные выражения.
    Например, почитав вот тут https://habr.com/ru/articles/662523/

    И все запросы, в которых участвуют переменные, выполнять только таким образом.
    А texarea там, или tinymce - это уже без разницы.
    Ответ написан
    1 комментарий
  • Какую выбрать ОС для веб-разработчика?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    В Windows есть WSL в том числе и с образами Ubunu
    Ответ написан
    Комментировать
  • Какую выбрать ОС для веб-разработчика?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Оставайтесь, на чём удобнее работать. "Совместимость с линуксом" на любой ОС обеспечивается докером.
    Ответ написан
    9 комментариев
  • Как осуществить поиск слов из БД со стороны пользователя?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Понимаете, ваш вопрос звучит так: "Я тут надеваю ботинки. Как осуществить завязывание шнурков?"
    Работа с БД - это 99% кода любого сайта. Тем более такие простые запросы.
    Получается, что вы в принципе не понимаете, как разрабатывать сайты, и вам надо учиться делать именно это.
    То есть, вам надо взять учебник или какое-нибудь руководство. И учиться разрабатывать сайты. А не спрашивать, "как осуществить поиск слов".

    Но чисто для примера, для всех современных версий РНР, будет работать такой код

    <?php
    $word = $_GET['word'] ?? '';
    
    if ($word) {
        require 'db.php';
        $sql = "select * from dictionary where word=?";
        $stmt = $db->prepare($sql);
        $stmt->execute([$word]);
        $row = $stmt->fetch_assoc(); //  для PDO  будет просто fetch()
        echo $row['translation'];
    }


    в db.php, соответственно, код подключения к БД. Взять можно, например, отсюда https://habr.com/ru/articles/662523/

    Чтобы в РНР появилась переменная $_GET['word'], надо сделать форму в HTML. Хотя бы про это, я надеюсь, вам не надо рассказывать?
    Ответ написан
    Комментировать
  • Функция move_uploaded_file выдает ошибку 0, что делать?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    0 - это не ошибка, а какая-то фигня.
    Ошибка - это Warning, который генерирует эта функция, если не может выполнить свою работу.
    Чтобы увидеть эту ошибку на экране, надо включить вывод ошибок РНР на экран, display_errors
    Если ошибки выводить на экран нельзя, то их надо смотреть в логе.

    Чтобы узнать, что делать, надо прочесть сообщение об ошибке
    Ответ написан
  • Что делать если вместо сайта вылезло окно ошибок?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    я считаю их нет
    Напрасно.
    Текст ошибки предельно ясен — не определена переменная. Она у вас определяется только если есть $_GET['hash']. Очевидно, в вашем запросе его нет.

    Судя по количеству предупреждений на скриншоте и тексту этого вопроса, нужно всё выбросить и сесть обратно за учебник.
    Ответ написан
    3 комментария
  • Что делать если не работает редирект header?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сначала надо включить отображение ошибок (или научиться искать их в логах сервера)
    Затем собственно увидеть сообщение об ошибке и прочитать его
    Затем, поскольку оно довольно непонятное, найти любое из существующих объяснений этой ошибки, благо их понаписали уже десятки миллионов.
    Далее надо прочитать это объяснение и постараться понять, что такое НТТР заголовки и как с ними работать

    Cannot modify header information.... Как исправить?
    https://phpfaq.ru/newbie/headers
    https://ru.stackoverflow.com/questions/284578/cann...
    Ответ написан
    2 комментария
  • Как корректно обработать строку запроса типа catalog/aloe/aaaa, если третий параметр в роутинге не предусмотрен (только /)?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    "отображается без стилей" потому что надо всегда использовать абсолютные пути, а не относительные.
    Хотя странно, в этом случае должно косячить либо с одним параметром в урл, либо с двумя.
    Но абсолютные пути от корня сайта вместо всех этих точечек в HTML надо в любом случае прописать. Почитать что это такое можно здесь https://phpfaq.ru/newbie/paths
    Ответ написан
    1 комментарий
  • Можно ли сделать такое отношение таблиц?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Связь типа M:N между продуктом и материалом должна трактоваться как самостоятельная сущность. И, как любая другая сущность, она может иметь свои собственные атрибуты.

    можно ли в промежуточную таблицу добавлять поле amount или это считается недопустимым?

    Количество в данном случае - атрибут именно связи, а не продукта и не материала. Посему поле количества в связывающей таблице не только допустимо, но и единственно правильно. При условии, что на комбинацию полей (product_id, material_id) наложено требование уникальности. Иначе должна существовать ещё одна таблица, которая ссылается на связующую таблицу и содержит поле количества.
    Ответ написан
    Комментировать
  • Файл конфига php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Очень хороший вопрос, только вы путаете файл с настройками и файл первоначальной настройки приложения.
    Вам нужны оба.
    1. файл c настройками
    Их должно быть два.
    Первый файл называется config.sample.php, он содержит только один массив, который заполняется пустыми/дефолтными значениями и может содержать не только настройки БД но и содержать другие секции:
    <?php
    return [
      'db' => [
        'hostname' => '',
        'username' => '',
        'password' => '',
        'database' => '',
      ],
    ];

    Этот файл добавляется в репозиторий.

    Второй файл называется config.php и он создается руками каждый раз при установке CMS на новом сервере. В него пишутся актуальные настройки для каждого сервера.
    Этот файл не добавляется в репозиторий (а добавляется, соответственно, в .gitignore).

    2. Файл первоначальной настройки приложения.
    В него идут команды, которые пишутся на любой странице: подключение к БД, старт сессии, всякие инклюды и прочее. Кроме того, в этом файле должен быть код
    if (!file_exists('config.php'))
     {
         $msg = 'Создайте файл config.php на основе config.sample.php и внесите в него настройки';
         throw new RuntimeException($msg);
     }


    Таким образом система будет помогать программисту, если он забыл создать config.php с актуальными для конкретного сервера настройками.

    И вот этот файл, назовем его init.php, уже и подключаем во все остальные файлы.

    Кстати, начиная с 8 версии РНР можно писать просто
    $conn = mysqli_connect(...$config['db']);
    В этом случае ключи массива $config['db'] будут использоваться в качестве имен параметров функции - очень удобно
    Ответ написан
    Комментировать
  • Занесение данных из формы в базу данных?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо выкинуть на помойку учебник, из которого взят этот код, пройти по ссылке, и написать нормальный на основе информации оттуда

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $conn = new mysqli("зачем", "вам", "это", "знать?");
    
    $name = $_POST["name"];
    $login = $_POST["login"];
    $pass = $_POST["password"];
    
    $sql = "INSERT INTO admins (login, pass, name) VALUES (?,?,?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("sss", $login, $pass, $name);
    $stmt->execute();
    
    $id = $conn->insert_id;
    header("Location: profile.php?id=$id");


    Пара замечаний
    • отдельная таблица админов обычно не делается, достаточно общей таблицы пользователей
    • id вставлять не надо, его должна генерировать БД
    • после успешной обработки прямого POST запроса обязательно должен быть редирект. Обычно это либо созданная учетка, или страница входа или список пользователей или что-то ещё
    • при обработке прямого запроса никаких echo в коде быть не должно
    Ответ написан
  • Как в YOURLS с помощью api написать удалённый скрипт для сокращения URL?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Так это ж проще простого:
    1. генерируете уникальную _строку_ из случайных символов, длину выбирайте сами;
    2. записываете в имеющуюся у вас Базу Данных эту _строку_ и URL;
    3. при обращении к вашему WEB-серверу с этой _строкой_ - делаете редирект на URL.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут подходит любая реляционная SQL БД потому что нет противопоказаний. Реляционку мы выбираем
    уже более 30 лет как default вариант и почти не ошибаемся.

    Когда задача имеет признаки ярко выраженной high-load системы - мы делаем ей частичную денормализацию
    и раскладываем ее в NoSQL Key-Value решение. Но это не про улучшение а это про неизбежность. У нас нет выхода просто.
    Иначе мы клиенту не сможем быстро отдать какой-то резуальтат.

    Когда задача имеет ярко выраженную документную природу (нет спецификации на values) - мы берем MongoDb/CouchDb.

    Когда задача хранит граф и ищет в графе и вообще требует графовых алгоритмов - то мы берем Neo4j или ей подобные.

    Когда задача хранит данные измерений (телеметрия) - то предпочтительно взять InfluxDb или ей подобные. Здесь-же мы предполагаем что у нас - не будет joins а будет только измерения в диапазоне времени.

    Но в данном ТЗ и на картинке обычная SQL БД (MySQL/Postgres) вполне себе нормально справляется.
    Ответ написан
    Комментировать
  • Какую базу данных использовать для такого проекта?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну, на основной вопрос уже ответили, а я освещу отдельную проблему, которая очень часто волнует умы юных падаванов.

    когда лучше реляционную и нереляционную использовать?

    Ответ на этот вопрос очень простой.
    Нереляционная БД - это НЕ база данных.
    А узкоспециализированное хранилище, которое может выполнять какую-то одну определенную функцию лучше, чем база данных. Это может быть кэширующий демон, или поисковый движок, или решение для аналитики, или какое-то подсобное хранилище для всякого мусора.

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

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

    @iljaGolubev
    но ничего не получается
    - плохой диагноз.

    В $data у вас XMLReader которые не умеет автоматом __toString. А вы его в `file_get_contents(filename: $data)` суёте. Что по вашему должно произойти?

    Само название XMLReader говорит от назначении "читать".
    Для записи используйте XMLWriter.
    Ответ написан
    3 комментария