Задать вопрос
Ответы пользователя по тегу PHP
  • Обработчик 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 комментарий
  • Экранирует дату?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Не выводите через json_encode
    Ответ написан
    1 комментарий
  • Как отправить письмо на почту с полем ОТ?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Попробуйте не использовать iconv() к $header
    Ответ написан
    Комментировать
  • Переход с php5.4 на php5.6 Почему может перестать видеть функцию?

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

    Видимо какой-то polyfill для 5.4 который не нужен в 5.6

    смотрите список функций по этим ссылкам
    https://www.php.net/manual/ru/migration55.new-func...
    https://www.php.net/manual/ru/migration56.new-func...

    Например это может быть кастомный array_column()
    Ответ написан
    Комментировать
  • JSON парсировка?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    https://3v4l.org/keqWY

    <?php
    
    $json_str = <<<TEXT
    {
    	"Example": {
    		"ExampleOne": {
    			"rate": "0"
    		},
    		"ExampleTwo": {
    			"rate": "0"
    		},
    		"ExampleThree": {
    			"rate": "0"
    		}
    	}
    }
    TEXT;
    
    $json = json_decode($json_str, true);
    
    $keys = array_keys($json['Example']);
    print_r($keys);
    
    /*
    Array
    (
        [0] => ExampleOne
        [1] => ExampleTwo
        [2] => ExampleThree
    )
    */


    upd.

    Что бы получить что-то вроде AmountOne: rate, AmountTwo:rate и т.д


    $json = json_decode($json_str, true);
    print_r($json['Example']);
    Ответ написан
    5 комментариев
  • Как защититься от кражи cookie не используя мета информацию (ip, etc..) и js?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Что подразумевается под "залез в браузер" ?
    Если у злоумышленника полный доступ к компьютеру/браузеру, то помимо cookies точно так же можно достать данные localstorage и любых других "приблуд". И в принципе можно просто отправлять запросы из браузера как легитимный юзер, тут вы бессильны.

    Если речь про воровство cookies через XSS, то есть флаг HttpOnly который предотвратит доступ к cookies через JS
    https://owasp.org/www-community/HttpOnly

    Против MITM-аттак, используйте HTTPS + HSTS.

    Как доп защита, использовать GeoIP-базы, как делают соц. сети или почтовики, собирая данные об авторизации пользователя и выявляя аномальные входы (другая страна, другой город).
    Ответ написан
  • Как понять, почему не проходит запрос в БД(mysql) из PHP(Apache)?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Используйте mysqli_error(); чтобы получить текст ошибки
    Точка с запятой в конце запроса роли не играет.
    В вопросе в первом примере нету "SET", а там где print() уже запрос с SET

    mysqli_query($link,"INSERT INTO users SET name='".$login."', password='".$password."';");
    var_dump(mysqli_error($link)); //<---


    5e8ad21f748a9497179543.png
    Ответ написан
    1 комментарий
  • Почему то strpos работает не правильно?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Коротко - не передавайте в strpos число (int), a передавайте строку (sting) и проблем не будет

    Разврёнуто
    Читаем документацию https://www.php.net/strpos

    needle
    Если параметр needle не является строкой, он преобразуется в целое число и трактуется как код символа. Это поведение устарело с PHP 7.3.0, и полагаться на него крайне не рекомендуется. В зависимости от предполагаемого поведения, параметр needle должен быть либо явно приведен к строке, либо должен быть выполнен явный вызов chr().


    Если прогнать ваш код то видим ошибку
    Deprecated: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior in /in/2JE4h on line 4


    Чтобы код отрабатывал как ожидается, $user_ip должен иметь тип string

    так
    $user_ip = (string)94301750;
    или так
    $user_ip = '94301750';

    В противном же случае вместо "94301750" в strpos уходит результат chr(94301750) что есть строка "6"
    и получается в итоге strpos('1334268210|3322954437', '6') отсюда и результат Yes
    Ответ написан
    4 комментария
  • Как получить методом groups.getMembers пользователей сообщества у кого сегодня день рождение?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    bdate может быть без года или вообще отсутствовать
    "bdate": "19.3"
    "bdate": "3.2.1988"
    "bdate": "18.3.1985"


    формат bdate в vk на РНР соотв-но
    date("j.n.Y"); или если без года date("j.n");

    strtotime выкиньте, он тут не нужен
    Всё что нужно это сравнить текущую дату date("j.n") и bdate. Причем для сравнения надо проверить что bdate начинается с этой строки.

    ходим по юзерам, забаненных, удаляем

    И оптимизация по коду. Эту проверку можно сделать в начале цикла for, и не вносить deactivated в список $users в принципе, тогда и не придётся потом их удалять.
    Ответ написан
    1 комментарий
  • Почему версии php в phpinfo() и php -i расходятся?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Ну разные версии от того что явно у вас установлено несколько версий PHP

    наверняка покажет что есть 7.3 и 7.4
    ls -la /etc/php/

    А по поводу cli, то вопрос в том какой симлинк в /usr/bin/php
    Покажет на какой бинарник ссылается php и это соотв-но можно поменять
    readlink /usr/bin/php

    Если не нужно несколько версий PHP то я бы удалил лишниюю версию и изменил настройки веб сервера (apache) чтобы использовалась правильная версия.
    Если этот вариант не подходит, то можно запускать правильную версию php дёргая правильный бинарник
    find /usr/bin/php*

    обычно это будет что-то типа
    /usr/bin/php7.3 -v
    /usr/bin/php7.4 -v

    Проблемы использования разных версий PHP между web и cli может быть никаких, если установлены одинаковые extension и используемый PHP код совместим с обоими версиями, но лучше использовать одну и ту же версию.

    Если в принципе скрипты через cli не запускаются (нету таких вещей как фоновые воркеры, демоны и тд) то вообще разницы практически нет.
    Ещё нюанс может быть с composer'ом который запускается через cli и тут вопрос в том одинаковые ли модули в разных версиях РНР, и требования ПО. Так как может быть что есть библиотека которая не совместима с PHP 7.4 и пуская composer через 7.4 получите ошибку установки, так как не выполнится проверка по версии РНР.
    Ответ написан
    5 комментариев
  • Какую библиотеку можно использовать для изменения ФИО по падежам?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Ответ написан
    Комментировать