Задать вопрос
  • Как округлять числа?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    нет точного условия

    1256 => 1300, а почему не 1250?
    138 => 140, а почему не 100?

    ну а в целом, если нужно округление, например до сотен, то делим на 100, округляем и умножаем на сто.
    Ответ написан
    3 комментария
  • Как менять Title у сайта каждые 30 минут?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    $titles = [
        '7:00' =>  "Название сайта one",
        '7:30' =>  "Название сайта two",
    ];
    $half_hour = date('G:i', floor(time()/1800)*1800);
    echo $titles[$half_hour] ?? "Default title";
    Ответ написан
    2 комментария
  • В чем заключается проблема haystack/needle PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Проблема в том, что в разных функциях аргументы haystack и needle находятся на разных позициях.
    in_array(mixed $needle, array $haystack, bool $strict = false): bool
    strripos(string $haystack, string $needle, int $offset = 0): int|false

    Аналогично с позициями callback и array
    array_reduce(array $array, callable $callback, mixed $initial = null): mixed
    array_map(?callable $callback, array $array, array ...$arrays): array
    Ответ написан
    1 комментарий
  • Почему выдаёт ошибку? Подключился через MAMP PRO к локальному хосту и попытался реализовать форму регистрации, но выдаёт ошибку, почему?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Задавать вопрос "почему мой код не работает" бесполезно.
    Просто потому что код может не работать примерно по миллиону причин. Запаришься все перечислять.
    Причём эти причины к самому коду могут не иметь никакого отношения.
    Всегда надо задавать вопрос "как я могу узнать, почему код не работает".

    Чтобы узнать, почему РНР код не работает, надо прочитать сообщение об ошибке РНР. В данном случае мы его не видим, а видим только сообщение веб-сервера о том, что РНР завершился с ошибкой.
    Чтобы увидеть ошибку РНР, надо сделать две вещи:
    1. Убедиться, что РНР генерирует сообщения об ошибках. Для этого во-первых, всегда должен стоять максимальный уровень генерации ошибок, error_reporting(E_ALL);, и во-вторых, программист не должен сам себе стрелять в ногу, насильно подавляя сообщения об ошибках. И никогда не использовать оператор подавления ошибок, @.
    2. На время разработки поставить режим вывода ошибок на экран, ini_set('display_errors', 1);. На боевом сервере, соответственно, этот режим должен быть выключен, а логирование наоборот - включено.

    И только после получения сообщения об ошибке можно уже приходить на Хабр с вопросом. Но сначала предварительно погуглить, потому что все вопросы уже задавали по миллиону раз.
    В данном случае вероятной причиной может быть нестандартный порт mysql. Но опять же, гадать нет смысла, надо сначала увидеть сообщение об ошибке.

    Отдельно отмечу, что в таком виде регистрацию делать бессмысленно, тут сплошная SQL инъекция, то есть кто угодно сможет узнать чужой пароль, залогиниться под чужим именем или вообще зайти без пароля. Все SQL запросы, в которых участвуют переменные, в обязательном порядке должны выполняться через подготовленные выражения, с заменой переменных на знаки подстановки.
    Кроме того, пароль в обязательном порядке должен стойко хэшироваться, функцией password_hash()
    Ответ написан
    Комментировать
  • Ошибка phpstorm+Xdebug не работает в чем может быть дело?

    @xrj
    Столкнулся с такой же проблемой. Раньше все работало, а после обновления версии Open Server перестало, хотя все конфиги правились точно так же.

    Ответ для себя нашел здесь: https://devnet.jetbrains.com/message/5478634 в последнем сообщении.

    Мне помогла установка xdebug.extended_info в 1, в конфигах он теперь прописан явно равный 0
    Ответ написан
    8 комментариев
  • Что за код на 10000 строк?

    Это минифицированный код.
    Спрашивай у автора, где исходники
    Ответ написан
    Комментировать
  • Передать значение в форме?

    @alexalexes
    <form action="/index.php" method="POST" >
      <input name='pers_delete' type='hidden' value="сюда подставляете значение переменной"/>  
      <input name='submit' type='submit' value="1" class='del_pers'/> 
    </form>

    <?php
       if (isset($_POST['submit']))
       {
         echo $_POST['pers_delete'];
       }
    ?>
    Ответ написан
    Комментировать
  • Почему Redis начал тормозить?

    2ord
    @2ord
    Наверное, при замере смешано время запроса к Redis и обработки данных.
    Ответ написан
    Комментировать
  • Как перевести минуты в часы с округлением до 15 минут?

    Lynn
    @Lynn
    nginx, js, css
    Поделить на 15
    Округлить
    Поделить на 4
    Ответ написан
    Комментировать
  • Как сделать чтобы пользователь мог управлять только собственными комментариями?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    1. Нужно реализовать механизм аутентификации пользователя, чтобы вы могли быть уверены, что запрос поступает от пользователя с ID X. Это не обязательно должен быть логин и пароль, но какой-то механизм обязательно должен быть.
    2. У комментария должно быть поле "автор", в котором будет храниться ID пользователя.
    3. В коде редактирования нужно сделать проверку на совпадение ID автора с ID пользователя.


    В качестве альтернативы ID пользователя может быть IP, но это гораздо менее надёжная проверка.
    Ответ написан
    Комментировать
  • Как получить график громкости аудио без его воспроизведения?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Декодирование аудиоданных из аудиофайла с помощью WebAudio Api можно действительно делать без воспроизведения этого файла. А это значит, что это может происходить по ходу загрузки страницы, и клики при этом не нужны.
    <html>
    <head>
    <meta charset="utf-8">
    <title>Визуализатор</title>
    <style>
    #canvas{
        position: absolute;
        top: 50px;
        left: 0px;
        background: #333;
    }
    #progress{
        position: absolute;
        top: 50px;
        left: 0px;
        background: rgba(255, 155, 0, 0.5);
        width: 0px;
        height: 256px;
    }
    </style>
    </head>
    <body bgcolor=#444>
    <audio id=audio src="sound.mp3" controls></audio>
    <canvas id=canvas width=512 height=256></canvas>
    <div id=progress></div>
    <script>
    var audio = document.getElementById("audio");
    var ctx = canvas.getContext("2d");
    var color_L = "#7cf", color_R = "#f7c"; // Цвета осциллограмм левого и правого стереоканалов
    var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
    audio.onplay = function(){b = setInterval(function(){progress.style.width = Math.floor(audio.currentTime / audio.duration * canvas.width) + "px"}, 100)};
    audio.onended = function(){ 
        this.currentTime = 0;
        clearInterval(b);
        progress.style.width = "0px";
    }
    var source = audioCtx.createBufferSource();
    var request = new XMLHttpRequest();
    request.open('GET', audio.src, true);
    request.responseType = 'arraybuffer';
    request.onload = function(){
        var audioData = request.response;
        audioCtx.decodeAudioData(audioData, function(buffer){
            source.buffer = buffer;
            data_L = buffer.getChannelData(0);
            data_R = buffer.getChannelData(1); // Если аудиофайл моно - поменяйте в этой сроке единицу на ноль.
             // При несоответствии количества стереоканалов - ошибка в консоли и код не работает.
            for(var i = 0; i < data_L.length; i++){
                var x = Math.floor(i / data_L.length * canvas.width);
                var L = data_L[i] * canvas.height / 4;
                var R = data_R[i] * canvas.height / 4;
                if(Math.floor(i / 16) == i / 16){ // Число 16 для больших аудиофайлов лучше побольше. Нужно подбирать.
                    ctx.fillStyle = color_L;
                    ctx.fillRect(x, canvas.height * 0.25 + L, 1, -L);
                    ctx.fillStyle = color_R;
                    ctx.fillRect(x, canvas.height * 0.75 + R, 1, -R);
                }
            }
        },
        function(e){"Error with decoding audio data" + e.err});
    }
    request.send();
    canvas.onmousedown = progress.onmousedown = function(e){
        progress.style.width = e.pageX + "px";
        audio.currentTime = e.pageX / canvas.width * audio.duration;
    }
    canvas.ondblclick = function(){audio.play()};
    ctx.fillStyle = color_L;
    ctx.fillRect(0, canvas.height * 0.25, canvas.width, 1);
    ctx.fillStyle = color_R;
    ctx.fillRect(0, canvas.height * 0.75, canvas.width, 1);
    </script>
    </body>
    </html>
    62bb7dc72e0ba998610708.jpeg
    Ответ написан
    Комментировать
  • Как устроен запрос в базу данных для вывода древовидных комментариев?

    @romicohen
    Системный Архитектор
    Для каждого камента делаешь поле parent_id куда пишешь id родительского камента

    voila!))
    Ответ написан
    2 комментария
  • Можно как то суммировать эти цифры использую цикл php?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    array_sum(range(10, 40, 2));
    Это?
    Ответ написан
    1 комментарий
  • Как на php отрисовать динамическую картинку?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    рассматривал реализацию через GD библиотеку, но как то сложновато и громоздко получается,
    Ничего особо сложного, просто много кода. Это нормально. Берутся готовые блоки, выстраиваются в структуру, рисуются на холсте и выводятся. Не нравится гд - возьми имажик.
    Ответ написан
    2 комментария
  • Как запретить запуск скрипта по крону больше 1 раза?

    @Barmunk
    /usr/bin/flock -w 600 /var/tmp/myscript.lock /root/myscript.sh


    Эта комманда запустит /root/myscript.sh и создаст lock-файл для данного процесса. Пока он активен, новый вызов данного скрипта не произойдет.
    После завершения программы, блокировка файла снимается и процесс может быть снова запущен.
    Параметр -w 600 определяет время ожидания комманды flock на освобождение lock-файла.
    Для моментальной отмены выполнения процесса используйте параметр -w 0, для ожидания же бесконечно долгого времени параметр нужно опустить.


    https://pingtool.org/ru/using-flock-to-ensure-only...
    Ответ написан
    Комментировать
  • Как создать сайт для повышение уникальности текста?

    Awilum
    @Awilum
    Частный разработчик, ментор и преподаватель курсов
    Реально
    Ответ написан
    Комментировать
  • Можно ли передать POST запрос на 2 сраницы разом?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Замени ссылку https://yoomoney.ru/quickpay/confirm.xml на свой собственный php обработчик. В этом php обработчике вытаскивай данные из массива $_POST и далее сохраняй их куда надо, а дальше отфутболивай пользователя дальше на оплату обычным редиректом на адрес https://yoomoney.ru/quickpay/confirm.xml и с кодом 307. Важно (!) надо именно этим кодом, чтобы тело и метод запроса при редиректе не менялись.
    Ответ написан
    6 комментариев
  • Почему выдает ошибку Uncaught Error: Call to a member function prepare() on null при передаче данных через ссылку?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Call to a member function prepare() on null
    Из ошибки очевидно что $db->dbs у вас нулл (не существует), дальше рассказывать или сами догадаетесь?
    Ответ написан
    6 комментариев
  • PHPWord - почему не работает сохранение в word файл?

    @Nentra Автор вопроса
    Всем спасибо, действительно нужно было логи посмотреть, в моём случае логи апача
    (у меня битрикс)
    /var/log/httpd/error_log.

    Проблема была с xmlwriter, дописал в файл

    /etc/php.d/20-xmlwriter.ini


    Enable xmlwriter extension module
    extension=xmlwriter.so


    Перезагрузил апач и всё заработало.
    Ответ написан
    Комментировать
  • Почему PHP так работает?

    @rPman
    режим pm какой в настройках? если не static то количество текущих процессов веб сервера будут зависеть от нагрузки, полагаю которую он считает по завершению каждого запроса, в динамическом режиме сначала выбран 1 процесс, поэтому у тебя отрабатывает только один запрос остальным некем обрабатываться, после чего php-fpm понимает чтонагрузка высокая и поднимает количество потоков до max_children и остальные запросы обрабатываются паралельно
    Ответ написан
    2 комментария