Ответы пользователя по тегу PHP
  • Как реализовать функцию с битовым реверсом на php?

    Stalker_RED
    @Stalker_RED
    Битовый реверс, это когда порядок следования бит в байте нужно развернуть задом наперед. То есть из 1011111 нужно сделать 11111101.
    А массив байт, это наверное такой массив, который содержит байты.

    Способов реализации чуть больше чем дофига: https://stackoverflow.com/questions/1688532/how-to...
    Ответ написан
    8 комментариев
  • Копирования файла с одной директории на сервере в другую?

    Stalker_RED
    @Stalker_RED
    Готовый скрипт с тремя строчками?
    file_exists() для проверки и copy()

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

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

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

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

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

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

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

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

    Stalker_RED
    @Stalker_RED
    Зачастую у слова бывает более одного значения, вот почему.
    тыц

    dispatch: варианты перевода
    имя существительное
    отправка
    dispatch, shipment, forwarding, despatch
    отправление
    administration, departure, dispatch, transmission, despatch, start
    отсылка
    reference, dispatch, remittance, despatch
    депеша
    dispatch, despatch, message
    корреспонденция
    correspondence, dispatch, despatch
    быстрота
    rapidity, speed, swiftness, quickness, rate, dispatch
    дипломатическая депеша
    dispatch, despatch
    казнь
    execution, dispatch, ax, decimation, despatch, axe
    убийство
    murder, killing, assassination, kill, homicide, dispatch
    быстрое выполнение
    dispatch, despatch
    официальное донесение
    dispatch, despatch
    предание смерти
    despatch, dispatch
    глагол
    посылать
    send, dispatch, transmit, forward, despatch, refer
    высылать
    expel, deport, send out, banish, dispatch, proscribe
    быстро выполнять
    expedite, dispatch, despatch
    отправлять по назначению
    dispatch, despatch
    отсылать
    send, refer, send off, dispatch, relegate, bundle
    экспедировать
    dispatch, despatch
    быстро проглотить
    despatch, dispatch
    отправлять на тот свет
    despatch, dispatch
    убивать
    kill, murder, slay, slaughter, assassinate, dispatch

    https://translate.google.com/?source=gtx_m#en/ru/d...


    А если присмотреться к слову dispatcher и router, то можно найти у них что-то общее.

    Он что-то там сравнивает и ищет совпадения, а потом что? Вызывает соответствующий модуль, и передает ему параметры, да?
    Ответ написан
    Комментировать
  • Как правильно решить задачу на php?

    Stalker_RED
    @Stalker_RED
    array_chunk() чтобы разбить на части.
    foreach по этим частям, каждую оборачиваем в группу, и выводим элементы.
    Ответ написан
    Комментировать
  • Расчет памяти при работе php gd?

    Stalker_RED
    @Stalker_RED
    В идеале это высота * ширина * количество_бит_на_пиксель
    Для 32-битного цвета будет
    5000 * 5000 * 32 = 800 млн бит, это чуть меньше 800 МБ.

    На практике, при обработке потребуется примерно раза в 2.5 больше (эмпирический коэфициент, который вполне может зависеть от окружения и параметров сборки).
    Ответ написан
    Комментировать
  • Возможно ли строить массив по условиям?

    Stalker_RED
    @Stalker_RED
    прямо при описании массива.
    Неа.

    Но можно так:
    if ($object->id = 777) {
      $foo['common']['@param_1'] = 'value_1',
      $foo['common']['@param_2'] = 'value_2',
    }
    Ответ написан
    Комментировать
  • Как задать имя параметра post запроса из переменной?

    Stalker_RED
    @Stalker_RED
    ..."&$name="...
    или
    ...'&'.$name.'='...
    Ответ написан
    Комментировать
  • Как в PHP из строки извлечь только ссылку?

    Stalker_RED
    @Stalker_RED
    Регуляркой, например: https:\/\/[^\s]*
    https://regex101.com/r/riu31t/1
    UPD: правильнее так, чтобы позволить символы только из числа
    разрешенных
    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=`.

    см. RFC 3986 (Section 2: Characters)
    https?:\/\/[!#$&-;=?-[\]_a-z~]*
    Ответ написан
    9 комментариев
  • Какая функция поиска подстроки в строке самая быстрая в PHP?

    Stalker_RED
    @Stalker_RED
    php.net/manual/ru/function.strpos.php
    foreach ($bad_agents as $bad) {
        if(strpos($agent, $bad) !== false){
            die();
        }
    }
    Ответ написан
    Комментировать
  • Как изменить регулярное выражение?

    Stalker_RED
    @Stalker_RED
    У вас есть проблема. Вы решили использовать регулярные выражения, чтобы её решить.
    Теперь у вас две проблемы.


    - Доктор, когда я вот так вот делаю, у меня болит...
    - А вы вот так вот не делайте.


    Серьезно, регулярные выражения - не для этого. Правильно было бы не исправлять это выражение, а выбросить целиком.
    Ответ написан
    Комментировать
  • Как в PHP открыть удалённую директорию?

    Stalker_RED
    @Stalker_RED
    Можно монтировать, можно SMB-клиент какой-нибудь использовать, но лучше бы сильно задуматься о том, как вы в эту ситуацию попали, и не стоит ли немножко архитектуру всей системы подправить.
    Ответ написан
  • Основной цикл жизни PHP программы?

    Stalker_RED
    @Stalker_RED
    PHP

    бы запоминала все пока сервер работает, без субд и файлов

    Возмжно, вам стоит выбрать другую платформу.

    Можно, конечно, заморочиться и сделать это и на PHP (демона, который запоминал бы в память), но лучше не надо, когда с чтением такие проблемы.
    Ответ написан
    7 комментариев
  • Правильное написание?

    Stalker_RED
    @Stalker_RED
    Да, вы правы, лучше выносить шаблоны в отдельные файлы. Также можете ознакомиться с популярными шаблонизаторами, такими как twig, blade, smarty, и так далее. Даже если вы не станете ими пользоваться, посмотрите хотя-бы краткий обзор их возможностей и принципов работы - почерпнете идеи.
    Ответ написан
    Комментировать
  • How to get option value using php?

    Stalker_RED
    @Stalker_RED
    $companyType = filter_input(INPUT_POST, 'companyType', FILTER_SANITIZE_NUMBER_INT);
    echo $companyType;
    Ответ написан
  • Как переводить сокращенные числа в обычные?

    Stalker_RED
    @Stalker_RED
    function convert_em_back($num) {
      $numeric = intval($num, 10);
      $suffix = preg_replace('/[0-9]/', '', $num);
      if (preg_match('/[^k]/', $suffix)) {
      	return false; // wrong format
      }
      return $numeric * pow(1000, strlen($suffix));
    }


    бонус: решение на js (не пропадать же добру)
    function раскукожитьОбратно(num) {
      let numeric = parseInt(num, 10)
      let suffix = num.replace(/[0-9]/, '')
      if (suffix.split('').some(char=>char!=='k')) {
      	return NaN // wrong format
      }
      return numeric * Math.pow(1000, suffix.length)
    }
    Ответ написан
    2 комментария
  • PHP рандом больших чисел?

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

    Что-то вроде:
    $number = '';
    $max = getrandmax();
    while (strlen($number) < $n) {
      $number .= rand($max);
    }
    Ответ написан
    Комментировать
  • Как заполнить временные промежутки с наибольшей эфективность?

    Stalker_RED
    @Stalker_RED
    Это разновидность задачи об упаковке в контейнеры.

    Зная как это называется, легко можно найти готовые реализации https://www.google.com/search?q=php+bin+packing+problem
    Ответ написан
    Комментировать
  • Как проверить в каком файле я нахожусь?

    Stalker_RED
    @Stalker_RED
    $_SERVER['REQUEST_URI']; // адрес, по которому совершен запрос
    $_SERVER['PHP_SELF']; // Имя файла скрипта, который сейчас выполняется, относительно корня документов. 
    __FILE__; // полный путь и имя файла текущего (то есть подключенного) файла

    php.net/manual/ru/reserved.variables.server.php

    Есть и другие способы, но для начала покатит. И да, это все не одно и то-же. Запрос мог быть изменен при помощи mod_rewrite или чего-то подобного, и к файлу в котором находится точка входа могли быть подключены другие файлы.
    Ответ написан
    Комментировать