Задать вопрос
  • Как распределить число равномерно?

    Fragster
    @Fragster
    помогло? отметь решением!
    $amount = 5;
    $num = 3;
    
    $rest = $amount;
    
    for($i = 0; $i < $num; $i++) {
    	$a = floor($rest / ($num - $i));
    	echo("$i: $a\n");
    	$rest -= $a;
    }
    Ответ написан
    3 комментария
  • Как сделать поиск в многомерном массиве по ключу?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    1. Открываем документацию.
    2. Внимательно читаем.
    3. Видим, что у функции есть третий аргумент, который как раз управляет тем, что будет передано в callback.
    4. ???
    5. Profit.


    Но зачем всё это, если можно написать $arr['clients']['client1']? Для этого ключи в ассоциативном массиве и существуют, чтобы по ним обращаться к элементам.
    Ответ написан
    2 комментария
  • Как добавить на свой форум систему Очков за донат?

    @maksam07
    Очевидно же, что необходимо написать фрилансеру.

    На форуме это выглядит как обычное пополнение баланса аккаунта со своей конвертацией в местную валюту (монетки) и скриптами для обмена/торговли. Форум, видимо, самописный, поэтому готовый плагин скорее всего не найти конкретно под него. Для других форумов пополнение баланса, возможно, даже будет в виде чего-то +- готового.
    Ответ написан
    5 комментариев
  • Почему Dockerfile видит одну переменную, но не видит вторую?

    Lynn
    @Lynn
    nginx, js, css
    https://docs.docker.com/engine/reference/builder/#...

    ARG объявленные до FROM попадают в global scope. И на практике их можно использовать напрямую только в FROM.
    Что бы их было видно внутри сборки их нужно заново объявить внутри сборки.

    # Arguments.
    ARG NGINX_VERSION
    ARG APP_CODE_PATH_CONTAINER
    
    # Install nginx.
    FROM nginx:${NGINX_VERSION}-alpine
    
    # Load scripts.
    COPY scripts/* /tmp/scripts/
    RUN chmod -R 777 /tmp/scripts/
    
    # объявляем ещё раз. Как можно ближе к реальному месту использования что бы не испортить кеширование директив выше.
    ARG APP_CODE_PATH_CONTAINER
    
    # Modify configuration.
    RUN /tmp/scripts/modify_config.sh /etc/nginx/conf.d/default.conf "__NGINX_ROOT" ${APP_CODE_PATH_CONTAINER};
    
    ...
    Ответ написан
    Комментировать
  • Как достучаться до докер контейнера из браузера?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Потому что стучаться надо не на локалхост, а по имени контейнера.
    Ответ написан
    Комментировать
  • Как сделать Docker server из компьютера?

    Тебе нужно это:
    https://docs.docker.com/engine/reference/commandli...
    https://blog.codefarm.me/2022/06/06/how-to-run-doc...
    Не обращай внимание, что это Windows - конфиги все те же самые.
    Ответ написан
    Комментировать
  • Как спарсить данные с сайта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А не проще парсить напрямую, без цикла?
    $usdkzt = $data->find('a[href="#USDKZT"] .currency-round__round .big', 0)->innertext();
    Ответ написан
    1 комментарий
  • С каким интервалом времени установить команды на cron?

    Можно использовать flock (lock-файл) для синхронизации процессов и не позволять определенным работать параллельно
    https://simpleit.rocks/linux/shell/prevent-running...

    P.S. Как рекомендовали в комментариях, правильнее работать с очередями задач, а не через крон. Если в проекте нет RabbitMQ / NATS и т.п., наиболее легковесным вариантом будет Redis
    Ответ написан
    Комментировать
  • PHPStan проверка свойства класса при наследовании?

    @nolotion
    стан тебе все правильно говорит - ты объявляешь параметр объекта класса A, а обращаешься к атрибутам которых там нет.
    если у тебя кейс "а я так не вызываю" - то и пиши правильную сигнатуру метода: public static function price(B $objectB)

    потому что если твой говнокод в классе C будет использовать другой разработчик - то он передаст тебе какой-нибудь объект D extends A без опшинов и будет прав, потому что ты сам написал такой контракт
    а твой код упадет
    Ответ написан
    Комментировать
  • Как привязать postgis к postgres в docker?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно просто использовать образ postgis вместо образа postgres. Образ postgis/postgis унаследован от postgres и вполне его заменяет.
    Ответ написан
    2 комментария
  • Как отловить ошибку в дочернем вызову функции?

    Stalker_RED
    @Stalker_RED
    Это не обычное исключение. Нехватка памяти - это аварийная ситуация, при которой скрипт завершается.
    Но вы можете отловить ее при помощи register_shutdown_function().

    UPD: вот тут еще рекомендуют зарезервировать кусок памяти заранее, чтобы освободить ее когда поймаете ошибку
    https://stackoverflow.com/questions/8440439/safely...

    Но лучше по возможности подправить вашу func3, чтобы она освобождала память как только может.
    Ответ написан
    Комментировать
  • Как сделать проверку числа в php?

    Stalker_RED
    @Stalker_RED
    см. операторы сравнения, там есть больше-меньше.

    см. арифметические операторы, там есть вычитание.
    if и while вам тоже нужно линкануть, или c основными управляющими структурами вы уже знакомы?

    Ну и возможно вы неправильно поняли задачу, и вам нужен остаток от деления.
    Ответ написан
    Комментировать
  • Как скачать упакованное Web-приложение из docker?

    Viji
    @Viji
    DevOps Engineer
    1. Через собственный докер реестр
    2. Через архив gzip
    https://docs.docker.com/engine/reference/commandli...
    Ответ написан
    Комментировать
  • Почему при обращении к api сервиса, запущенного в докер контейнере, при ошибке возвращается неполный текст ошибки?

    @afanasiyz
    Javascript-разработчик
    Здравствуйте.
    Считается нормальным для сервисов иметь два режима для сервисов бэкэнда: дев и прод режимы.
    Включенный дев режим (когда вы локально стартуете, это часто по умолчанию дев режим) значит что вы будете получать все возможные логи и все ошибки в ответах.
    При запуске в докере, на моей практике весьма часто, по умолчанию ставят прод режим, и сервис работает как на проде - не сообщает об ошибках совершенно
    Ответ написан
    1 комментарий
  • Не правильно работает idex.php, где ошибка?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    enaen, вы не только путаетесь в названиях файлов (idex.php и sAndmail.php - ярчайший тому пример), но еще и два раза дали один и тот же код sEndmail.php. А самое главное: совершенно непонятно ЧТО ЖЕ ИМЕННО у вас не работает?! Поэтому ответить вам конструктивно, дать совет - не представляется возможным, сорри.
    Ответ написан
    Комментировать
  • Почему $_FILES пустой?

    Tokishu
    @Tokishu Автор вопроса
    Что?
    Я тупой и не прописал форме параметр enctype="multipart/form-data"
    спасибо Danny Arty
    Ответ написан
    Комментировать
  • Как работает htmlspecialchars()?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну уж для такой-то простой функции должно быть достаточно написанного на странице документации.
    И, в частности, про ENT_QUOTES ;)

    Эта функция заменяет спецсимволы, которые являются управляющими в контексте HTML, на безобидные HTML-сущности. Вот и всё.
    Чисто визуально управляющие символы будут выглядеть так же, как и должны, но в коде не будут представлять ни малейшей опасности.

    Для XSS важно, будут ли экранироваться одинарные кавычки или нет, если одинарные кавычки используются для ограничения атрибута.
    Пример

    <?php $name = "' onclick='alert(\"pwned!\")"; ?>
    <input value="<?=htmlspecialchars($name) ?>"> Не важно. Весь текст так и заключен в двойные кавычки
    <input value='<?=htmlspecialchars($name) ?>'> Важно. Закрыли одинарную, вписываем, что хотим

    Во втором случае этот код отрендерится, как
    <input value='' onclick='alert(&quot;pwned!&quot;)'>
    (но при этом &quot; отрендерятся в двойные кавычки, и в onclick будет уже валидный яваскрипт
    alert("pwned!")

    А с взведенным флагом ENT_QUOTES мы получим
    <input value='&#039; onclick=&#039;alert(&quot;pwned!&quot;)'>

    И хотя значение внутри атрибута отрендерится, как ' onclick='alert("pwned!"), но оно все целиком будет внутри атрибута value.

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

    К счастью, РНР уже позаботился о вас и ваших друзьях. Начиная с версии 8.1, флаг ENT_QUOTES ставится по умолчанию. И приведенный выше пример будет работать только на устаревших версиях. Так что ручное добавление уже уходит в область легаси-практик.

    Чтобы не ломать пальцы, каждый раз набирая всё это htmlspecialchars ENT_QUOTES, толковые джуны всегда пишут пользовательскую функцию-макрос, типа
    function esc($var) {
        return htmlspecialchars($var, ENT_QUOTES);
    }

    Правда, надолго с этой функцией не задерживаются, потому что она годится только при обучении. А любой проект сложнее, чем домашняя страничка про любимого котика, в обязательном порядке уже должен для вывода использовать специальный шаблонизатор, например Twig. Где весь вывод идет с помощью специального оператора, который уже по умолчанию экранирует HTML
    <input value="{{$name}}"> Не важно. Все уже проэкранировано до нас

    Важно помнить, что это экранирование работает только в контексте HTML.
    Если выводим данные внутри кода яваскрипт, то htmlspecialchars поможет как мертвому припарки. И в этом случае надо использовать json_encode.

    Ну и разумеется, надо не забывать комбинировать все варианты экранирования.
    Например, код яваскрипт, который пишется в атрибут HTML тега, надо весь целиком экранировать c с помощью htmlspecialchars. А данные для этого кода - c с помощью json_encode:
    <button onclick="<?= htmlspecialchars("window.open(".json_encode($name).")", ENT_QUOTES) ?>">
    Ответ написан
    3 комментария
  • Первое предложение о работе, как поступить?

    Steel_Balls
    @Steel_Balls
    Считай, что тебе сильно повезло. Джуна да ещё и на такой бэкграунд...
    Будешь дураком, если откажешься
    Ответ написан
    Комментировать
  • Первое предложение о работе, как поступить?

    Судя по обозначенным минусам - вы уже для себя всё решили.

    Я бы посоветовал, тк это первый опыт, всётаки сходить на испытательный, а если все беспокойства оправдаются - со спокойной душой уйти


    Зарплата - 500 долларов до испыта, 700 - после.

    Есть неиллюзорный шанс, что:
    1. К долларам это ни разу не привязано
    2. После испытательного так и останется 500.


    Дело в том, что позвали меня на позицию Full-stack(junior). Если бы это был фулстек веб(нода+реакт), допустим, скорее всего я бы согласился.

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


    Всему можно научиться. Уточняй какой стек и думай, хочешь ли ты в этом развиваться.


    Так же из-за специфики работы, пм будет общаться с заказчиком, но будут очень частые случаи, когда надо будет созваниваться с заказчикам, уточнять какие-то моменты + презентовать продукт по результатам работы.

    Это норма для небольших компаний.


    3.Знакомые опытные ребята говорят, что фулстек джунов не существет и это вообще треш.

    Фулстек сеньоров тоже)
    Если хочешь жёстко по хардам прокачиваться, то надо более узко специализироваться.
    Ответ написан
    Комментировать
  • Первое предложение о работе, как поступить?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Джуны и в лучшие времена были не нужны, а теперь тем более. Поэтому хвататься надо за любую возможность, а потом сжав зубы получать свой первый год непрерывного опыта, с которым будет проще потом устраиваться.
    Ответ написан
    1 комментарий