Ответы пользователя по тегу PHP
  • Разве Composer бесполезен в 2017?

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

    1. Композер реально бесполезен в некоторых проектах. Нужно смотреть от конкретной ситуации и целей. Приведу несколько примеров для понимания:

    • Проект полон легаси-кода. Ну как в вашем случае. 5.4, серьёзно? Вероятно этот проект просто на "дожитии", его надо поддерживать в состоянии "работает и ладно", а параллельно вероятно планируется его полный ремейк на нормальных технологиях.
    • CMS-ки. Ну тот же Битрикс. Сейчас еще суют туда композер, когда не знают толком нативные для Битрикса либы и его возможности из коробки. Но в 2017-м прямо 100% не стоит лезть в него с композером.
    • Проект банально очень простой. Ну нет необходимости подключать либы. Делаем допустим обычный CRUD сервис. На кой хрен в него дирижерами тыкать?
    • Делаем микросервисы. Близко к прошлому пункту. Большинство микросервисов реализуют всего лишь пару простейших операций, и их цель - весить мало, работать быстро. Грузить их каким-то мусором, пусть даже легковесным - совсем не нужно.
    • Упоротость безопасности. Бывают компании, которые блокируют всё - ресурсы, либы, технологии. Вот допустим мы в такой компании, которая запретила 90% рнр-шных либ. На кой вам композер?


    2. Технологии ради технологий - не нужны. Композер это не "серебрянная пуля", а это инструмент со своими плюсами и минусами. Стоит понимать уместность любого решения. Если на каком-то проекте он не используется, то вероятно (хоть и не точно).

    Ваш вопрос мне напомнил собеседование в 2020-м кажется году.
    Я тогда собеседовался на позицию CTO к одному небольшому производителю мебели. У них была сайт-витрина (ну знаете, таких тысячи - товары есть, а купить там их нельзя. По сути визитка для каждого товара, с минимумом опций). И они начали его делать на микросервисах. Ну прямо подняли кубернетес и начали его делать.
    Это первое что меня напрягло, так как очевидно, что для подобного сайта микросервисы - не нужны абсолютно. Ставишь вордпресс/битрих/тильду - и потребности бизнеса решены за бесплатно и 0 времени.
    Второе что меня окончательно отпугнуло от той технической команды - они делали микросервисы на Ubuntu + Laravel. Это прямо ад. Какой Alpine, какой Slim/Lumen, зачем это всё :) И опять же, обосновали это тем, что:
    Убунту - самая популярная линуксовая система
    Ларавель - самый популярный фреймворк
    Микросервисы - самый прорывной паттерн

    И вроде бы всё верно. Но:
    1. Мозайка не складывается
    2. Им это всё нахрен не нужно. Ни убунту, ни ларавель, ни микросервисы, ни куча разрабов. Потому что задача такая - сделать "сайт-визитку".

    При этом микросервисы я обожаю, композер юзаю, тесты пишем :)
    Но в нужном месте, в нужное время.
    Ответ написан
    Комментировать
  • Почему не отвечает API Bitbucket Server, выдает XSRF Error?

    vekov
    @vekov Автор вопроса
    Вообще проблема была в лишних хедерах, сам себе поставил палки в колёса. Работающий вариант будет с таким набором:

    $headers = array(
        'cache-control: max-age=0',
        'upgrade-insecure-requests: 1',
        'sec-fetch-user: ?1',
        'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
        'x-compress: null',
        'sec-fetch-site: none',
        'sec-fetch-mode: navigate',
        'accept-encoding: deflate, br',
        'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
        "Content-Type: application/json",
        'X-Atlassian-Token: no-check',
    );
    Ответ написан
    Комментировать
  • Почему получаю ошибку от RabbitMQ?

    vekov
    @vekov Автор вопроса
    Довольно глупая история получилась, просто авторизация на этом облачном сервисе не работает похоже. Поставил на отдельном VPS rabbitmq-server и всё завелось без проблем.
    Ответ написан
    Комментировать
  • Как работать с сессиями в php?

    vekov
    @vekov Автор вопроса
    Проблема была довольно таки наглядная. Заключалась в выводе ошибок и лишней проверке.

    Использовал error_reporting(E_ERROR | E_PARSE);
    Чтобы не выводились предупреждения о том, что переменная не определена.

    А потом почитав немного еще доков по сессии, решил что проверка в общем-то лишняя. Оставил просто session_start(); Потому что она не только запускает новую сессию, но и продолжает существующую. Следовательно в доп проверке - нет смысла.
    Ответ написан
  • Почему не отправляется письмо на почту?

    Не работал с модхом, но я бы посоветовал проверить работает ли функция mail()

    <?php
    $success = mail('example@example.com', 'My Subject', $message);
    if (!$success) {
        $errorMessage = error_get_last()['message'];
    }
    ?>


    Только вместо адреса - свою почту подставь.

    Если не работает - смотри логи. Скорее всего в /var/log/maillog - это файл.
    Ответ написан
  • Что за ошибка в логах сервера?

    Кавычка закрывает строку после s

    И попробуй так:
    preg_replace("[^a-zA-Z0-9\s'\:\/\[\]\-\pL]",'', $str);
    Ответ написан
    Комментировать
  • Почему не срабатывает git commit в shell_exec()?

    vekov
    @vekov Автор вопроса
    Для отладки стоит использовать такую схему:

    $git_branches = exec('git push origin master:'.$_GET["REMOTE"].' 2>&1', $stdin, $stderr);


    То есть shell_exec меняем на exec, и добавляем "2>&1"; Тогда сможем видеть ошибки.

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

    Ну так тебе надо например ceil(14/10). Это допустим если твоя смс 14-я, а элементов на странице - 10.
    То есть
    $currentID = 14;
    $maxPageElements = 10;
    $currentPage = ceil($currentID/$maxPageElements);
    Ответ написан
    1 комментарий
  • Почему дублируются исходящие письма?

    vekov
    @vekov Автор вопроса
    Кажется понял. Частично :) Письма копировались на ящик. который был указан в sendmail_path, в настройках файла bitrix.env. Только все равно не очень понимаю причину и откуда берутся те адреса, которые в копии...
    Ответ написан
  • Актуален ли SOAP в PHP?

    Года два назад работал с SOAP, для кастомной взаимосвязи 1С с Битрикс. Вообще хорошо к нему отношусь, иной раз огорчаюсь когда разработчики другой стороны желают работать по иным протоколам.
    Ответ написан
    Комментировать
  • Как отсортировать массив по значениям нескольких ключей?

    vekov
    @vekov Автор вопроса
    Спасибо за ссылку на мультисорт, Владислав Тишин .
    Среди примеров там нашел нужное решение:

    function array_orderby()
    {
    	$args = func_get_args();
    	$data = array_shift($args);
    	foreach ($args as $n => $field) {
    		if (is_string($field)) {
    			$tmp = array();
    			foreach ($data as $key => $row)
    				$tmp[$key] = $row[$field];
    				$args[$n] = $tmp;
    		}
    	}
    	$args[] = &$data;
    	call_user_func_array('array_multisort', $args);
    	return array_pop($args);
    }
    
    $arObjects = array_orderby($arObjects, 'Тип', SORT_ASC, 'Номер объекта', SORT_ASC);
    Ответ написан
    Комментировать