Задать вопрос
  • Чем отличается re от replace в Python 3?

    @lega
    >>> text = 'xxx <img width="550" height="550" src="link1" > yyy <img width="550" height="550" src="link2" /> zzz'
    >>> re.findall(r'<img [^>]*src="([^"]*)"', text)
    ['link1', 'link2']
    Ответ написан
    Комментировать
  • Как все-таки начинать php код?

    Если фреймворк под который ты пишешь везде использует <?, то на самом деле пофиг и я использую короткую версию.
    Дело в том, что нет никакого "правильно" или "лучше" выбитого в граните. И надо понимать как будет использоваться ваш код. Если он не отделим от другого, где уже стопятцот раз написано <?, то все равно. Во всех других случаях <?php.
    Для тех кто не понимает как и что он пишет есть PSR. Таким образом если вы не знаете что лучше использовать - пишите <?php. Как только сможете понимать, что лучше использовать - можете начинать использовать то, что лучше.
    Ответ написан
    1 комментарий
  • Как все-таки начинать php код?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    https://www.php-fig.org/psr/psr-1/

    На дворе 2018г., но споры продолжаются(в т.ч. внутренние)

    На дворе 2018, php "программисты" всё еще не знают про PSR
    Ответ написан
    Комментировать
  • Очень долго прогружаются карточки товаров, что делать?

    Оптимизация бд
    Добавление индексов
    Кэширование
    Ответ написан
    Комментировать
  • Почему говорят что forEach меняет начальный массив, если он ничего не меняет?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Не меняется, т.к. а - это значение элемента массива. Но если бы это была ссылка на значение (на объект например), то менялось бы.
    arr = [{a: 1}, {a: 2}, {a: 3}]; 
    arr.forEach(a => {
      a.a++;
    })
    console.log(arr) // [{a: 2}, {a: 3}, {a: 4}]

    В таком случае да, значения объектов поменяются. Но если вы измените ссылку, то нифига
    arr = [{a: 1}, {a: 2}, {a: 3}];
    arr.forEach(a => {
      a = { a: a.a+1 };
    })
    console.log(arr) // Тут все по старому

    Также, можно поменять значение массива по ключу.
    arr = [1,2,3]
    arr.forEach((a, ind) => {
      arr[ind]++;
    })
    console.log(arr) // [2,3,4]
    Ответ написан
    Комментировать
  • Почему говорят что forEach меняет начальный массив, если он ничего не меняет?

    rockon404
    @rockon404
    Frontend Developer
    Почему говорят что forEach меняет начальный массив

    Кто говорит?

    Этот пример, видимо, должен разрушить ваши неокрепшие шаблоны.

    Изучайте основы JavaScript. forEach это лишь итерация по элементам массива с применением функции колбека. Остальное происходит по канонам JavaScript.
    Ответ написан
    Комментировать
  • Как перезаписывать значения в php?

    При первой записи добавляете значение переменной в куки, при последующей записи складываете новое значение с тем, что взято из куки.
    Ответ написан
    1 комментарий
  • В чем разница = и == в php?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    = - присваивание
    == - сравнение с авто-приведением типов (таблицы)
    === - эквивалентное сравнение (типы переменных и их значения должны строго совпадать)
    Ответ написан
    Комментировать
  • В чем разница = и == в php?

    Uwe_Boll
    @Uwe_Boll
    Я Злой и Страшный Уве Болл в Разработке знаю Толк
    1) = это НЕ равно!
    2) = это символ присваивания значения переменной
    3) == оператор простого сравнения
    4) === оператор тождественного сравнения с проверкой типа
    Ответ написан
    1 комментарий
  • В чем разница = и == в php?

    DevMan
    @DevMan
    = - присваивание
    == - сравнение

    тащемта такие вопросы задавать должно быть стыдно и невыносимо больно.
    Ответ написан
    7 комментариев
  • Заказчик сует доработки очень маленькими порциями, как брать оплату?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    поставить минимальную стоимость как за полчаса работы.
    объяснять, что вы сейчас заняты и поправите через 1-23 часа.
    Брать деньги за все время от прихода первого сообщения до сдачи последней правки.
    так как вы в режиме оперативного сопровождения.
    Ответ написан
    20 комментариев
  • Как правильно работать с исключениями?

    Stalker_RED
    @Stalker_RED
    На самом верхнем уровне вашего приложения должен быть какой-то Глобальный И Великий Обработчик Исключений Общего Назначения. Задачи у него очень простые - записать в лог что и где сломалось, показать пользователю табличку "ой, все пропало", и опционально пнуть мониторинг, отправить смс админу или письмо деду морозу.

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

    Рассмотрим пару примеров:
    1. Представим, что модуль "генератор превьюшек для фоточек", который верой и правдой трудился многие месяцы, однажды наталкивается на непреодолимую для него преграду и бросает исключение - "капец, место на диске кончилось, я так больше не работаю!"

    Если ваш код не может ничего с этим поделать - вы пропускаете это исключение выше, пускай Глобальный И Великий Обработчик показывает юзеру красивую табличку "извините, у нас перерыв обед", и шлет письма админу в три часа ночи. А если у вас облачный хостинг, например, и вы можете на лету подключить больше дискового пространства, или может снести какой-то ненужный кэш освободив место, то можно перехватить это исключение, показать юзеру "извините, за задержку, ваши фоточки будут обработаны через пару минут", а админу прислать не красный алерт, а желтый.

    2. Виджет, который показывает самых рейтинговых котиков с ютуба не смог подгрузить очередную порцию котиков, т.к. ютуб забанен роскомнадзором. Если ваш код ничего не может с этим поделать - Глобальный И Великий Обработчик Исключений покажет пользователю "ой все". Или вы перехватите это событие на более низком уровне и покажете табличку "свежих котиков нет, но вот есть рейтинг за прошлую пятницу". Или, если котики должны быть обязательно свежие, то можете предусмотреть экстренное подключение через vpn или tor, или может возьмете котиков с vimeo вместо ютуба, например.

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

    Важно в этом не переусердствовать, и не основывать бизнес-логику на исключениях. Этот механизм для редких, исключительных ситуаций, которые не получается обработать другим способом. Если модуль ресайза фоточек написан индусами, и его, внезапно, нечем заменить. Но если есть возможность (и необходимость) перевести эту проблему из разряда исключительной в обычную рабочую ситуацию - лучше так и сделать. Если у вас место кончается два раза в неделю - лучше настроить какой-то мониторинг, который будет следить за этим показателем и заранее разруливать такие ситуации. В случае с недоступностью сервера можно на уровне бизнес логики проверять доступность и подключать резервные каналы или источники данных, вместо того, чтобы падать с ошибкой "ой 500!".
    Ответ написан
    3 комментария
  • Как эмулировать запрос FormData из PHP?

    rabbit418
    @rabbit418
    23 yo Designer from Ukraine
    Можно например так, с помощью Curl.

    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => "/ajax.php",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n",
      CURLOPT_HTTPHEADER => array(
        "content-type: multipart/form-data; boundary=---011000010111000001101001"
      ),
    ));
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }


    А еще можно вот так, с помощью HTTP v2:
    <?php
    
    $client = new http\Client;
    $request = new http\Client\Request;
    
    $body = new http\Message\Body;
    $body->addForm(array(
      'foo' => 'bar'
    ), NULL);
    
    $request->setRequestUrl('/ajax.php');
    $request->setRequestMethod('POST');
    $request->setBody($body);
    
    $client->enqueue($request)->send();
    $response = $client->getResponse();
    
    echo $response->getBody();
    Ответ написан
    1 комментарий
  • Конкретно не понимаю, что делает `+e.target.innerText`?

    yellow79
    @yellow79
    Senior Software Engineer
    e.target - элемент по которому кликнули
    innerText - текстовое содержимое элемента
    Ответ написан
    Комментировать
  • Выбор ОС для сервера Debian 9 или Ubuntu 17.10?

    @nikweter
    Системный администратор
    17.10 для сервера? И чем люди думают, когда нестабильные релизы в продакшн тянут..
    Ответ написан
    9 комментариев
  • Как могут взломать базу данных MySQL?

    @Z1odeypnd
    Здравствуйте.
    Технологий взлома уйма.
    В зависимости от того, какие привелегии получил "хакер" при вломе вашей БД - зависит очень много.
    Если он получил доступ только на чтение, то захешированные в MD5 пароли ему мало чем помогут, т.к. MD5 не имеет алгоритма обратной расшифровки и хэширование спасёт тем, что взломщик получивший доступ на чтение паролей - самих паролей не получит (есть конечно словарь MD5 хешей, то это другая история).
    Вообще для защиты любой БД есть несколько золотых правил:
    0. Переименовать дефолтного админа и защитить его сложным паролем.
    1. Для каждой БД должен создаваться свой владелец и несколько пользователей с разными наборами привелегий.
    2. Ни у одного из пользователей, созданных в п.1 не должно быть прав на изменение таблиц в соседней БД.
    Если есть необходимость обновлять соседние БД - делайте это триггером в соседней БД.
    3. Каждый внешний веб-сервис должен ходить в БД только с тем набором прав, которых ему достаточно для работы. Т.е. не нужно везде прописывать root и надеяться на лучшее.
    В этом случае, если взломщик получит привелегии этого пользователя, то сможет сделать только то, что разрешено этому пользователю. Тогда не выйдет "удалить все и сразу".
    Например, для наполнения католога товаров в интернет-магазине может быть отдельный пользователь, с правами на SELECT, INSERT, UPDATE, DELETE в таблице SHOP_PRODUCTS, например. И ничего более.
    А пользователи, приходящие в магазин за покупками могут делать SELECT, INSERT, UPDATE, DELETE только в таблицу CUSTOMER_CART. В коде веб-сервиса, естественно должна быть проверка, что покупатель редактирует СВОЮ корзину.
    Для показа каталога товаров - отдельный пользователь, имеющий право только на SELECT из таблицы SHOP_PRODUCTS.
    А продажу товара может делать отдельный пользователь, с правом только на UPDATE колонки AMOUNT в таблице SHOP_PRODUCTS. Пример:
    GRANT SELECT ON shopdb.SHOP_PRODUCTS TO 'trader_bot'@'shophost';
    GRANT UPDATE (AMOUNT) ON shopdb.SHOP_PRODUCTS TO 'trader_bot'@'shophost';

    И т.п. По принципу "Разделяй и властвуй."
    4. Писать запросы с использованием placeholder'ов (подстановку данных), что убережёт от SQL-инъекций.
    Пример:
    $DB->select('SELECT * FROM tbl WHERE a=? AND b=?', $a, $b);

    5. Если и БД и приложение, используещее БД установлены на одном сервере - отключить удалённый доступ к БД и работать через сокеты.
    6. Последний, но самый важный - БЕКАПЫ. При удалении всего и вся - нужно откуда-то восстановиться. Делайте бекапы и храните на отдельном сервере (не выставленном наружу).
    Ответ написан
    3 комментария
  • Почему не работает код для нарезки строки?

    Minifets
    @Minifets
    Hello world!!!
    $result = strrev(implode(' ', str_split(strrev($text), 3)));
    Ответ написан
    Комментировать
  • Почему Float PHP некорректно обрабатывает разряды выше E+15?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    PHP реализует float как IEEE 754 платформозависимого формата.

    То есть в большинстве случаев есть 53 бита мантиссы, что где-то 14-16 значащих десятичных цифр (надо перечитывать стандарт, там ещё nan, infinite кодируется, не очень помню сколько бит непосредственно значение и в каких случаях). Просить из этого достать 20 цифр конечно можно и любой результат с одинаковыми первыми 53 битами будет абсолютно корректен. Потому что float by design приблизительное число.
    Ответ написан
    3 комментария
  • Как написать несложный код на php?

    Stalker_RED
    @Stalker_RED
    PHP, он же c-like язык. Вам бы только немного почитать основы синтаксиса.

    Добавляем символ $ перед именами переменных.
    Тип не нужен.
    $penaverh = 0; 
    $penaniz = 0;
    $voskverh = 0;
    $voskniz = 0; 
    if( ($uroven & 1) > 0 ) $penaverh=1;
    if( ($uroven & 2) > 0 ) $penaniz=1; 
    if( ($uroven & 4) > 0 ) $voskverh=1; 
    if( ($uroven & 8) > 0 ) $voskniz=1;
    и все сразу работает. (демка)

    Или так:
    $penaverh = ($uroven >> 0) & 1; // меняется номер бита, справа налево
    $penaniz  = ($uroven >> 1) & 1;
    $voskverh = ($uroven >> 2) & 1;
    $voskniz  = ($uroven >> 3) & 1;
    демка
    Ответ написан
    Комментировать