• Стоит ли учить php в 2021 году для разработки web приложений и сайтов?

    @thisuserhatephp
    Офлайн - losers Онлайн - lusers
    Никогда не понимал причем тут год и яп. Прыщавые иксперты с дырявыми мозгами и мне в свое время давали такие советы и наставления, мол не учи то, не учи се, сейчас такой-то год....
    Когда же вы поймете, что стек нужно выбирать не смотря на календарь, а исходя из тз которое решает данный стек. Если твою задачу лучше всего решает паскаль, то плевать какой сейчас год, хоть 5021-ый, нужно выбирать паскаль, а не что-то другое, потому что васян в коммах на форуме написал "паскаль в 2021 ? пхпхпха"

    Актуально ли php в 2021 году и стоит ли учить его?

    Если тебе позволяет время, то учить нужно все, что связанно с твоим стеком, а так кончено же актуально
    Ответ написан
  • Где взять годный туториал по Composer?

    pOmelchenko
    @pOmelchenko
    php-developer
    Композер это пакетный менеджер, ты просто описываешь какие у тебя в проекте будут зависимости. Он так же рулит автозагрузкой классов.

    То есть по сути, на минималках. Любой проект будет иметь примерно следующую структуру composer json

    {
      "name": "pomelchenko/project",
      "type": "project",
      "description": "description",
      "minimum-stability": "stable",
      "license": "proprietary",
      "require": {
        "php": "^7.4",
        // тут зависимости для продакшена, когда будешь устанавливать приложение с флагом --no-dev
      },
      "require-dev": {
        "phpunit/phpunit": "^9.5"
        // тут зависимости для dev среды, с тестами и прочими инструментами которые несут вспомогательный смысл.
      },
      "autoload": {
        "psr-4": {
          "App\\": "src/"
          // тут перечисляешь нэймспэйсы и пути до директорий с классами этих нэймспэйсов для приложения, которое будет на проде крутиться
        }
      },
      "autoload-dev": {
        "psr-4": {
          "Tests\\": "tests/"
          // тут перечисляешь нэймспэйсы и пути до директорий с классами этих нэймспэйсов для вспомогательных инструментов, как правило для тестов
        }
      }
    }


    После установки у тебя появится ./vendor/autoload.php который ты во фронтконтроллер подключишь чтобы всё заработало.

    По сути всё. Остальное придет по необходимости во время работы.

    Нужны тесты? Ставишь в phpunit так, чтобы он оказался в require-dev, то есть composer require --dev ...
    Нужны пакеты для работы приложения? Например, роутер или орм, просто ставишь composer require ...

    Ничем более как менеджмент зависимостей композер не занимается. В смысле на бизнеслогику и инфраструктуру (ну кроме как автолоад классов и файлов) проекта он никак не влияет.
    Ответ написан
    Комментировать
  • Где применяются key(), next(), current()?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    1. зачем?
    2. потому что этим "методам" (функциям) не хватает еще одного: reset. С таким же успехом могли задать вопрос "а зачем нужны key и current, если нельзя сдвинуть указатель?"
    3. потому что кто-то не знает языка, или хотя бы банально не видит что key возращает 0 на втором элементе и цикл заканчивается.

    Дело раскрыто, это не баг языка, а неопытный "программист".
    P.S. предлагаю следующий вопрос "а зачем while, если можно foreach?"
    Ответ написан
  • Где применяются key(), next(), current()?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    У вас не полный список функций, есть ещё reset(), end(), each() и prev().
    Двигаться по массиву таким образом можно в обе стороны, в отличие от foreach.
    Ответ написан
    2 комментария
  • Почему с let работает а с var нет?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    У var область видимости функции, на каждой итерации цикла мы имеем дело с одной и той же переменной.
    У let - область видимости блока, на каждой итерации цикла новая переменная
    Ответ написан
    4 комментария
  • Где применяются key(), next(), current()?

    DevMan
    @DevMan
    1. это не методы, это функции.
    2. они используются по своему прямому назначению.
    3. что вы делаете в js не имеет никакого отношения к этим функциям.
    Ответ написан
    21 комментарий
  • Как сделать сайт рабочим до определённого времени?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Добавьте в index.php
    $hour = date('H:i');
    if ($hour < '08:00' || $hour > '23:00') die('Closed');


    run php online
    Ответ написан
    Комментировать
  • Как откатить изменения только у одного файла на несколько коммитов?

    Заходите в историю комитов, находите нужный, открываете в нём искомый файл, ctrl+a, ctrl+c, ctrl+v, ctrl+k.
    Ответ написан
    Комментировать
  • Как откатить изменения только у одного файла на несколько коммитов?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    В терминале пишем
    git checkout хеш_коммита -- полное_имя_файла
    и состояние файла вернётся к тому, что было после коммита с указанным хешем.

    Но удобнее вызвать историю этого файла, выбрать нужный коммит, показать разницу между версиями и откатить ненужные изменения. А что-то можно и оставить.
    Ответ написан
    Комментировать
  • Как реализовать автоформатирование массива в phpStorm?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    PHP developer
    Есть схожая тема, но информация устарела.

    Я использую PhpStorm 2021.1.1 и пункт "Align key-value pairs" находится не во вкладке "other" (её вообще нет), а во вкладке "Wrapping and Braces".

    Подытожив, что бы реализовать автоматическое форматирование отступов в массиве необходимо перейти в "Editor"->"Code Style"->"PHP", на вкладке "Wrapping and Braces" спуститься к пункту "Array initializer" и выставить опцию "Align key-value pairs"
    Ответ написан
    Комментировать
  • Как сменить пароль на СУБД не прерывая работу приложения-клиента?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    На хосте1 одной командой (sed -i) меняется пароль в файле настроек, и через точку-с-запятой (;) второй командой (sql-client-tool <cmd.sql) отправляются инструкции SQL-серверу на смену пароля. Время выполнения - микродоли секунды, моргнуть не успеете.
    Ответ написан
    Комментировать
  • Как парсить сайты на технологии web socket?

    @StiflerProger
    const WebSocket = require('ws');
    
    const ws = new WebSocket('wss://dallas.tx.publicsearch.us/ws', {
      headers: {
        "Origin": "https://dallas.tx.publicsearch.us",
        "Cookie": "authToken=51f69ac5-67c5-41ac-8943-cace7ebc6b3c; authToken.sig=x9S_G8Lwy6KHaB2Ek4PT1PR7jhE;"
      }
    });
    
    ws.on('open', () => {
      console.log('Соединение открыто');
    });
    
    ws.on('close', (code, reason) => {
      console.log('Соединение закрыто', code, reason);
    });


    у всех сайтов свои тараканы будут) к примеру в том что я скинул выше. Тебе обязательно передавать в заголовке запроса Origin и Cookie. Если с первым все ясно, то первая проблема будет с куками. Их как я понял можно получить сделав обычный GET запрос на главную. Тебе эти куки передадут в Response Headers
    606c101d381a7125759663.png

    https://www.npmjs.com/package/ws

    После удачного коннекта, не забывай потом слать пинги ) Формат пингов уже посмотришь во вкладке Network в браузере
    Ответ написан
    Комментировать
  • Как выделить символы одной регуляркой?

    @galaxy
    U+0008

    так обычно обозначаются Unicode codepoints. Без задания кодировки это обозначение физического воплощения не имеет, вообще говоря (а строки в PHP ничего не знают о кодировках). Так что для начала разберитесь, в какой кодировке у вас исходная строка.
    В строке из примера кодировка UTF8, указанные символы просто из нижнего непечатного диапазона, их можно выделить так: [\x00-\x19]+
    Ответ написан
    Комментировать
  • На чем исполнять несложный интернет-магазин?

    neuotq
    @neuotq
    Прокрастинация
    Советую брать что-то готовое. Потому как если проект будет живой и работать, в любом случае будут вылезать те или иные косяки, недоработки и т.п.
    Так что берите например тот же вукомерс, базовый набор и вперед.
    По умолчанию ничего сложного, куча всего уже готово(интеграции и проч) легко кастомизируется. Это же можно сказать и про многие другие.
    Либо вообще выбрать платформу вроде insales.
    Писать свое не рекомендую. Тем более если условно простое. Больше смысла писать свой продукт под нечто большое, с уникальными требованиями и тп, на что потом будут готовы выделять ресурсы. А так будет просто мертворожденное решение и проблема у владельцев если нужно что-то допилить.
    Ответ написан
    2 комментария
  • SQL инъекция в UPDATE возможна ли?

    Fernus
    @Fernus
    Техник - Механик :)
    Смысл есть!

    UPD:
    Поясню...я тебе в $id передам 9999 or 1 = 1 и все записи нафиг потерпят изменения!
    Ответ написан
    2 комментария
  • SQL инъекция в UPDATE возможна ли?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Инъекция может быть через любой запрос.
    И защищать тоже надо любые запросы.
    Никогда не надо торговаться, "а можно я не буду защищать именно этот запрос? Ну мааааам!"
    Надо просто всегда следовать простым правилам - любая переменная попадает в запрос только через плейсхолдер

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

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

    То есть сама уязвимость никак не зависит ни от каких второстепенных факторов - типа запроса, передаваемых данных, способов их валидации, твоих знаний SQL. Это сам факт. Можно подставить свой код в запрос? Значит он уязвим. А как конкретно можно нагадить - это отдельная тема.

    Кроме того, любая уязвимость - это всегда ошибки. Если в $id будет пусто, то запрос вызовет ошибку. Если в $id будет слово select то запрос вызовет ошибку. Если будет слово "привет", то запрос вызовет ошибку. Оно тебе надо?

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


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

    Если каждый раз писать по три строчки долго
    $sql = "INSERT INTO users SET email = ?, password = ?"; // заменяем на знаки вопроса
    $stmt = $db->prepare($sql); // подготавливаем запрос, получаем stmt
    $stmt->bind_param("ss", $email, $hash); // два знака вопроса - две переменных - две буквы s
    $stmt->execute(); // выполняем запрос

    То надо воспользоваться такой вещью, как программирование. И написать функцию, которая возьмет на себя всю рутинную работу.
    function prepared_query($mysqli, $sql, $params, $types = "")
    {
        $types = $types ?: str_repeat("s", count($params));
        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param($types, ...$params);
        $stmt->execute();
        return $stmt;
    }

    и в итоге предыдущие 4 строчки превратятся в одну:
    prepared_query($db, "INSERT INTO users SET email = ?, password = ?", [$email, $hash]);

    или твой запрос:
    prepared_query($db, "UPDATE table SET test WHERE id = ?", [$id]);

    - просто, быстро, удобно и безопасно
    Ответ написан
    26 комментариев
  • Провайдер режет TCP/UDP сессии через 240 сек неактивности, что делать?

    gbg
    @gbg Куратор тега Компьютерные сети
    Любые ответы на любые вопросы
    Висящие сессии TCP и UDP вкусно кушают провайдеру порты NAT (видимо, он совсем мелкий и местечковый), так что ему надо как-то выкручиваться.

    Никакого RFC он не нарушает - это Интернет, отрыв соединения является нормой.

    Что делать - настройте KeepAlive, или примените autossh, он постоянно шлет байтики в дополнительном соединении
    Ответ написан
    1 комментарий
  • Как назначить горячую клавишу на вызов последней команды консоли?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    Сделайте конфигурацию запуска (Run/Debug Configuration) для часто требуемой команды
    И сможете вызывать её горячей клавишей или кнопкой на панели.

    603a26a005a0b991898454.png

    -------
    Проще через скрипты композера.
    В composer.json добавить скрипт

    scripts: {
      "feed:update": "@php artisan feed:update"
    }


    Потом в интерфейсе шторма Add Configuration -> + -> Composer Script -> Выбрать и выпадающего списка нужный скрипт.
    Ответ написан
    Комментировать
  • Как создать временный файл PHPStorm?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    ПКМ в дереве файлов → New → New Scratch File
    Ответ написан
    5 комментариев