• Как поймать SSL ошибку при не удачной попытке соединения/хнедшейка stream_socket_client?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Можно использовать свой error_handler чтобы перехватывать warning'и в том месте где может возникнуть ошибка
    https://www.php.net/manual/ru/function.set-error-h...
    А потом восстанавливать стандартный error_handler если нужно
    https://www.php.net/manual/ru/function.restore-err...

    set_error_handler(function($errno, $errstr, $errfile, $errline){
        //своя логика обработки $errno, $errstr 
    });
    
    //$stream = stream_socket_client( ...
    
    restore_error_handler();
    Ответ написан
    2 комментария
  • Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at W:\domains:1) in W:\domains ???

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Думаю проблема в том что в одном файле смешаны html и php код.
    Конкретно речь про pick.php где идёт что-то типа

    <!doctype html>
    <html>
    ...
    и дальше в этом же файле PHP код с session_start()
    <?
    require_once('config.php'); // <- session_start();
    // echo и тд
    ?>
    </html>


    Если это так, то ошибка вполне логична и понятна, так как в случае такой мешанины сразу отправляется html-документ и соответствующий header(), а потом только вы пытаетесь стартовать сессию и получаете закономерную ошибку.
    Ответ написан
  • Как правильно сделать защиту от хотлинка на Nginx?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Конфиг верный, но вы вписали проверку не туда.
    Нужно вписать это в https-секцию там где у вас listen 443 и тд

    Сейчас же проверка вписана в http секцию, и оно даже защищает от хотлинка по http, но не отрабатывает так как раньше срабатывает строка с редиректом http -> https. return 301 https://site.com$request_uri;
    Ответ написан
    Комментировать
  • Как отсортировать многомерный массив в php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    $array = AscOrderArray($array, 'title');
    
    function DescOrderArray($array, $field)
    {
        usort($array, function ($b, $a) use ($field) {
            return strnatcmp($a[$field], $b[$field]);
        });
    
        return $array;
    }
    
    function AscOrderArray($array, $field)
    {
        usort($array, function ($a, $b) use ($field) {
            return strnatcmp($a[$field], $b[$field]);
        });
    
        return $array;
    }


    https://3v4l.org/VOpiA
    Ответ написан
  • Как Свернуть/развернуть options в группу при нажатии на неактивный option?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    <select> очень сложно поддаётся кастомизации и того что вы описали "из коробки" нету. Нету некого сворачивания/разворачивания части элементов списка.

    В теории можно сделать это на JS путём манипуляции со списком <option> при клике.
    Но любое такое решение ничем не лучше использования кастомной обёртки которая эмулирует вид select через ul/div

    upd. решение задачи с использованием select и optgroup https://stackoverflow.com/a/52157352/2145125
    а так же jquery + select2.js и немного js кода
    select 2 js в любом случае кастомизирует select и подменяет его u>li списком.
    Ответ написан
  • NGINX перенаправление iframe c https на http или https на порту 8085?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Чтобы небыло проблем с https то нужен валидный SSL сертификат, который для ip (без домена) получить очень проблематично.

    В вашем случае самый оптимальный вариант такой
    1. сделать субдомен и с валидным https сертификатом например iframe.mydomain.ru
    2. в настройках nginx для server_name iframe.mydomain.ru делаем проксирование запросов на ваше java-приложение на нужном порту
    location / {
        proxy_pass http://172.16.0.68:8085;
    }

    3. iframe соотв-но встраиваете как src="https://iframe.mydomain.ru/..."
    Это решит вопросы и с https, вопросы cross domain доступа, а так же позволит не светить 8085 портом в мир, так как проксировать можно в рамках локальной сети.
    Ответ написан
    Комментировать
  • В чем ошибка при использование swiper в WordPress?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Судя по приведённому коду из вашего примера https://stackblitz.com/edit/swiper-demo-30-thumbs-...

    Нужно в контейнер <div class="swiper-wrapper"> помещать блок где адрес изображения задан через background-image:url()

    <div class="swiper-slide" style="background-image:url(https://swiperjs.com/demos/images/nature-1.jpg)"></div>


    То что вы делаете сейчас это внутрь <div class="swiper-slide"> помещаете <img> элементы

    А надо
    - создать новый элемент div class = swiper-slide
    - задать ему style background-image:url(...) c адресом изображения (из img src)
    - этот созданный элемент поместить внутрь <div class="swiper-wrapper">
    - повторить для следующего изображения

    Что делаете вы
    <div class="swiper-wrapper">
    <div class="swiper-slide">
       <img src=...
       <img src=...
       <img src=...
    
    </div>
    </div>


    Что надо сделать
    <div class="swiper-wrapper">
        <div class="swiper-slide" style="background-image:url(...)"></div>
        <div class="swiper-slide" style="background-image:url(...)"></div>
        <div class="swiper-slide" style="background-image:url(...)"></div>
    </div>
    Ответ написан
    Комментировать
  • Почему введёные данные о заказе не отправляются в таблицу Mysql?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Проблема в том что нужно данные взять из $_POST
    Например так
    $name = isset($_POST['name']) ? $_POST['name'] : '';


    Удачи вам в изучении программирования
    Для работы с БД настоятельно рекомендую ознакомиться и сразу использовать хотя бы это mysqli + prepared statements
    https://www.php.net/manual/ru/mysqli.quickstart.pr...
    https://www.php.net/manual/ru/pdo.prepared-stateme...
    https://www.w3schools.com/php/php_mysql_prepared_s...

    <h2 align="center">Оформление заказа</h2>
    
    <?
    if($_SESSION['cart'] && !isset($_POST['order']))
    {
    
        ?>
        <form action="index.php?view=order" method="post" id="cart-form">
    
            <table id="mycart" align="center" cellspacing="0" cellpadding="0" border="0">
                <tr>
                    <th>Товар</th>
                    <th>Цена</th>
                    <th>Кол-во</th>
                    <th>Всего</th>
                </tr>
    
                <? foreach($_SESSION['cart'] as $id => $quantity):
                    $product = get_product($id);
    
                    ?>
    
                    <tr>
                        <td align="center"><?= $product['title']; ?></td>
                        <td align="center">$<?= number_format($product['price'], 2); ?></td>
                        <td align="center"><?= $quantity; ?></td>
                        <td align="center">$<?= number_format($product['price'] * $quantity, 2); ?></td>
                    </tr>
                <?endforeach; ?>
    
            </table>
            <p class="total" align="center">Общая сумма заказа:
                <span class="product-price"><?= number_format($_SESSION['total_price'], 2); ?> $</span></p>
    
            <p align="center" style="color: #fff;">
                Ваше имя: <br/>
                <input type="text" name="name"/><br/>
                Ваша фамилия: <br/>
                <input type="text" name="s_name"/><br/>
                Ваш адрес: <br/>
                <input type="text" name="address"/><br/>
                Почтовый индекс: <br/>
                <input type="text" name="post_index"/><br/>
                Ваше e-mail: <br/>
                <input type="text" name="email"/><br/>
            </p>
    
    
            <p align="center"><input type="submit" name="order" value="Заказать"/></p>
    
        </form>
    
        <?
    }
    if($_SESSION['cart'] && isset($_POST['order']))
    {
        foreach($_POST as $ArrKey => $ArrStr)
        {
            $ArrKey = $_POST[$ArrKey];
        }
        $date = date('Y-m-d');
        $time = date('H:i:s');
        
        $name = isset($_POST['name']) ? $_POST['name'] : '';
        $s_name = isset($_POST['s_name']) ? $_POST['s_name'] : '';
        $address = isset($_POST['address']) ? $_POST['address'] : '';    
        $post_index = isset($_POST['post_index']) ? $_POST['post_index'] : '';    
        $email = isset($_POST['email']) ? $_POST['email'] : '';
    
        foreach($_SESSION['cart'] as $id => $quantity)
        {
            $product = get_product($id);
            $query = mysql_query("
                INSERT INTO orders(name,s_name,address,post_index,email,date,time,product,prod_id,price,qty) 
                VALUES 
                ('$name','$s_name','$address','$post_index','$email','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')
            ");
        }
    
        echo "<p align='center' style='color: #fff;'>Ваш заказ успешно принят! Спасибо за покупку!</p>";
    }
    ?>
    Ответ написан
    8 комментариев
  • Почему сообщение из формы приходит без вложения?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    enctype="multipart/form-data" не забыли для form ?
    input с выбором файла имеет name="fileFF" ?
    <form enctype="multipart/form-data" action="..." method="post">
        <input type="file" name="fileFF"/>
    Ответ написан
  • Как лучше всего верстать формулы?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    для ввода TeX-синтаксис
    для отображения CSS + SVG
    https://www.mathjax.org/
    Ответ написан
    Комментировать
  • Как создать временный файл для скачивания php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Возможно проще будет генерировать файл с логом "на лету" прямо из скрипта и сразу отдавать на скачивание
    Так вы получите больше контроля в плане безопасности, так как можно проверить предварительно авторизацию и тд и не надо париться с хранением, удалением кучи файлов

    <?php
    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename=history.txt");
    
    //делаем запрос к БД на получение данных
    //выводим нужные данные через echo


    Если всё же хотите создавать файлы и писать в них данные то используйте file_put_contents() куда передаёте данные и имя файла для сохранения
    https://www.php.net/manual/ru/function.file-put-co...
    Ответ написан
    1 комментарий
  • При выполнение sql запроса выходит ошибка #1064 что не так?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    В phpmyadmin под окном запроса есть поле "Разделитель ;"
    Попробуйте там поменять ; на что-то другое, например на |
    Ответ написан
    Комментировать
  • Как парсить элементы сайта, генерируемые Angular JS?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Для genius используйте их api
    https://docs.genius.com/#/getting-started-h1
    Ответ написан
    Комментировать
  • Как получить значение столбца из записи MySQL?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    SELECT user_id FROM table WHERE star_count = '454'
    Ответ написан
    Комментировать
  • Как проверить одинаковый ли массив?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    if(JSON.stringify(test1)==JSON.stringify(test2)) {
      alert('yes');
    }
    Ответ написан
  • Как сделать что бы самоудаляющая ссылка жила по времени?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Так как стоит тег MySQL предполагаю что ссылки хранятся в базе?
    Значит для каждой ссылки нужно сделать колонку со временем создания ссылки и временем первого клика (захода) по ней.
    Время создания ссылки можно использовать если надо в принципе ограничить ссылку по времени, независимо от того посещали её или нет.
    Время захода по умолчанию null. При открытии ссылки смотрим это значение, при первом заходе заполняем текущую дату, при повторных кликах сравниваем дату и текущее время.
    Если прошло больше определённого времени считаем что ссылка удалена.
    Так же можно фактически удалять из базы ссылки с истёкшей датой, при этом ссылки где дата посещения null считаем не посещёнными и не удаляем. Это уже зависит от ваших требований.
    Ответ написан
    Комментировать
  • Как найти все ближайшие связки чисел из массива?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    1. отсортировать список по возрастанию, если он не отсортирован
    2. обходим список и смотрим разницу "текущий элемент минус предыдущий".
    3. если разница равна 1 то записываем "предыдущий элемент" в новый список со связками.

    не понятно почему для ряда 1 2 2 2 5 8 12 12 13 15 15 21 25 правильный вариант 1, 12, 15
    так как судя по условиям, чтобы было 15, должно быть 15, 16 в исходных данных.
    Ответ написан
    Комментировать
  • Как сформировать регулярное выражение?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    @"^[ ]*[a-z]+[ ]+[a-z]+[ ]+([a-z]+|[0-9]+)[ ]*$"
    $ означает окончание строки.

    для пробелов, а точнее любых пробельных символов (space, tab) лучше использовать \s
    ^\s?[a-z0-9]+\s+[a-z0-9]+\s+([a-z0-9]+)\s?$

    https://regex101.com/r/G1uyGf/1/
    Ответ написан
    Комментировать
  • Какие известные проекты написаны с помощью html?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Любой сайт который вы открываете в браузере использует HTML.
    Так что, думаю, правильный ответ - 100% веб сайтов.
    Ответ написан
    3 комментария
  • Какой вариант из двух выбрать: передаче по ссылке, или без?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Если вопрос по ссылке или без - то однозначно ответ лучше передавать не по ссылке, так как меньше шансов выстрелить себе в ногу.
    Но как написали выше, тут напрашивается рефакторинг, так как почему функция с названием checkPermissions() производит модификацию данных?
    То есть это скорее getAvailablePermissions() или filterResponsePermissions() или типа того.

    upd. Единственное что даст передача по ссылке, это экономия памяти, так как при передаче по ссылке не будут создаваться копии $permissions и $responses, но если у вас эти массивы не на сотни тысяч элементов, то экономить нечего.
    Ответ написан
    Комментировать