Ответы пользователя по тегу PHP
  • Как часто нужна модель MVC?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Всегда полезно отделять мух от котлет.

    Дело не в том, что MVC так важен. Дело в том, что данные нужно отделять от логики, а логику от представления.

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

    Учитывая, что фреймворк, дословно - проволочный каркас, то это нормально изобретать своё. Порой его даже вполне достаточно.

    Чем тот же ларавель лучше? Тем, что в него угрохано на несколько порядков больше человеко-часов и мозгов большого количества специалистов, гораздо более высокого уровня, чем в среднем по больнице. Соответственно качество кода в нем должно быть выше, а основные уязвимости и грабли давно собраны и вылечены, что не гарантируется в самопальном недофреймворке. Ну и предусмотрено много такого, о чем ты. возможно. даже не подозреваешь.

    А в целом те же яйки, только в профиль.
    Ответ написан
    Комментировать
  • Почему PHP теряет популярность?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    На пыхе вагоны легаси, так-что он еще долго будет на плаву. Другое дело что пых - однопоточный и синхронный язык, т.е. пока запрос в базу обрабатывается, процесс висит и ничего не делает, но ресурсы занимает. В этом его громнейший минус. Еще один минус, что на каждый чих надо всё собрать, выполнить энное количество логики и отвалиться, и так каждый раз, на каждый запрос, что не есть эффективно. На том же железе грамотно написанное приложение на ноде обрабатывает с легкостью в десятки и сотни больше обращений. Ключевое слово тут "грамотно". Потому что "выстрелить себе в ногу" можно на чем угодно, и часто это сделать очень просто.
    Ответ написан
    3 комментария
  • Легаси-монстр. Как побеждаете?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    С нуля переписывать не дудат, т.к. люди которые принимают решения даже близко не подозревают, какой навоз тлеет там в коде в этих авгиевых конюшнях. Для них все просто - работает, значит норм.

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

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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Считать порциями, которые умещаются в памяти, отдавать порциями. Если нужно в заголовках отдать общий объём, значит складывать на диск при подсчете, одновременно подсчитывая объём, потом отдать заголовки отдавать с диска порциями... Как-то так.
    Ответ написан
    Комментировать
  • Как сделать рандом из массива с указанной вероятностью для элементов?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Приводим коэффициенты к целым числам пропорционально так, чтобы минимальный коэффициент равнялся единице, остальные округляем до единиц. Таким образом получаем на выходе массив с целыми числами, где отношения в пропорции элементов друг к другу будут близкими к изначальным. Далее на основе этого промежуточного массива генерируем новый, с диапазонами, для первого элемента от 0 до его значения, для каждого последующего от суммы всех предыдущих значений до сумма + текущее значение. Таким образом весь массив диапазонами покрывает значения от 0 до суммы всех величин из первого промежуточного массива, которую обозначим как S. Далее используем только второй массив с диапазонами, для каждого элемента выборки генерим рандомное число R от 0 до S, и находим ключ согласно тому диапазону, куда в каждой итерации попадает R.

    По идее данный алгоритм идентичен варианту Дмитрия, но эффективен по части использования памяти. Опять же, его тоже можно оптимизировать. :)

    ЗЫ: Те же яйца, но в профиль предложил Сергей Соколов
    Ответ написан
    2 комментария
  • Как реализовать постоянную взаимосвязь ajax+php не перегружая сервер?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Как уже выше коллеги писали, websockets (что на пыхе нетривиально реализовать), на худой конец longpolling (что вполне реально, но это костыль в почти 19 году).
    Ответ написан
    Комментировать
  • Как сделать тяжелый импорт из excel 800к товаров?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Сконвертировать XLS посредством скрипта в SQL пакетами по 50к строк и пулять в базу из консоли.
    Ответ написан
    Комментировать
  • Как узнать ближайшую станцию метро к определённому адресу?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Станций метро конечное число, я складывал их координаты в базу, а потом по методу гипотенузы вычислял расстояния в попугаях от нужной точки до разных станций и брал ближайшие в определенном радиусе.

    Даже можно без базы решить, будет еще быстрее и более автономно. Даже без бэкенда можно, если на то пошло.
    Ответ написан
    Комментировать
  • React: как правильно загрузить картинку(php)?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    На тег формы вешается onSubmit={this.submitHandler}, в который прилетит агрументом evt. Через evt получаем доступ к userImage. Отправить можно через axios.

    В конструкторе такой фигней страдать, да еще с jQuery это весьма годное извращение. :)

    Вообще PHP с React это не очень сочетание, как только речь зайдет про Server Side Rendering во имя Seo, вот тут и поймешь, как здорово промахнулся с пыхой на бэке.
    Ответ написан
  • Есть ли рабочие примеры websocket?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Вебсокеты и PHP... Батенька знаток в извращениях... :D
    Ответ написан
    Комментировать
  • Где можно найти примеры тестовых заданий по php?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Часто в требованиях проходит понимание ООП, умение применять паттерны проектирования. Имхо тема мутная, потому что без грамотного наставника можно здорово внетуда "научиться". Но, все же. Мне лично ближе JavaScript с обоих концов интернет-канала.
    Ответ написан
  • Как развить навык проектирования приложения или как стать Senior?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Архитектура выкристаллизовывается по ходу работы над проектом. Ошибки в архитектуре, допущенные на начальном этапе разработки, очень дороги для исправления в последствии, но жизнь такова, что наперед никогда не знаешь всей предметной области и задач.

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

    Так же спасает автоматизация и кодогенерация, но тут необходим опыт. Я с 2006 года до 2011 собрал много грабель как фуллстэк веб девелопер, с 2009 года присматривался к ряду фреймворков, не срослось - написал свой, с тех пор полет нормальный. Необходимые задачи он решает и по части архитектуры берет на себя примерно 80% нагрузки. За 5+ лет я его потихоньку допиливаю когда возникают новые ситуации.

    Но это на бэкенде, а вот по части фронтенда полный ахтунг, да настолько, что пришлось снова перебирать доступные фреймворки. Остановился на реакте. Подумываю на бэкенде с пхп на ноду съехать, нужно будет переписать фреймворк, но там есть ряд сложностей, т.к. другие принципы работы приложения.

    В заключение добавлю, что как только появляются принципиально новые задачи, отработанная и отлаженная архитектура, хорошо показавшая себя за годы эксплуатации, может оказаться совершенно непригодной и придется прикручивать костыли и думать. Очень много думать... Снова...
    Ответ написан
    Комментировать
  • Какую книгу или видеокурс посмотреть по php oop, pdo, шаблоны проектирования?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Хочу написать route чтобы распарсить адресную строку, сделать чпу и в случае если такого адреса нет записывалось в логи и выдавало 404 ошибку.


    Вот тут банальный ЧПУ с автоматическим роутером, без ООП и прочих сложностей https://github.com/iCoderXXI/feedback-form-admin-panel
    Ответ написан
    Комментировать
  • Скрипт, выполняемый на JavaScript за секунду, на PHP за 30 секунд проходит только 20%. В чём причина?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Короче говоря херню ты написал, друже. вот оптимизированный код, отрабатывает за пару секунд.

    <?php
      for($a=9; $a>=1; $a--) {
        $a10 = 10*$a;
    
        for($b=9; $b>=1; $b--) {
          if ($a===$b) continue;
          $b100 = 100*$b;
    
          for($c=9; $c>=1; $c--) {
            if ($a===$c || $b===$c) continue;
    
            for($d=9; $d>=1; $d--) {
              if ($a===$d || $b===$d || $c===$d) continue;
              $d100 = 100*$d;
              $v2 = 1000*$d+$d100+$a10+$b;
    
              for($e=9; $e>=1; $e--) {
                if ($a===$e || $b===$e || $c===$e || $d===$e) continue;
    
                for($f=9; $f>=1; $f--) {
                  if (
                    $a===$f || $b===$f || $c===$f ||
                    $d===$f || $e===$f
                  ) continue;
                  $fc=$f*$c;
    
                  for($g=9; $g>=1; $g--) {
                    if (
                      $a===$g || $b===$g || $c===$g ||
                      $d===$g || $e===$g || $f===$g
                    ) continue;
                    $g10 = 10 * $g;
                    $g10a = $g10+$a;
    
                    for($h=9; $h>=1; $h--) {
                      if (
                        $a===$h || $b===$h || $c===$h ||
                        $d===$h || $e===$h || $f===$h || $g===$h
                      ) continue;
                      $v3 = $b100+10*$h+$f;
    
                      for($j=9; $j>=1; $j--) {
                        if (
                          $a===$j || $b===$j || $c===$j || $d===$j ||
                          $e===$j || $f===$j || $g===$j || $h===$j
                        ) continue;
    
                        if(
                          $d100+$g10+$j + 100*$j+$a10+$e + $v3 === $v2
                          && $fc/$j === $g10a
                        ) {
                          echo  "\n a=",$a,
                                " b=",$b,
                                " c=",$c,
                                " d=",$d,
                                " e=",$e,
                                " f=",$f,
                                " g=",$g,
                                " h=",$h,
                                " j=",$j,"\n\n";
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }


    Если вдруг не понял что к чему, объясняю, у тебя вложено друг в друга 9 циклов от 1 до 10, таким образом получается 10^9 итераций, т.е. миллиард. И ты все условия и вычисления упихал в самый внутренний цикл, и производишь их миллиард раз, причем в 95% ситуаций вообще в холостую. Я вынес все проверки и вычисления максимально наружу, насколько это позволяет логика, таким образом 95% итераций, холостых вычислений и пр. мусора просто не выполняется в принципе. Поэтому код теперь отрабатывает быстро, как и должен.
    Ответ написан
    7 комментариев
  • Какую книгу взять для полнейшего понимания ооп в php?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    ООП в любой среде, не только PHP, позволяет смоделировать процессы. Чтобы что-либо моделировать, нужно владеть предметной областью, т.е. иметь немалый опыт за плечами по решению конкретной проблематики каким-либо способом, в данном случае оптимально на голом PHP.

    Опять же, умные люди давно собрали все мыслимые и немыслимые грабли и сформулировали их в виде паттернов, антипаттернов и пр.

    Вообще чтобы начать годно программировать на ООП, лучше всего затесаться в команду, где его практикуют, например джуном или вообще стажером, и прям терпеть, колоться, рыдать, но продолжать есть кактус до полного переформатирования мозгов. И да, назад пути уже не будет...
    Ответ написан
    Комментировать
  • Как сохранить дерево из mysql в массив на php?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я бы за первый проход вычислил бы все отношения для каждого элемента, всю глубины вложенности.
    Вторым же проходом сгенерировал собственно дерево, раскладывая элементы в него.
    Ответ написан
    Комментировать
  • Как встроить php переменную в jquery скрипт?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Переменную ты либо зашиваешь в сам html при выдаче, либо подгружаешь аяксом, вебсокетами и иже. других путей передать данные от пхп в клиента не существует.
    Ответ написан
    Комментировать
  • Паттерны проектирования?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Паттерны - это опыт боли, страданий и пота огромного количества лучших разработчиков, и программистов. Можно сказать, что паттерны, как и правила дорожного движения - в некотором роде написаны кровью.

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

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

    А так, сам на сам, да на мелочи, это баловство и несерьезно.
    Ответ написан
    Комментировать
  • Переход из С++ в PHP?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я с PHP мигрирую потихоньку на JavaScript, оно мне, оказывается, ближе. Недавно вот потребовалось некоторый код перевести обратно с JavaScript на PHP, и я испытал массу непередаваемых ощущений, настолько уже привык к JS-style coding. Кода получилось раза в 2 больше, и гораздо менее удобочитаемого.
    Ответ написан
    Комментировать
  • Как, чем, кем проверить сайт на уязвимости?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Добавлю еще что настройки сервера, на котором вертится сайт, тоже роляют. Должен быть годный фаервол, который паразитные запросы сможет резать, не доводя до апача или под чам там сайт вертится.

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

    Что касается собственно php, в первую очередь нужно не доверять пользовательским данным, т.к. это прямой путь словить SQL-инъекции. Ловить XSS и пр.
    Ответ написан
    Комментировать