Ответы пользователя по тегу PHP
  • Не работает Curl+Proxy на сервере?

    vitaly_74
    @vitaly_74
    https://success.outsystems.com/Support/Enterprise_...
    Код ответа HTTP 502 - неверный сервер шлюза указывает на то, что сервер, выступая в качестве шлюза или прокси, получил недопустимый ответ от вышестоящего сервера. В типичных производственных сценариях перед сервером (-ами) находятся обратный прокси-сервер или балансировщики нагрузки. Представьте, что клиент отправил запрос на Сервер. Однако клиент не может сделать это напрямую, поэтому он подключается к прокси, устанавливая соединение client> proxy. Затем прокси создает прокси-сервер подключения. Ошибка HTTP 502 - неверный шлюз возникает в следующих случаях:
    Время ожидания прокси-сервера истекло до завершения запроса.
    Если соединение прокси> сервер падает.
    Когда ответ от сервера недействителен

    я более склоняюсь к тому, либо сервер долго думает. т.е. обрабатывает долго какой то запрос. на локалке может работать, только потому что базы на локальном и проде отличаются и информация разная, и следовательно может произойти где то зацикливание, либо наоборот долгая обработка информации.
    Ответ написан
  • Почему не читаются / не отправляются заголовки?

    vitaly_74
    @vitaly_74 Автор вопроса
    проблема была в следующем, на сервере установлен CPanel, и Cpanel удалял заголовок Authorization для своей безопасности.
    решения было 2, что то сделать с Cpanel (это отдельный заказ у фрилансера).
    и изменить заголовок авторизации например на tokenApi и уже из него что то парсить.
    Ответ написан
    Комментировать
  • Паттерн "Фабричный метод": как получить конкретный продукт из конкретной фабрики?

    vitaly_74
    @vitaly_74
    (получаю название нужной фабрики и продукта из запроса — в контроллере)
    Например в yii2 есть такая штука как сценарии у моделей, вы можете использовать сценарий как имя продукта.
    либо вы можете написать валидатор, который из запроса будет определять, какой параметр использовать для конструктора фабрики.
    Например, если у вас много платежных систем, то пользователю можно дать на выбор 4 ссылки (4 платежные системы) в роутеры которых зашиты их названия, т.е. pay/yandex-money или pay/webmoney
    тогда в клиентском коде вы должны будете что то типо такого сделать:
    ... 
    Validator / Scenario / Router
    ...
    $payMethod = $validator->scenario() // yandex-money
    ...
    $paymentSystem = new PaymentFactory($payMethod);
    $paymentSystem->pay();//оплачиваем через яндекc деньги
    ...
    Ответ написан
    2 комментария
  • Как создать экземпляр класса в фабричном методе?

    vitaly_74
    @vitaly_74
    1. case сам по себе не есть плохо, и это не считается дурным тоном. т.е. использовать конструкцию case можно и нужно.
    2. Давайте подумает чем характеризуется объект экземпляра класса, а потом перейдем к фабрике.
    Объект прежде всего характеризуется данными хранящимися внутри него. Т.е. Фабрика должна внутри себя хранить то что она выпускает (строит) и всю информацию о нем.
    3. не используйте рефлекшен. это плохо это дурной код, без крайней необходимости не нужно. Обычно рефлекшены не используются в клиентском коде, только непосредственно в самих фреймворках. но раз вы задаете вопросы про фабрики, вы фреймворк не пишите, а значит и использование рефлекшенов вам не нужно.
    4. Взгляните на оператор new (например, new Factory()) по сути оператор new и есть фабрика, которая из класса создает объект с уникальными (а может и не всегда) наборами данных.
    5. в ссылке выше, вам дали информацию по рефакторингу switch но если прочитать там, написано,
    не стоит трогать если
    Зачастую оператор switch используется в фабричных паттернах проектирования (Фабричный метод, Абстрактная фабрика) для выбора создаваемого класса

    вот в данном случае не нужно трогать.
    Почему лучше использовать switch?
    - потому что когда через год, или два зайдете в эту фабрику, навряд ли вы захотите разбираться в рефлекшенах, и не интуитивных выражениях. А когда все есть в switch вы сразу увидите перед глазами какие объекты может выпускать фабрика + по аналогии создать подобный объект используя менее трудозатрат (почти копипаст).
    Вот тут хороший пример фабрики:
    https://refactoring.guru/ru/design-patterns/factor...
    или можно так:
    /**
     * Интерфейс Продукта объявляет операции, которые должны выполнять все
     * конкретные продукты.
     */
    interface Product
    {
        public function operation(): string;
    }
    
    /**
     * Конкретные Продукты предоставляют различные реализации интерфейса Продукта.
     */
    class ConcreteProduct1 implements Product
    {
        public function operation(): string
        {
            return "{Result of the ConcreteProduct1}";
        }
    }
    
    class ConcreteProduct2 implements Product
    {
        public function operation(): string
        {
            return "{Result of the ConcreteProduct2}";
        }
    }
    
    class Factory implements Product{
       private $product;
       function __construct(string $productClass){
           switch($productClass){
               case default:
               case ConcreteProduct1::class:
                          $product = new ConcreteProduct1();
               break;
               case ConcreateProduct2::class:
                          $product = new ConcreateProduct2();
               break;
           }
           $this->product = $product;
       }
    
       public function operation(): string
        {
            return $this->product->operation();
        }
    }
    
    $product = new Factory(ConcreateProduct1::class);
    echo $product->operation();


    В данном случае Разрешено менять старый код, но только в пределах switch.
    Ответ написан
    7 комментариев
  • Как сделать зависимость более абстрактной?

    vitaly_74
    @vitaly_74
    Попробуйте использовать интерфейсы. Но из проекта в проект. с методами не угадаете, поэтому из проекта в проект вам придется использовать паттерн адаптер + интерфейс. адаптер чтобы угадать с именем метода, в новом проекте. но это всё геморно. но ответ на ваш вопрос я дал
    Ответ написан
  • Извлечь имя из текста на php возможно?

    vitaly_74
    @vitaly_74
    кроме регулярок и словаря ничего не поможет.
    Ответ написан
    Комментировать
  • Как поменять одним запросом в таблице sql?

    vitaly_74
    @vitaly_74
    Попробуйте использовать ключевое слово IN и подставть туда массив
    например было:
    SELECT *
      FROM contacts
     WHERE last_name = 'Bernard'
        OR last_name = 'Boy'
        OR last_name = 'Tomas';

    стало
    MySQL
    SELECT *
      FROM contacts
     WHERE last_name IN ('Bernard', 'Boy', 'Tomas');

    По сути при переборе вы делаете тоже самое.
    Ответ написан
    1 комментарий
  • Как перевести сложный массив в таблицу?

    vitaly_74
    @vitaly_74
    array_map
    Ответ написан
    Комментировать
  • Как лучше сделать авторизацию в mvc php?

    vitaly_74
    @vitaly_74
    так сделайте базовый контроллер, и от него наследуйтесь. в базовом контроллере сделайте необходимые проверки.
    Ответ написан
    Комментировать
  • Worker php? что лучше?

    vitaly_74
    @vitaly_74
    а по вашему как воркеры будут работать? также через циклы. мне кажется вы меняете шило на мыло. У меня проблема такого же формата. нужно перебирать цепочки валют (в цепочка по 5 пар валют) а цепочек около 100 тыс. раз в секунду. пока крона за глаза хватает. Проблема может быть в следующем: скрипт не успеет что то обработать за 5 минут. поэтому на вашем месте если бы у меня была такая задача. я бы разделил ее на 2 части, получение информации - 1 задача. работа с информацией - 2 задача.
    Также решение может быть вот такое: посчитайте сколько человекочасов вы потратите на решение этой проблемы, умножьте на свою ставку в час. и посмотрите, сколько стоит увеличить характеристики вашего сервера, чтобы он обрабатывал информацию быстрее
    Ответ написан
    Комментировать
  • Почему php echo заменяет русские символы знаками вопроса?

    vitaly_74
    @vitaly_74
    попробуйте поменять кодировка файла на utf8 если не поможет, то у самой таблицы, из которой вытаскиваете данные поменять кодировку (поле "сравнение"), или у конкретного столбца. и поменяйте на utf8
    Ответ написан
    Комментировать
  • Почему не работает форма обратной связи?

    vitaly_74
    @vitaly_74
    вы код то покажите и что у вас там не работает.
    Ответ написан
    Комментировать
  • На чем исполнять несложный интернет-магазин?

    vitaly_74
    @vitaly_74
    хм, сам пишу на yii2, для моих задач (большая cms) его хватает за глаза, а симфони мне кажется для более профи. готовое не вижу смысла ставить. Но посмотрите в сторону vtiger - функционал можно от туда скопировать. Сам собираюсь универсальную crm писать с разграничением прав. поэтому можем объединить наши усилия. я думаю если бы он был крайне универсальным - его бы хватило под ваши нужды с головой.
    Ответ написан
    2 комментария
  • Почему ввод SERVER['REQUEST_URI'] приводит к ошибке 404?

    vitaly_74
    @vitaly_74
    странно, но заголовок про SERVER['REQUEST_URI'] - а вопрос про другое.
    В вашем случае скорей всего не верно настроен конфиг апача, и не правильно прокинуты папки в самом конфиге, может конфиг апача покажите?
    Ответ написан
  • Yandex music: как скачать полный трек?

    vitaly_74
    @vitaly_74
    только сначала атворизация как пользователь, а потом эммитировать прослушивание - он во время прослушивания будет давать части mp3 их склеиваешь и сохраняешь. только так. гемору побольше = но зато работает)
    Ответ написан
    Комментировать
  • Нужна помощь с rest api для cloud mail.ru?

    vitaly_74
    @vitaly_74
    если вы используете Basic авторизацию то
    "Authorization: Basic " .  base64_encode("EMAIL:PASSWORD")

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

    vitaly_74
    @vitaly_74
    или, попробуйте освоить такой паттерн как цепочка обязанностей. у меня собственно так оно и работает, длинный алгоритм разбит на несколько независимых функций, которые начинают работать при достижении какого то условия (например денежные средства зачислились).
    Ответ написан
    Комментировать
  • Где надо записать SDK?

    vitaly_74
    @vitaly_74
    Если вы хотите чтобы просто все работало, то пишите прям в индексе, не заморачивайтесь пока на счет архитектуры, вы нужно просто для начала запустить. пишите в индексе, функциональщину, потом вы почувствуете не удобство (при большом кол-ве кода) и вот потом уже будуте его структурировать. а так пишите в index.php
    Ответ написан
    Комментировать
  • Какой подход правильнее?

    vitaly_74
    @vitaly_74
    второй вариант лучше. однозначно. просто потому что он без статических методов. и вот метод getAccessToken - я бы сделал приватным, и вообще добавил бы его в конструктор.
    Получится когда вы говорите: новый Апи - и у него в уже есть какие то изначальные данные. это полезно. (в конструкторе в какую нить приватную переменную запишите file_get_contents)
    Ответ написан
  • Как исправить ощибку в php?

    vitaly_74
    @vitaly_74
    $json = json_encode([
            'type' => 'error',
            'messege' => $errors[], //тут ошибка. нужно $errors[0], или какая там у вас ошибка по номеру (или по ключу)
        ], JSON_UNESCAPED_UNICODE);
    Ответ написан
    Комментировать