Задать вопрос
  • Какое железо выбрать для домашнего сервера?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    > Хочется практиковаться в изучении linux, двигаться куда-то в сторону девопс

    Для этого достаточно виртуалки на рабочем компе. Ну или совершенно убитого десктопа или подержанного ноута.
    А ещё лучше - в плане "практиковаться в изучении linux" - поставить его на рабочий комп.

    Откуда эти завиральные идеи про выделенный комп, да ещё и с каким-то специальным серверным железом, про 8 ядер! - совершенно непонятно. Всё перечисленное ещё 15-20 лет назад работало на 1-2 ядерных серверах в продакшене. А не дома, с нулевой загрузкой.
    Ответ написан
    Комментировать
  • После переезда на новый хостинг перестал работать сайт?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В чём проблема, вам РНР говорит человеческим голосом: ошибка синтаксиса. У вас лишняя } в 114 строке.
    Надо смотреть файл целиком. Причём не тот, в котором скобка на 115 строке, а тот, в котором на 114.
    Проверяйте файл.

    А вся эта лирика - версия РНР, хостинг, "файл не менялся" не имеет к проблеме никакого отношения.
    Ответ написан
    4 комментария
  • Чем собирать статистику запросов от клиентов на сервере?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    > 100-300 за сутки для каждого. логи сервера не подходят для этого.

    довольно забавное заблуждение.
    Редис вам понадобится при нагрузках 100-300 в секунду. Для всего, что меньше, идеально подойдут текстовые логи. А вы заодно, освоите один из самых базовых навыков для работы с сервером.

    Логи пишете в файл. чтобы получить лог по определенному name пишете в консоли
    grep name log.txt
    Ну или при желании читаете в пхп и выводите в красивой табличке
    Ну или совсем лень, то можно писать в БД и выбирать запросами.
    Ответ написан
    Комментировать
  • Как в выборке sql обратиться к предыдущей записи?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы внутри while обратиться к предыдущей записи, надо в самом низу цикла записывать текущую строку в переменную.
    Тогда при следующей итерации цикла в ней будет предыдущая запись.
    С любовью, Капитан Очевидность.
    Ответ написан
    Комментировать
  • Как в командной строке сохранить полный путь к файлу для вставки его в другом месте при смене директории?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Смысл проблемы непонятен.
    Даже если "путь далёк", то чтобы "сменить директорию в терминале" всё равно придётся набрать его весь. Ну так тогда можно и сразу и набрать его. В том смысле что нет разницы, набирать ли "длинный путь" в cd или в mv

    Но если отвечать на вопрос буквально, то
    в исходной папке пишем pwd
    копируем вывод в буфер
    переходим в другую папку
    пишем mv пробел
    вставляем скопированный путь
    добавляем к нему имя файла
    пишем пробел точка
    нажимаем ентер

    Ну и напомню, что при построении "длинных путей в терминале" очень помогает автодополнение по кнопке TAB
    Ответ написан
    3 комментария
  • Как правильно вернуть данные из рекурсивной функции?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Здесь не нужна рекурсия. Чтобы дойти до корня, достаточно использовать примитивный цикл.
    public function getRootCategory($id) {
        do {
            $data = Category::find()
                    ->select(['name', 'parent_id'])
                    ->where(['id', $id]);
                    ->first();
            $id = $data['parent_id'];
        } while ($id > 0);
        return $data['name'];
    }
    Ответ написан
    5 комментариев
  • Не приходят сообщения с контактной формы, Извините, данные не были переданы?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. Перед отправкой формы нажимаете F12
    2. В открывшихся инструментах разработчика выбираете вкладку Сеть
    3. Отправляете форму
    4. Во вкладке Сеть появляется новая строчка. Нажимаете на неё и там появляется своя панелька на которой надо выбрать вкладку Ответ
    5. Нажимаем на эту вкладку и смотрим, что приехало с сервера. Если самому непонятно, то постим сюда

    Если там не будет ничего полезного, то надо смотреть логи сервера. Где-то в ISPManager-е должен быть раздел с логами, там нужен лог ошибок.
    Ответ написан
    2 комментария
  • Видит ли провайдер то, что я скачал оффлайн страницу сайта в Google chrome на телефоне?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    "Скачивание не требует интернета" - это какая-то бессмыслица. Скачивание разумеется требует интернета. А тут наверное имеется в виду "открыл скачанную ранее"? В этом случае по идее никаких запросов быть не должно, но тут зависит от яваскрипта, и он может в принципе выдать.
    Ответ написан
    2 комментария
  • Как общаются микросервисы в реальных проектах?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Как правильно написал Сергей Горностаев, всё зависит от задачи.
    Например, у вас маркетплейс, и в нем микросервис отзывов о товаре. Это совершенно некритичный функционал, и поэтому никакие очереди тут разумеется не нужны.
    Фактически, фронт может даже напрямую к нему обращаться, и выводить заглушку, если отзывы недоступны.
    Ну или внутри, при формировании страницы товара, код может дёрнуть микросервис и поставить заглушку, если тот недоступен. Дергать опять же можно по-разному, но для универсальности можно делать тот же REST, причём во внутреннем контуре даже без SSL (и его накладных расходов).

    Брокеры же нужны там, где важна целостность. Например оповещения, по почте или СМС. Закинул оповещение в очередь, и дальше оно всё равно уйдет пользователю даже если конкретно в этот момент сервис отправки недоступен.
    Ответ написан
    Комментировать
  • Точь в точь ли маппятся поля json-сущности на поля в таблицах базы данных?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я просто оставлю это здесь: отображение объектов на реляционную БД - это Вьетнамская война компьютерной науки
    Ответ написан
    2 комментария
  • Как подключится к ubuntu на virtualbox через wsl по ssh?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо в настройках сети для виртуалки выбрать Bridged adapter, вместо NAT, который там стоит по умолчанию.
    Ответ написан
    Комментировать
  • Можно ли настроить запросы к php через вебсокет и http одновременно?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Разумеется можно. Никаких нюансов в одновременной работе нет, поскольку тут нет никакой "одновременности". php-fpm и websocket - это два разных сервиса, которые могут располагаться на одном и том же сервере или на разных, но в любом случае никак не пересекаются. В добавление к текущему веб-серверу вы просто запускаете вебсокет сервер и посылаете на него вебсокет запросы из браузера.

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

    1. Да.
    2. Как говорилось выше - можно. Любой сервер в сети по определению обеспечивает работу множества сервисов, количество которых ограничено только количеством свободных портов. Можно поставить два веб-сервера и пять вебсокет серверов.
    3. Нет, разумеется. unix сокет это как раз внутренняя кухня сервера, но мы же говорим о сетевом взаимодействии. А tcp взаимодействие nginx и php-fpm тут вообще не при чём.
    Ответ написан
    8 комментариев
  • PHP. Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В РНР разбираться не обязательно, надо минимально разбираться в поддержке софта.
    Варианты, по степени убывания идеальности
    1. Обновить версию Джюмлы
    2. В настройках пхп отключить ошибки E_DEPRECATED
    3. Залезть с грязными ногами в файл /var/www/u2340392/data/www/test.kaikova.ru/modules/mod_bt_contentslider/tmpl/default.php и на 26 строке при вызове функции trim() дописать ?? '' после имени переменной. Т.е
    -trim($var);
    +trim($var ?? '');
    Ответ написан
    Комментировать
  • Как развивать логику в программировании?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я бы рекомендовал в качестве первого языка РНР. Он куда проще, читается практически как натуральный английский язык.

    <?php
    $numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    foreach ($numbers as $number) {
        if ($number % 2 === 0) {
            echo "$number is even\n";
        } else {
            echo "$number is odd.\n";
        }
    }

    Ничего лишнего, переменные визуально отличимы от ключевых слов, читается легко, "перебираем массив по одному, назначая очередной элемент переменной $number. Проверяем, если остаток от деления на 2 равен нулю, то выводим что чётное, а иначе - что нечётное".
    Пет проект, опять же, вообще ума не надо: скачал РНР на комп, открыл консоль, выполнил
    php -S localhost:8888 -t "путь к папке с РНР файлами"
    открыл в браузере localhost:8888/test.php и уже готов веб-сайт, ваяй - не хочу.

    Сравним с гошечкой
    package main
    import "fmt"
    func main() {
        numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    
        for _, number := range numbers {
            if number%2 == 0 {
                fmt.Printf("%d is even\n", number)
            } else {
                fmt.Printf("%d is odd\n", number)
            }
        }
    }

    Вроде всё то же самое, но на английском уже не прочтёшь, "для подчеркивание запятая number равно расстояние numbers". Даже вывод какой-то с подвыподвертом. И все эти сокращения, как будто за каждую букву вычитают из зарплаты. Действительно выглядит как набор переменных и непонятных аббревиатур.
    Ответ написан
  • Как называется такая вложенность в php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ответ написан
    Комментировать
  • Почему возникает ошибка (T_VARIBLE)?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Когда пишет unexpected '$sql' (T_VARIABLE) это значит, что проблема в конце предыдущего выражения.
    Поднимаем глаза, смотрим на конец предыдущего выражения, и видим, что с ним не так.
    Ответ написан
    Комментировать
  • Помощь в PHP проверка данных из файла только выбранные значения?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    У вас файл создан под Уиндоуз, в которой в качестве разделителя строк используется последовательность \r\n
    Разбивая по \n, вы в конце каждой строки оставляете висеть символ \r, и в итоге при сравнении совпадает только последний элемент файла, после которого нет перевода строки

    Для чтения файлов в РНР есть специальная функция. Которая понимает любые переводы строк, и умеет их автоматически удалять.
    $array = file(JPATH_SITE.'/list.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

    И всё сразу начнёт находиться.
    Ответ написан
    Комментировать
  • Как в PHP найти строку, которая содержит или не содержит символ?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    "содержит или не содержит символ" (а точнее - предыдущее выражение) в регулярных выражениях обозначается знаком вопроса. Шаблон \. ?ru найдет как site.ru, так и site. ru
    Ответ написан
    Комментировать
  • Какую кодировку выбрать для немецкого языка?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Как обычно, три ответа - и ни одного по делу

    Кодировка таблиц в MySql должна быть utf8mb4.
    Ответ написан
    Комментировать
  • Что выбрать для хостинга сайта: 2 ядра до 5 ГГц или 6 ядер до 3.2 ГГц?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для конкретного сайта уже ответил Everything_is_bad: для текущей нагрузки оба сервера - это оверкилл, даже для DLE с их идиотcкими xfields в БД. Хватит и одного ядра с гигом памяти.

    Но если отвечать на сферический вопрос в вакууме "что выбрать для хостинга", то ответ освершенно очевиден: второй. Эти два сервера вообще несравнимы. И дело даже не в том, что веб сервер - это по определению параллельные запросы, а вся нагрузка приходится на БД (особенно в случае идиотской БД dle) - то есть нам количество ядер куда важнее их частоты, которая всё равно будет молотить впустую. Но там ещё и памяти больше на порядок. То есть даже если бы у второго сервера было всего два ядра, то в общем случае всё равно следовало бы выбрать его. Просто потому что основная нагрузка - это БД, а скорость БД - это память.
    Ответ написан
    3 комментария