• Почему не удается получить доступ к смещению типа string в строке?

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

    В ответе выше написана чушь.
    Обращаться к строке по индексу можно. И в РНР7, и в РНР 8. Без всяких предупреждений.
    К отдельным байтам (но не символам) в строке можно обращаться, указывая смещение в квадратных скобках:
    echo 'hello'[0];
    Но в сообщении об ошибке говорится конкретно про строковые ключи. А это уже действительно бессмыслица, никаких строковых смещений в строке быть не может. Что и написано черным по белому в ошибке.

    И проблема действительно находится выше, в совершенно дурацком присвоении пустой строки массиву.
    Если мы хотим использовать массив, то и присваивать начальное значение надо в виде пустого массива, а не строки.

    При этом отдельно проверять наличие $aUnit[$server['unit']] и $aUnit[$server['unit']][$server['game']] не нужно. Достаточно проверить на существование сразу конечный элемент.
    В 8.2 это можно красиво написать одной строчкой
    $aUnit[$server['unit']][$server['game']] ??= '';
    Но если почитать код дальше, то станет видно, что и здесь нам строка тоже не нужна. А снова нужен массив.
    Потому что в коде ниже эта строка разбивается через explode(???).
    То есть, надо написать
    $aUnit[$server['unit']][$server['game']] ??= [];
    $aUnit[$server['unit']][$server['game']][] = $server['id'];
    А ниже выкинуть всё от explode() до unset()
    spoiler
    Вообще, складывается ощущение, что исходный код писал либо ребенок, либо шизофреник - две разные личности, которые не видят код друг друга. Вот как с этим массивом например.
    Или вот этот кусок кода еще мне очень понравился
    $sql->query('SELECT `id` FROM `servers` LIMIT 1');
    if(!$sql->num())
        return NULL;
    $sql->query('SELECT `id`, `unit`, `game` FROM `servers` ORDER BY `unit` DESC');
    $all = $sql->num();

    Напоминает анекдот про ирландца, который перед тем как поспорить, выпьет ли он 10 кружек пива, сначала сбегал в соседний паб. Проверить, выпьет ли он 10 кружек пива.
    Ответ написан
    Комментировать
  • Как правильно разворачивать проект локально, написанный на php?

    Stalker_RED
    @Stalker_RED
    То что вы видите - не ошибка.

    В конфиге сервера нужно указать точку входа, скорее всего в вашем проекте это main.php
    Ответ написан
    Комментировать
  • Чем заменить установку переменных окружения Apache?

    Lynn
    @Lynn
    nginx, js, css
    Третий вариант, задавать переменные через map

    map $uri $APP_SETTINGS {
      default "";
      ~^/path1/ app-settings-12;
      ~^/path2/ app-settings-100500;
    }
    
    server {
      location ~\.php$ {
        fastcgi_pass ...;
        fastcgi_param APP_SETTINGS $APP_SETTINGS if_not_empty;
        ...
      }
    }
    Ответ написан
    Комментировать
  • Как заменить большое кол-во символов на другое?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Заменять хешированные пароли на дехешированные можно при помощи замены. В базах данные это UPDATE.

    P.S. Каков вопрос - таков и ответ, ни больше, ни меньше!
    Ответ написан
    Комментировать
  • Чей ip адрес адрес будет приходить?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Конечно IP-адрес удалённого сервера, с которого создалось соединение. Посетитель удалённого сервера к такому соединению имеет отношение только в том, что соединение создаётся для получения данных для этого посетителя.
    Ответ написан
    Комментировать
  • Как на PHP разделить склеенные буквы разного регистра?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Нужно не "разделять буквы разного регистра", а нормально обрабатывать разметку.
    Если в разметке были символы переноса строки в виде html-сущностей (<br>), то нужно выполнить их преобразование до вызова функции strip_tags:
    preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
    Ответ написан
    1 комментарий
  • У меня есть let x = 10 let y = "+" let w = 10, как мне их сложить?

    @DEMOS-OK
    Fullstack Web Developer \ Laravel Developer
    Можно используя функцию eval().

    console.log(eval(x + y + w));

    Но в случае, если получение действия будет происходить из пользовательского ввода, использование eval() может быть опасным.
    Тогда стоит ограничить отведенный пользователю набор действий:

    if (y === '+') {
        console.log(x + w);
    }
    Ответ написан
    Комментировать
  • Как реализовать рассылку смс?

    Adamos
    @Adamos
    По моему опыту, API для пополнения счета вам все равно не поможет.
    Опсосы (а конкретно - МТС и Мегафон) теперь для дозволения любой, хоть технической, рассылки в своих сетях требуют предоставить им гарантийное письмо от того, кто эту рассылку делает, и оплатить ежемесячную дань в 2000 - 2500 за эту роскошную привилегию.
    Без этих телодвижений вы ничего на них не отправите, а делать это за своих клиентов вы не имеете права.

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

    @BeatHazard
    Вы так все усложнили...
    Назначаете вручную одному пользователю нужные вам интервалы, затем берете его как шаблон и распространяете на нужную вам группу, либо берете значение из этого шаблона и вставляете в свой скрипт
    Вот простенький скрипт, который делает то, что вам нужно:

    $templateuser='a.khramov'
    $templatehours= Get-ADUser -Identity $templateuser -properties logonHours
    Get-ADGroupmember "msk-VPN_Users" |foreach {Set-ADUSer $_.samaccountname -Replace @{logonHours = $templatehours.logonHours} }
    Ответ написан
    Комментировать
  • Метод класса вписывается в класс который осуществляет действие или в класс над которым осуществляют действие?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Уфф, 5 раз прочитал, пока понял. Второе.

    Метод класса вписывается в класс который над которым осуществляют действие.
    Собственно, определение класса - это "данные и методы для работы с ними". С ними. А не с данными чужих объектов.

    Сущность Модератор в данном случае вообще не нужна, достаточно свойства в сущности Пользователь (кстати, откуда вы все берете этих "участников"? Участник бывает у события, а не у сущности. Вы же не говорите "участник 5А класса?")

    Связей здесь должно быть значительно меньше.
    Если модератор не упоминается ни в опросе, ни в добавленной книге, то и связи между ними никакой нет.
    В текущей схеме должна быть только одна связь: опроса с прошедшим его пользователем. Одним из свойств опроса будет экземпляр класса Пользователь. Причем это касается класса РезультатОпроса, которого нет на диаграмме. А он должен быть. И вот он будет связан с классом Опрос.

    Чего здесь не хватает - это интерфейса. Классов-контроллеров. Которые собственно эти методы и вызывают.
    Какой-нибудь BookController.add(), который принимает, скажем, два объекта, Пользователь и Инпут, и проверяет, является ли пользователь модератором. И если да, то создает объект Book, и используя данные из инпута, вызывает Book.add()
    И то же самое с опросами

    Еще по-хорошему должен быть BookRepository. Потому что если книга умеет сама себя добавлять в хранилище, то это считается плохим тоном. Должен быть отдельный объект Хранилище Книг, в котором и будут методы добавления и поиска.
    Ответ написан
    6 комментариев
  • Контейнер с приложением на PHP в docker завершает свою работу, как исправить?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Если контейнер на основе ubuntu, там должен быть шелл и возможность установить нативный модуль mod_php для Apache.
    А для работы php в отдельном контейнере с Apache - нужен php-fpm.
    Ответ написан
    Комментировать
  • Какие книги либо материалы можно использовать для изучения фреймворка aiogram?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    aiogram - это маленький и примитивный фреймворк сам по себе. Для его изучения достаточно прочесть документацию. Но до этого надо изучить Python, asyncio, принципы работы сетей в целом и протокола http в частности, желательно базы данных, чтобы хранить состояние, алгоритмы, вроде конечного автомата, чтобы управлять состоянием, совсем хорошо ещë и понимать Linux, ведь на каком-то сервере вашему ПО надо будет работать.
    Ответ написан
    Комментировать
  • Как сделать вывод части информации в консоль после ввода команды?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    пользоваться пагинатором more или текстовым просмотрщиком less
    ip a | more
    ip a | less

    или фильтровать нужные строки через какой-нить grep
    Ответ написан
    Комментировать
  • Как сделать вывод части информации в консоль после ввода команды?

    paran0id
    @paran0id Куратор тега Linux
    Умный, но ленивый
    Перенаправить в less:
    ip a | less
    Ответ написан
    Комментировать
  • Nginx. Как он конфигурируется?

    @SunTechnik
    ngingx смотрит файл /etc/nginx/nginx.conf ; или другой, заданный через ключ -c.
    В конфиге может быть строка вида:
    include /etc/nginx/conf.d/*.conf
    (добавить в конфиг все файлы оканчивающиеся на conf из каталога: /etc/nginx/conf.d

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

    YBB
    @YBB
    Если код вводить в консольном режиме (php -a), то будет обрабатываться построчно, как и положено классическому интерпретатору. Но для работы с http к php прикручен прекомпилятор в байт-код и OPcache - всё ради эффективности.
    Ответ написан
    Комментировать
  • Как сделать, что клиенту прилетал актуальный PDF-файл?

    Adamos
    @Adamos
    Выставить настройки кэша в заголовках ответа, отдающего файл.
    Для особо упертых браузеров, которые могут класть на эти заголовки (вроде Хрома) - отдавать файл каждый раз по другой ссылке (добавив ?ver=mtime, например).
    Ответ написан
    1 комментарий
  • Как в ЧПУ Битрикс установить #SECTION_CODE# корневого раздела на не последнего?

    через настройки никак, только ручками программировать
    Ответ написан
    Комментировать
  • Как правильно реализовать меню?

    Adamos
    @Adamos
    По-битриксовски - положить его в sect_inc.php в той папке, которая объединяет эти 8 страниц.
    Ответ написан
    Комментировать
  • Как почистить папку с 246к папок по ssh?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно использовать xargs, он сам поделит список аргументов, переданных через stdin, на такие блоки, чтобы они вписывались в лимит. Чтобы не было спецэффектов от всяких особых символов, можно использовать find -print0 | xargs -0 (символ с кодом 0 будет разделять имена файлов вместо стандартного переноса строки):

    find условия -print0|xargs -0 rm -rf

    Однако GNU find сам умеет удалять файлы с помощью -delete:

    find условия -delete

    Ещё может быть проблема, что подобная операция помешает работе сайтов из-за нагрузки на диск, это можно решить с помощью приоритетов для процессов (nice) и ввода-вывода (ionice), тогда удаление будет по возможности выполняться в фоне:

    nice -n19 ionice -c3 команда

    (Если используется find|xargs, то это нужно передать xargs)
    Ответ написан
    Комментировать