Задать вопрос
  • Как перезаписывать значения в 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
    PostgreSQL DBA
    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;
    демка
    Ответ написан
    Комментировать
  • Два одинаковые массива не равны?

    rework
    @rework
    Помог ответ? В благодарность отметь его решением
    в JavaScript массивы являются объектами. Метод get_arr возвращает вам каждый раз новый объект. Когда вы сравниваете массивы через ==, то сравниваются ссылки на объекты, а они, как я сказал выше, разные. Есть простые способы сравнить массивы приводя их к строке:

    get_arr().toString() == get_arr().toString()

    Или:

    JSON.stringify(get_arr()) == JSON.stringify(get_arr())


    В тоже время если ваши массивы будут реально ссылаться на один и тот же объект, то при сравнении вы получите true:

    var arr1 = get_arr();
    var arr2 = arr1;
    arr1 == arr2 // true


    Так же можно найти различия в массивах, для этого удобно использовать библиотеку lodash, метод difference - https://lodash.com/docs/4.17.4#difference
    Ответ написан
    Комментировать
  • Два одинаковые массива не равны?

    @kttotto
    пофиг на чем писать
    Потому, что Вы сравниваете не элементы массива, а ссылки на объекты. А так как это разные объекты, то и ссылки будут отличаться. Если хотите поэлементно сравнить массивы, то используйте другие способы.
    Ответ написан
    Комментировать
  • Не могу удалить повторяющиеся значения в Excel, в чем проблема?

    @shushpanio
    shushpanio
    Наличие пробелов в начале или конце содержимого в ячейке?

    При поиске Excel Вам нашел например слово Петя в 3 строках подряд.
    При этом по факту в ячейках содержится:
    _Петя
    Петя
    Петя_

    Где вместо символа "_" находится пробел. (символ "_" использовал для визуального отображения содержания ячейки ибо пробел можно и не заметить)
    Ответ написан
    1 комментарий
  • Как заменить окончания слов на php?

    AlexMaxTM
    @AlexMaxTM
    А не проще регулярным выражением сделать?
    preg_replace('/ий/iu', 'ие', $str);
    Ответ написан
    5 комментариев
  • Как исполнить перечень команд без .bat?

    Ezhyg
    @Ezhyg
    Во-первых, ну хоть бы для приличия справку nircmd прочитал! :( Автор старался, расписал все возможности распрекрасно, а ты... пришёл и своим вопросом всю работу испортил!
    Во-вторых, какой батник, если эта программа и есть альтернатива командной строке?!
    Ну и в-третьих:
    script [Script File] 
    This command allows you to execute a sequence of commands stored inside the file
    specified in [Script File] parameter.
    Example:
    script "c:\temp\msg.ncl" 
    Example for a script: 
    infobox "Hello !" "This is the first message"
    infobox "Hello !" "This is the second message"
    infobox "Hello !" "This is the third message"
    Ответ написан
    4 комментария
  • Как правильно выставить права на файл для чтения из PHP?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Вынести файл из /root в каталог предназначенный для доступа web-сервером.
    Ответ написан