Ответы пользователя по тегу PHP
  • Как правильно деплоить?

    amark
    @amark
    rush less, feel more
    привет.
    Пойдем не по порядку.

    Первое – БД
    Для чего выносят на отдельный сервер? Делается это, как правило, когда первоначальный сервер не тянет из-за большого количества запросов к БД. У вас сейчас такая ситуация? Да – выносить на отдельный сервер. Нет – оставить сервера в покое.

    VPN – тоже оставьте в покое. Если надо выносить БД в отдельный сервер, то тогда иногда имеет смысл закрыть внешку и оставить только VPN.

    Docker – докер на проде? У вас точно такой серьезный ресурс, что нужно поднимать в день по несколько VDS и нужен докер? Когда на локале докер еще можно понять – удобство и без мусора. Но на проде? Или есть лишние деньги/ресурсы?
    Похоже, что докер тоже стоит оставить только на локале и в покое.

    Секретные ключи – это вообще никогда нельзя хранить в репозитории. Иногда можно использовать компромисс – зашифрованные файлы. Но тут нельзя быть в покое и следует всё проверить несколько раз.

    минутка занимательной теории:
    Как работает деплой? (пример из жизни в очень общих чертах для понимания принципиальной схемы)

    Разработчик отправляет пуш в гит. После этого гит кидает оповещение в CI&CD-сервис.
    CI&CD-сервис запускает свой процесс, согласно описанному в запушеной ветке протоколу (конфиг сервиса).

    Обычно, порядок действий в CI&CD-сервисе такой:
    – поднимается контейнер с ОС
    – в контейнере разворачивается репо
    – подтягиваются все зависимости, настраивается окружение, поднимается база с сидами.
    – накатываеются миграции
    – прогоняются тесты

    Далее запускается скрипт деплоя:
    – репо заливается на сервер, например, с помощью rsync или другого инструмента (в этом месте мы используем зашифрованные приватные ключи для доступа к конечному серверу)
    – на сервере запускается рутина обновления (например, накатить миграции, обновить конфиги, перезагрузить сервисы)

    По окончанию приходит уведомление о статусе. Например в слак.

    Все счастливы, разработчик отмечает успех (или устраняет результаты безуспешных тестов).

    P.S. Если у вас возникают эти вопросы, то, похоже, вы не DevOps'или раньше.
    И это не предмет для обиды или оскорбления, а, наоборот, предмет для размышления над сложностью решений. Сейчас создается впечатление, что вы хотите стрельнуть себе в колено, причем из дробовика.
    Ответ написан
    2 комментария
  • Зачем нужны абстрактные классы и интерфейсы в php?

    amark
    @amark
    rush less, feel more
    Сейчас читаю эту старую статью, и вспомнил про ваш вопрос.
    В статье пишут про принципы хорошей архитектуры ПО, и среди прочего объясняют, зачем нужны интерфейсы/абстрактные классы и т.п. Рекомендую.
    Ответ написан
    Комментировать
  • В чем отличие return bool, return array и Exception?

    amark
    @amark
    rush less, feel more
    Все три случая по-прежнему применяются. Всё зависит от ситуации.

    Вот хорошая статья, где описывается принцип, когда что возвращать чем отличается ошибка от exception.
    Ответ написан
    Комментировать
  • Как лучше организовать код?

    amark
    @amark
    rush less, feel more
    У меня сложилось впечатление, что вы изобрели велосипед.
    В общем-то в вашем тексте много разумных находок и выводов.
    Однако может вам имеет смысл выбрать какой-то фреймворк? Yii, Laravel, Symfony и т.п.
    Вы автоматом получите и структуру, и порядок работы, и разделение и кучу всего, что упростило бы вам жизнь. М?
    Ответ написан
    7 комментариев
  • Можно ли запускать цикл в цикле?

    amark
    @amark
    rush less, feel more
    Как говорится: "Можно всё. Но надо помнить, что у всего есть последствия".
    Вот тут для вас хороший пример того, как проверить свои действия.
    Ответ написан
  • Как замерить время отдачи данных от БД?

    amark
    @amark
    rush less, feel more
    <?php
     
    $start = microtime(true); // начало замера времени
    
    // сюда рабочий код запроса
    
    echo 'Скрипт был выполнен за ' . (microtime(true) - $start) . ' секунд'; // конец замера времени
    Ответ написан
    Комментировать
  • Как указать кодировку для задачи cron?

    amark
    @amark
    rush less, feel more
    просто в начале (первой строчкой после <?php ) указать setlocale
    Ответ написан
    Комментировать
  • Как оптимизировать мою функцию?

    amark
    @amark
    rush less, feel more
    Зачем столько раз делать один и тот же запрос? Почему бы все if'ы не сделать в одном цикле?
    Ответ написан
  • Какой backend фреймворк использовать для небольшого проекта?

    amark
    @amark
    rush less, feel more
    Я бы посоветовал yii.

    При всем потенциале холливара:
    Если поискать сравнения в интернете, то можно увидеть, что лидирующий в сравнениях аргумент — для для новичков порог входа в yii ниже (если сравнивать с laravel).

    Cms соответственно использовать нельзя,
    — не совсем увидел логики, почему нельзя?
    Ответ написан
    7 комментариев
  • Как проверить результат запроса sql?

    amark
    @amark
    rush less, feel more
    Примерно так
    Ответ написан
    Комментировать
  • Как правильно дать запрос в MySQL?

    amark
    @amark
    rush less, feel more
    и еще и 500 ошибку выдает, да?...

    if($selected = "SELECT `username` FROM `authme`") { // во-первых тут строка, а значит в кавычки!
      	echo "Success!"; // во-вторых вот это всегда будет выполняться
     } else echo "Bad Request!";


    И в этом коде нет ничего к базе. В условии проверяется "не null" ли переменная, т.е. сработало ли присвоение. А оно сработает. И потому всегда success

    Начинайте с азов.
    Ответ написан
  • Каким запросом можно изменить путь require?

    amark
    @amark
    rush less, feel more
    В псевдо-коде это бы выглядело примерно так:

    <? 
    if($userInput == "en") {
    require 'lang-en.php';
    }else{
    require 'lang-ru.php';
    }
    
     ?>
    Ответ написан
  • Как передать объект БД в класс?

    amark
    @amark
    rush less, feel more
    Зачем вам дополнительный объект DB? Если он нужен только для инициализации подключения к базе, то вы просто так расходуете память.
    Фактически, вы сделали класс-обертку над PDO. Хотя в текущей реализации я не вижу в этом никакой необходимости.

    Я бы не стал усложнять то, что без усложнения работает. Зачем городить лишние классы и объекты??
    Идите от потребности. Надо контролировать создание подключения? — делайте initDB(), не надо контролировать, а объект всегда создается при объявлении App(), то и класс лишний не нужен.
    Как кто-то сказал: "усложнять — легко, упрощать — сложно". Не усложняйте себе жизнь))
    Ответ написан
  • Как исправить 2 ошибки "Undefined offset" и "Only variables" в коде?

    amark
    @amark
    rush less, feel more
    Для начала хочу отметить, что Notice — это не ошибка. Это всего лишь предупреждение.
    Во вторых, похоже, что 29 строка может давать такую ошибку, если к скрипту обратились не так, как он ожидает.
    Видимо, приходить должно "язык/запрос", а приходит "язык/_ничего_". Потому, list($lang, $requestUrl) выбрасывает нотификейшн на переменную $requestUrl.

    Выведите себе для дебага содержимое переменной $root перед list'ом и проверьте, то ли приходит, что ожидает скрипт.
    Ответ написан
    1 комментарий
  • Как сделать SELECT * FROM ID IN() Readbean php?

    amark
    @amark
    rush less, feel more
    а в чем, собственно, заключается вопрос?
    массив в строку превратить? — implode
    Ответ написан
    Комментировать
  • Как сделать подчет строк?

    amark
    @amark
    rush less, feel more
    конечно считает, ведь в SQL-запросе нет никакой информации об этой переменной.
    Ответ написан
    Комментировать
  • Какой фреймворк для создания веб-форм самый лучший?

    amark
    @amark
    rush less, feel more
    Если остановитесь на чистом PHP, то предложу взять к нему простой JS-фрейморк, например — Backbone. Он очень легкий, однако даст вам простой "швейцарский нож", в том числе для валидации на клиенте.
    Если всё таки отойти от чистого PHP, то порекомендую:
    — Yii — достаточно простой фреймворк для входа "с нуля", с хорошими штатными утилитами для быстрой развёртки;
    — modx — еще один простой фреймворк, в котором можно научиться работать за час)

    И точно не надо трогать Zend — ведь вам не нужен комбайн для того, чтобы стричь газон на заднем дворике :)
    Ответ написан
    Комментировать
  • Как вернуть данные из ajax запроса в php функцию?

    amark
    @amark
    rush less, feel more
    1) а почему бы не сделать второй ajax-запрос и передать данные в php?
    2) почему бы не взять скрытое поле в форму и переходить к php через sumbit? соответственно, нужное поле внутри скрипта отлавливать в $_REQUEST'е
    Ответ написан
    Комментировать