Ответы пользователя по тегу PHP
  • "Global" или "&"?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Объявляя глобальную переменную в области видимости функции - вы прописываете даете доступ к ней из функции и для переменной доступ к функции (именно так в двух направлениях). При этом локальная изменения переменной влияет на значение глобальной, но и изменения глобально тоже влияют на значение переменной внутри функции.

    При этом возникают непредвиденные ситуации, сложные к выявлению.
    Например: Если при выполнении функции у вас случилось исключение . Обработчик исключения может с легкостью изменить глобальную переменную. Но если функция не учитывает эту "асинхронность", то далее может случится все что угодно!!! - зацикливание, деление на ноль или, что еще хуже, случайное прохождение логики по другой ветке (которое будет сложно выявить)...

    Последствия применения глобальных переменных самые плачевные:
    • сложно обнаруживаемые ошибки;
    • безопасность - "хромая на две ноги";
    • сложности в рефакторинге и понимании кода;
    • сложность в масштабировании стремящаяся к инифинимуму;
    • не прогнозируемое значение переменной;
    • возможная инициализация/реинициализация переменной в разных местах кода.

    Что относится к косвенному вызову/привязке переменной или как это ещё называют "внедрение зависимостей" (Dependency injections) - значоком "&"...
    Такая переменная может хранится в любой области видимости, а не только в глобальной. Но проблемы - те же, что и при использовании глобальной переменной, может даже и более усугубленные. Так как ещё более сложно выявление ошибок и возможна перелинковка таких параметров между разными функциями использующими друг-друга!

    Принципы такие:
    • Если вы используете глобальные переменные, то масштабируемость и отказоустойчивость кода будет скорее всего никакая. Код сразу в топку;
    • Если косвенная привязка появляется в параметрах функции - это явный показатель того, что функция слишком сложна и скорее всего нужно разделить функцию на меньшие, или создать класс на основе этой функции, или разделить класс на составные.
    Ответ написан
    Комментировать
  • Почему большой расход RAM в фоновых PHP скриптах?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Как на меня то 300 штук фоновых это многовато. Нужно ли столько в риллтайм?

    Все запросы не риллтайм к фоновому скрипту - выделить, объединить в queue и/или перенести на исполнение rest server/service. Пусть фоновый скрипт/сервис/сервер (в единственном или небольшом числе) исполняет их потихоньку вытягивая из очереди.

    P.S. Просто перенеся функциональность фонового скрипта на rest api ничего не поменяется. Будет тоже количество соединений. И "те же грабли, только в профиль."
    Ответ написан
    3 комментария
  • Почему не обрабатывает скрипт?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    $result -> bindValue(':mail', $_POST['mail'], PDO::PARAM_STR);      
       // Параметр из массива не тянется... только значение


    P.S. md5 ОБЯЗАТЕЛЬНО выкинь из паролей, пользуйся как минимум sha. Изучи функцию password_hash...
    Ответ написан
  • Как подойти к реализации PSD->HTML->PDF->image или PSD->HTML->image->PDF на PHP?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Если вы конвертируете страницу сначала в картинку, то потом в PDF её конвертировать нету никакого смысла!!!
    Это например: приведет к объединению текста в картинку, что сильно снизит качество печати готового PDF и уничтожит возможность пользователя копировать текст.

    Потому не вижу проблем в вашей концепции. Но вообще лучше wkhtmltopdf.org
    Рекомендую только сделать таблицу стилей для печати. А PDF, по стилям близкий к CSS таблице для печати страницы - вот её и нужно подключать при экспорте в PDF.
    Ответ написан
    Комментировать
  • Как удобно написать большой RegExp на нескольких строчках?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Удобнее вот так: regex101
    Ответ написан
    Комментировать
  • Как убрать плавающую точку?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Используй хаккерский прием - "целые дробные".
    Возьми изначально cnt умноженное на 10000, и сохраняй все числа челыми.
    Прибавляй в целых числах, не пользуйся дробными.
    Дели обратно на 10000 только при выводе, тогда не будет разницы даже если сконвертит не правильно.
    Ну и сравнивай естественно с умноженным на 10000 целым значением.

    P.S. А ещё лучше вместо умножения сделай сдвиг "<<" на n разрядов. И вместо деления двигай обратно ">>" при выводе.

    var cnt = getCoookie('timer');
    ...
    var timer = setInterval( function() {
    cnt += 10;   // cnt += 0.0001
    ...
    if ( cnt >= 10152501 ) ...
    }
    Ответ написан
    Комментировать
  • Платежную систему легче с нуля написать или изменить?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Переведи на e-commerce...

    С азовыми знаниями PHP за перепысывание не берись, уйдут недели времени. Даже на допиливание уйдет больше времени. Если бы было 1000 товаров тогда возможно да, но наверно было бы проще конвертнуть базу.

    P.S. Но если ты перфекцыонист, то все эти рассуждения никчемны. Далай как хочется.
    Ответ написан
    Комментировать
  • Как лучше делать редактирование статей?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Один контроллер для обработки этого обьекта;
    3 экшина:
    1. (post) создание обьекта - вызывает подготовку данных для новой записи, вызывает модель записи и перекидывающий на экшин редактирования;
    2. (post) редактирование обьекта - вызывает модель чтения данных из базы (если данные не готовы) и переходит к выводу вьюва самой формы;
    3. (ajax) запись обьекта - вызывает модель сохраняющую данные, посылает сообщение о результате.
    3 процедуры подготовки данных.
    1. Cоздания;
    2. Записи;
    3. Чтения.
    Две модели:
    1. Чтения информации SELECT ..., возвращающий данные из базы;
    2. Сохранения информации В конкретном случае она чуть сложннее. Но общем, в виде:
      INSERT INTO table (a,b,c) VALUES (1,2,3)
        ON DUPLICATE KEY UPDATE a = VALUES(a), b=VALUES(b), c=VALUES(c), id=LAST_INSERT_ID(id);



    Преимущество такого метода очень существенное: данные отсылаются/сохраняются/репортят но страница редактирования в браузере не перегружается (а еще можно их сохранять в localStorage, и сверять во втором экшине ).
    Плохо только, что создается чистая запись, которая может отстаться чистой и в последствии. И потом возможно нужно будет консолидировать значущие записи, удалив новые не редактированные.
    Ответ написан
    Комментировать
  • Как добавить сортировку к выводу постов из WP?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Плагин Intuitive Custom Post Order...

    hijiriworld.com/web/plugins/intuitive-custom-post-order
    Ответ написан
    Комментировать
  • Модульный фреймворк на PHP, как защитить?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Ты не стой стороны лезеш. Сделай отдельный сервер-сервис(котором управляют только ты и может быть доверенные) закрытый от других модулей, и отвечает на их ПРАВИЛЬНЫЕ-запросы, файлами или данными. Все неправильные запросы идут лесом. И все все твои проблемы отпали.
    Ответ написан
    Комментировать
  • PHP как удалить слова по их номерам в строке?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    class myFilter {
      static private $exclusions;
      static private $excluded;
      static private $value;
    	
      public function __construct(Array $exclusions) {
        self::$exclusions = $exclusions;
      }
      static function check($f, $v) {
        return ($f and !(self::$value >= $v[0] and self::$value <= $v[1]));
      }
      static function getFilter($val) {
        self::$value++;
        if ( !array_reduce(self::$exclusions, "myFilter::check",true) ) {
          array_push(self::$excluded, $val);
          return false;
        } else 
          return true;
      }
      public function getExcluded() {
    	  return implode( ' ', self::$excluded );
      }
      public function reduce($str) {
        self::$value = -1;
        self::$excluded = [];
        return implode( ' ', array_filter(explode(' ', $str), "myFilter::getFilter" ) );
      }	
    }
    $f = new myFilter ( [[2,2],[15,39],[78,78],[15,39],[154,154]] );
    $text = $f->reduce($text);
    echo $f->getExcluded();
    Ответ написан
  • При переходе со страницы на страницу человек перестает быть авторизированым. Как это исправить?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    А востановить пременную из сессии забыл?
    session_start();
    
    if ($userData['password'] == $password) {
    $connect = true;
    $_SESSION['connect'] =$connect;
    } else {
       $connect = $_SESSION['connect'];
    }
    if ($connect == true) {
    echo "yes";
    }
    else {
    echo "no";
    }
    Ответ написан
  • Многомерные массивы, как вытащить последний?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    yourarray->results[0]->media[0]

    в твоем коде
    $output = curl_exec($ch);
    $a = json_decode($output,true);
    
    foreach ($a as $array) {
        foreach ($array[0] as $key=>$value) {
          if ( is_array($value) ) {
            foreach ($value[0] as $k=>$v) {
              echo " <b>".$k."</b>".": ".$v;
            }
          } else {
             echo " <b>".$key."</b>".": ".$value;
          }
        }
    }
    Ответ написан
    4 комментария
  • PHP возможна ли реализация фильтрации всех запросов POST/GET глобально?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Я использую самописный статический фильтрующий класс.
    Ответ написан
  • Как создать скрипт для оповещений PHP?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Я понимаю, что у вас МНОГО мелких действий которые генерируются автоматически. Если НЕТ - используйте CRON.

    Метод с демоном (гарантированное выполнение в срок):
    - проверка роботы демона при запросе к серверу от любой страницы еcли демон не работает запускаем.
    - демон читает с базы следующую метку времени и ждет её наступления;
    - при достижении срока читает следующую метку времени;
    - выполняет нужное действие;
    - проверяет не прошла ли следующая метка времени;

    Метод без демона (гарантированное выполнение):
    - метод запускается при запросе от пользователя например в index.php, или настройте предзагрузку модуля в .htaccess;
    - читаем с базы значение последнего обновления и список всего что нужно сделать до текущего момента;
    - запускаем дествия асинхронно/синхронно как удобно;
    Ответ написан
    3 комментария
  • Кто как делает html формы?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Современная форма - это комплекс решений, в разных областях. И поставить один модуль который решит проблему - не возможно в принципе. Каждый специалист может собрать свою часть. Но без архитектора который скажет как это скрутить в кучу, будет велосипед с квадратными колесами - ехать можно но по специальной дороге.

    1. Разметка:
      • пишу всегда вручную;
      • длинные селекты тянутся из базы посредством шаблонизатора (например серверного TWIG);
      • прописываю полностью с атрибутами валидации HTML5 (благо все современные браузеры потдерживают);
      • выдумывать JS-велосипеды для валидации не стоит уже давно;
      • для зависимых полей пока есть простой js-клаcс сверяющий их.
      • drag&drop файлов давно уже работает без JS;
      • для подгрузки изображений в страницу на стороне клиента js-класс.

    2. Стили:
      • один раз прописаны стили для разных-форм на уровне тегов и взаимоотношений тегов (в итоге все формы на сайте виглядят в одном стиле);
      • класы только для самой формы, определяет как одна выводится: локально, модально или в теле контента;
      • кому сложно написать 300 строчек CSS, пользуйтесь фреймворками;
      • ни в коем случае не делайте стили форм для каждого раза как онные встречаются (придет дядя даст по рукам :) ).

    3. Отправка:
      • пользуйтесь action, submit и target;
      • нужны данные как модальное окно есть iframe;
      • ajax с формами не использую он изначально предназначен для другого:
        • для подгрузки полей в селектор, но только если селектор очень большой;
        • для поиска налету.


    4. Сервер:
      • использую специальный статический класс, который делает валидацию и XSS/injection-очистку;
      • как минимум PDO с подготовленными запросами;
      • Doctrine;

    5. База-данных:
      • наименования полей в базе соответствуют наименованиям полей в формах (с префиксом);

    Ответ написан
    1 комментарий
  • Как сказать по-русски слово yield???

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    yield {__};
    Выдать { __ } - подразумевается "выдать значение и ждать";

    По-украински пишется и звучит без проблем: Їлд (буде Їлдити, може Їлданути, генератор Їлданув (прошлое время), генератор Їлдане (будущее время) ).
    Ответ написан
    Комментировать
  • Защита сайта на php от парсинга без ущерба для поисковиков?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Защищатся нужно на уровне дизайна приложения на стороне клиента, а не сервера.

    НАПРИМЕР: Создавать страницу каждого клиента без структурных данных, просто общую с названием клиента и пачкой рекламных зазывалочек. Данные получать AJAX-ом после явного клика на кнопку/изображение (но не тег A). А адрес динамически генерировать js-том на основе например перекодированого одноразового-тикета, id клиента и id информации (но не php-генерируемый). Никаких явных ссылок на странице или в коде js!!!

    Кроме этого нужно блокировать множественные запросы с одного ареса. И выставить месячное ограничение для гостевых пользователей N в день/неделю/месяц/год.

    Думаю вам такого достаточно. Індексироваться така страница будет на уровне названий фирм. А спарсить по простому автоматом не смогут - нужно будет написать специальный скрипт.

    Сложное, что можно придумать это на стороне сервера динамически генерировать JS работающий с данными и запросами. Это усложнит работу програмиста на порядок.

    Но!
    !!!СЕРЕБРЯНОЙ ПУЛИ НЕТ!!!
    Нужно строить многофакторную защиту. Если все зделать с достаточным уровнем сложности, быдлокодер не сможет обойти. А профессиональный уважающий себя програмист не станет таким заниматься.
    Ответ написан
    3 комментария
  • Что быстрее PHP или Node.js?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Все будет зависить от ответов стороннего АPI.
    1. Если АPI будет в состоянии обработать асинхронные запросы быстро (100ms), не ставя их в очередь - то node.js или просто страничка с асинхронными вызовами будут обрабатывать быстрее;
    2. Если же API для обработки запроса нужно будет делать серьезные действия (например 500 ms), то экономия будет ничтожна.

    P.S. Синхронные вызовы обрабатываются сервером с более высоким приоритетом и априори получают результат раньше асинхронных. И возможно виигрыш с асинхронными не покроет разницы. Так что если увас уже написан скрип то переписывать его нет смысла.
    Ответ написан
    4 комментария
  • Как сверстать капчу в виде слайда?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Всегда делаю капчу через слайд, пока роботы не раздупливают, если собирать биометрию с пользователя.
    Но процес достаточно сложный: клиентская+серверная части. Если нужно могу прикурутить за вознаграждение...

    Но наверное для тебя проще ГООГЛОВСКОЙ рекапчей воспользоваться. Там просто клик по селекту. ReCAPTCHA
    Ответ написан
    Комментировать