Ответы пользователя по тегу PHP
  • Как проверить существует ли файл?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    $name = basename($_POST['name']);
    $textarea = $_POST['textarea'];
    
    $file = __DIR__.'/files/'.$name;
    
    //создаст файл или допишет данные в конец существующего
    $fp = fopen($file, 'a+');
    fwrite($fp, $textarea);
    fclose($fp);
    Ответ написан
    1 комментарий
  • Почему не работает код?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    xhr.send('ourForm_inp=' + userInput);
    Вот так попробуйте. Убрать лишние пробелы где =
    Ответ написан
    2 комментария
  • Как записать значения из запроса mysql в переменные php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    <?php
    //подключаем скрипт с данными базы данных
    require_once 'database.php';
    
    //подключаемся к серверу
    $conn = mysqli_connect($servername, $username, $password, $dbname)
        or die("Ошибка " . mysqli_error($conn));
    
    //выбираем из базы 7 последних значений суточного расхода
    $query2 = "SELECT `id`,`date`,`delta0`,`delta1` FROM `counter` ORDER BY `id` DESC LIMIT 7";
    $result2 = mysqli_query($conn, $query2) or die("Ошибка " . mysqli_error($conn));
    
    $date = [];
    $dayhot = [];
    $daycold = [];
    
    if($result2)
    {
        while($row = mysqli_fetch_assoc($result2))
        {
            $date[] = $row['date'];
            $dayhot[] = $row['delta0'];
            $daycold[] = $row['delta1'];
        }
    }
    
    $date = join(',', $date);
    $dayhot = join(',', $dayhot);
    $daycold = join(',', $daycold);
    
    //закрываем подключение
    mysqli_close($conn);
    
    var_dump($date);
    var_dump($dayhot);
    var_dump($daycold);
    Ответ написан
  • Как выводить и записывать значения в mysql через запятую или |?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    UPDATE `class_users` SET `нужная строка` = CONCAT(`нужная строка`, ',123')


    Так же есть функция FIND_IN_SET() которая позволяет искать значение в строке разделённой запятыми, чтобы не прибегать к использованию LIKE '%...%'

    Как уже ответили ранее, подобные трюки являются анти-шаблонами.
    Я считаю что допустимо подобный подход использовать чтобы компактно хранить список чего-то (денормализация). Но если вы потом по значениям из списка захотите что-то искать или фильтровать, то это всегда будет FULL SCAN запрос, который в 999999999 раз будет медленнее и грузовее для CPU нежели если бы вы хранили основную запись и связанные списки отдельно, так как во втором случае возможно эффективно использовать индексы для поиска.
    Ответ написан
    Комментировать
  • Как обойти защиту от пасеров?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Слать GET-запрос, а не POST.
    Cookie отправляются не через _POSTFIELDS

    Ну и всё это по итогу бессмысленно, так как на указанной странице нету списка курсов, а все курсы подтягиваются отдельным ajax-запросом через API.
    Например по такому url где в ответе JSON с данными

    https://www.udemy.com/api-2.0/discovery-units/all_...

    Скриншот ответа api
    5e92c55979bda158050599.png
    Ответ написан
  • Как и можно ли заставить php работать с ftp без VPS?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    FTP support => enabled

    Означает что вы можете из РНР соединятся на сторонние FTP-серверы. То есть можете сделать FTP-клиент на РНР.
    Соотв-но FTP_HOST и тд это данные сервера куда вы соединяетесь и должны их знать.

    FTP support не означает что ваш РНР может работать как FTP-сервер на который кто-то сможет приконнектится.
    Ответ написан
    Комментировать
  • Как избежать двойного запроса из PHP при помощи curl?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Если file_get_contents тоже посылает 2 запроса, значит проблема не в curl, а в том как вызывается sender.php и видимо вызывается он дважды.
    Чудес не бывает.
    Ответ написан
  • Как хукать сообщения пользователю (не боту) в Телеграм?

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

    PHP - https://github.com/danog/MadelineProto
    Python - https://github.com/pyrogram/pyrogram
    Ответ написан
    Комментировать
  • Каким запросом произвести вход в phpmyadmin через кнопку?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Данные надо отправлять через POST. Например html страница, на ней форма с pma_username и pma_password и авто отправка формы для входа.

    <body onload='document.forms.myadmin.submit()'>
    <form method='post' name='myadmin' action='/phpmyadmin/index.php'>
    <input type='text' name='pma_username' value='........'/>
    <input type='password' name='pma_password' value='........'/>
    <input type='submit' name='loginSubmit' value='Login' />
    </form>
    </body>


    Если прям хочется "через кнопку" то при клике на кнопку "на лету" делаете форму с инпутами через JS, вставляете её в DOM и делаете submit.
    Ответ написан
    Комментировать
  • Почему str_ireplace странно работает?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Если я правильно понял, то может помочь трюк с двойной заменой
    Сперва с учётом регистра, потом без учёта.

    $result = str_replace($from, $to, $text);
    $result = str_ireplace($from, $to, $result);


    Вообще судя по описанию автор решает задачу замены символов с диакритическими знаками на аналоги без.
    Если так то попробуйте этот скрипт https://github.com/infralabs/DiacriticsRemovePHP

    Ещё вариант использовать iconv() с флагом //TRANSLIT
    $result = iconv('UTF-8', 'US-ASCII//TRANSLIT', $text);
    Ответ написан
  • Почему не выполнятся в exec команда openssl?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    все секреты раскроет такая магия
    но подозреваю нет прав на запись в x509cer.pem

    upd. путь до x509cer.pem укажите полный (от корня сервера) либо перед вызовом openssl сделайте cd
    $command = 'cd /нужная/папка/ && openssl pkcs7 ....'


    upd2. путь до файла .p7s тоже лучше указывать полный

    $command = 'openssl pkcs7 -inform DER -outform PEM -in OpisDokumUL_f723730f2b35416385a2e01f33295478.xml.zayav_1.p7s -print_certs > x509cer.pem 2>&1';
    exec($command, $output, $resultCode);
    
    var_dump($output);
    
    var_dump($resultCode);
    Ответ написан
    8 комментариев
  • Обработчик POST запроса?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Смотря каким образом отправляете POST-данные то приём в скрипте будет либо как при отправке из формы то есть смотрите в $_POST либо если это raw post data то $raw_post_data = file_get_contents("php://input");
    Ответ написан
    Комментировать
  • Как показывать блок только в определенный промежуток времени?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Смените таймзону в скрипте на любую с GMT+4
    Главное иметь актуальную базу timezone.db которую использует PHP, чтобы правильно учитывался переход на летнее/зимнее время, или наоборот отсутствие такого перехода.

    <?php
    date_default_timezone_set("Europe/Samara");
    //ваш код
    Ответ написан
  • Стоит ли использовать php фреймворк?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Стоит использовать, особенно при таком банальном функционале.
    Любой современный фреймворк - https://habr.com/ru/post/464417/

    Смысл использования фреймворка в том что такой "банальный" a.k.a типовой функционал реализуется проще и быстрее, а так же в том что проще потом нанимать компетентных разработчиков для развития или поддержки проекта, так как фреймворк подразумевает следование определённым правилам и стилю проектирования приложения и написания кода, а значит в будущем можно легко нанять дрессированных мартышек которые могут в определённый фреймворк.
    Ответ написан
    3 комментария
  • Как удалить гет параметр из реферера?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Вся сложность в том что при использовании parse_str параметры которые являются массивом, преобразуются в массив в РНР
    Array
    (
        [Filter] => Array
            (
                [form] => 1
                [type] => 2
            )
    )


    Быстрый хак - можно в исходной строке $qs_part сделать замену параметра на некий уникальный плейсхолдер, который явно в строке не встретится и тогда удалить элемент можно будет через unset() как и хотел автор.

    <?php
    $url = 'https://example.com/search?Filter[form]=1&Filter[type]=2';
    $name = 'Filter[form]';
    
    print_r(deleteGET($url, $name));
    
    //https://example.com/search?Filter%5Btype%5D=2
    
    function deleteGET($url, $name, $amp = true)
    {
        // Заменяем сущности на амперсанд, если требуется
        $url = str_replace("&amp;", "&", $url);
    
        // Разбиваем URL на 2 части: до знака ? и после
        list($url_part, $qs_part) = array_pad(explode("?", $url), 2, "");
    
        $qs_part = str_replace($name.'=', '{REPLACE_NAME}=', $qs_part);
    
        // Разбиваем строку с запросом на массив с параметрами и их значениями
        parse_str($qs_part, $qs_vars);
    
        // Удаляем необходимый параметр
        unset($qs_vars['{REPLACE_NAME}']);
    
        // Если есть параметры
        if(count($qs_vars) > 0)
        { 
            $url = $url_part."?".http_build_query($qs_vars); // Собираем URL обратно
            if($amp)
            {
                // Заменяем амперсанды обратно на сущности, если требуется
                $url = str_replace("&", "&amp;", $url);
            } 
        }
        else
        {
            // Если параметров не осталось, то просто берём всё, что идёт до знака ?
            $url = $url_part;
        } 
    
        // Возвращаем итоговый URL
        return $url; // Возвращаем итоговый URL
    }
    Ответ написан
  • Как сгруппировать время по датам в этом массиве?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    <?php
    $dates = [
        '16.12.2019 11:00:00',
        '16.12.2019 11:00:00',
        '30.12.2019 11:00:00',
        '16.12.2019 12:00:00',
        '16.12.2019 13:00:00',
        '16.12.2019 14:00:00',
        '16.12.2019 15:00:00',
        '30.12.2019 12:00:00',
        '30.12.2019 13:00:00',
    ];
    
    $result = [];
    foreach($dates as $dt)
    {
        //разбиваем входную дату по пробелу на 2 части
        $ex = explode(" ", $dt, 2);
    
        //$ex[0] - дата
        //$ex[1] - время
        $result[$ex[0]][] = $ex[1];
    }
    
    print_r($result);
    
    /*
    Array
    (
        [16.12.2019] => Array
            (
                [0] => 11:00:00
                [1] => 11:00:00
                [2] => 12:00:00
                [3] => 13:00:00
                [4] => 14:00:00
                [5] => 15:00:00
            )
    
        [30.12.2019] => Array
            (
                [0] => 11:00:00
                [1] => 12:00:00
                [2] => 13:00:00
            )
    )
    */
    Ответ написан
    Комментировать
  • Как изменить структуру array-а?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    $new_array = array_combine(
        array_column($array, "name"), 
        array_column($array, "value")
    );


    <?php
    
    $array = [
        ["name" => "search_apartment_csrf", "value" => "98e984286376f5b4ad4a141b624b3892-b56835987ab464df547530614839319d",],
        ["name" => "country_iso2", "value" => "RU",],
    ];
    
    $new_array = array_combine(
        array_column($array, "name"), 
        array_column($array, "value")
    );
    
    print_r($new_array);
    
    /*
    Array
    (
        [search_apartment_csrf] => 98e984286376f5b4ad4a141b624b3892-b56835987ab464df547530614839319d
        [country_iso2] => RU
    )
    */
    Ответ написан
    Комментировать
  • Как обновить версию php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    недавно давал развернутый ответ
    Почему версии php в phpinfo() и php -i расходятся?

    можете ипользовать php7.2 -v или поменять симлинки чтобы вызов php в консоли вёл на нужный бинарник.
    Ответ написан
    Комментировать
  • Как сложить элементы массива php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    <?php
    function arr_sum(...$arrays)
    {
        $sum = 0;
        foreach($arrays as $arr)
        {
            $sum += $arr[0];
        }
        
        return $sum;
    }
    
    $arr1 = [1880];
    $arr2 = [1500];
    $arr3 = [1500];
    
    var_dump(arr_sum($arr1, $arr2, $arr3));
    
    //int(4880)
    Ответ написан
    Комментировать
  • Как на PHP предсказывать события с помощью ML?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Предпочтение будет отдаваться команде, у которой суммарное количество «наилучших» показателей больше

    Не думаю что для такой простой задачи вам нужно что-либо связанное с ML.
    Судя из описания всё что нужно - это взять показатели команды А, показатели команды Б, сравнить у кого "лучше" и выбрать фаворита.
    Ответ написан
    1 комментарий