Задать вопрос
Ответы пользователя по тегу PHP
  • Как к 00000001 прибавить 1, чтобы получить 00000002?

    @rPman
    $b=sprintf("%08d",intval($a)+1);
    граничные случаи типа число не влезает, не число, сам обработаешь
    так же аккуратно на 32-битных машинах, если у тебя там не 8 символов а к примеру 10 (int в 32-битном php при превышении 2^31 становится double)
    Ответ написан
    Комментировать
  • Как работать с другими сайтами?

    @rPman
    У тебя 2 основных способа:
    * разобраться в том как работает этот 'другой сайт', какие http запросы отправляет, как их собирает (можно отследить в инспекторе в браузере по F12 закладка network) и написать свое приложение, которое будет отправлять те же самые запросы, библиотек полно, например curl, есть одноименная утилита так и поддержка в языках программирования, в т.ч. на php
    * используя полноценный браузер, например инжектить свой javascript на его страницу с помощью расширения или вставив код прямо в консоль, или используя удаленное управление из своей программы, например selenium

    первый подход очень сложен, реверс инженеринг чужого приложения, особенно если там используется javascript (если нет то обычно проще), но наиболее эффективен по затратам ресурсов, и одна слабая машина может симулировать работу одновременно нескольких пользователей (десятки и даже сотни), этот подход используют когда нужно собрать данные с веб сайта, который не защищается от подобной автоматизации

    второй подход заметно проще, например javscript который будет нажимать на кнопку Подписаться на странице хабр qna:
    $('.btn_subscribe').click()
    Помимо всего, этот способ позволяет обойти большинство защит от автоматизации, так как это буквально кликать мышкой по кнопкам но главный недостаток - на каждого пользователя будет требоваться полноценный браузер (иногда можно сэкономить), что очень затратно по ресурсам
    Ответ написан
    Комментировать
  • Что нужно прописать в php файле, чтобы при написании php path/to/file в командной строке вызывалась по умолчанию функция index()?

    @rPman
    php path/to/file arg1 arg2
    в php:
    echo "Количество аргументов: $argc, массив арументов:";
    print_r($argv)

    $argv массив строк с аргументами, нулевая - имя файла path/to/file
    Ответ написан
    4 комментария
  • Как в yii2 создать модель формы с неизвестным количеством и типом полей?

    @rPman
    это называется модель entity-attribute-value (EAV)
    для YII погуглю за тебя, может немного устарело, но идею думаю ты уловил
    Ответ написан
  • Как отправить такой же JSON запрос методом POST?

    @rPman
    Реверсинженеринг не простой и творческий процесс.
    для начала тебе нужно определить правило, по которому формируются запросы и порядок их отправки.
    а затем, если используется http, использовать, к примеру, популярную библиотеку curl, доступную для всех платформ, например на php (идет в поставке с php - php-curl)

    p.s. примеров не будет, так как в вопросе ничего не сказано кроме нескольких несвязных скриншотов дампов запросов
    к тому же, тем кто способен провести реверсинженеринг приложения, объяснять как пользоваться curl не нужно
    Ответ написан
  • Как узнать загрузилась ли страница PHP?

    @rPman
    Александр Нестеров правильно написал
    добавлю что определить конец загрузки страницы в браузере на самом деле не так просто как кажется даже на javascript, например если используются сторонние элементы (изображения, скрипты), загружаемые не с вашего сервера (например плеер)

    в некоторых случаях можно управлять предзагрузкой самостоятельно, и надеяться на работающее кеширование в браузере, т.е. ты загружаешь изображение на javascript, и получаешь гарантию что если ты в скрипте его загрузил то значит оно точно будет загружено на странице (кстати так можно в принципе формировать содержимое страницы полностью скриптами, прописывая уже загруженное изображение создаваемым элементам)

    Официально html имеет onload атрибут на событие окончания загрузки самой html страницы, если содержимое страницы формируется на сервере то оно будет вызвано когда все элементы будут загружены. Как я уже сказал, для активного содержимого, заполняемого скриптами это не сработает.

    Поэтому в скрипте на это событие делай запрос на веб сервер (fetch или XMLHttpRequest или любую библиотеку, например jquery ajax) а уже на веб сервере сохраняй это событие где-надо, в базе или в сессии
    Ответ написан
    Комментировать
  • Как распечатать 4 массива?

    @rPman
    если размеры массивов одинаковые, то:
    foreach($arr1 as $i=>$v) echo "{$arr1[$i]}, {$arr2[$i]}, {$arr3[$i]}, {$arr4[$i]}\n";
    Ответ написан
    2 комментария
  • Как назначить варианты входящих типов в php?

    @rPman
    Почему не работает? все работает
    но осторожно в php все базовые типы могут быть строками, т.е. числа и boolean
    Ответ написан
    4 комментария
  • Как сделать задержку перед редериктом с полной загрузкой страницы?

    @rPman
    без javascript редирект делают с помощью тега meta
    <meta http-equiv="refresh" content="2;URL=https:/site.ru">


    тут 2 - количество секунд перед редиректом
    Ответ написан
    1 комментарий
  • Как преобразовать float(2.86E-6) в float(0.0000286)?

    @rPman
    Ответ написан
    Комментировать
  • Как добавить проверку дополнительного значения из базы в конструкцию if?

    @rPman
    неправильно используешь or так как php считает что ты сделал такое (цвет = красный) или (красноватое это истина), любое значение не 0 и не пусто это true поэтому Красное срабатывает

    правильно - if(in_array($apple->color,['Красное','Красноватое'])...

    еще более правильно, если html отличается только цветами или именами классов, то завести массив и подставлять только изменяющиеся значения в шаблон типа так:

    где то определяешь в константах:
    $colors=['Красное'=>'#FF0000','Красноватое'=>'#FF0000',...];

    а в коде подстановки цвета будет что то такое:
    <?php=make_color_html($colors[$apple->color]??UNKNOWN_COLOR); ?>

    либо сразу html шаблон
    <text style="color:<?php = $colors[$apple->color]??UNKNOWN_COLOR; ?>">
    Ответ написан
    1 комментарий
  • Можно ли передать POST запрос на 2 сраницы разом?

    @rPman
    либо делай 2 запроса с помощью javascript (гуглить ajax, или например штатный браузерный XMLHttpRequest) либо реализуй отправку двух post запросов со своего сервера, а с этой страницы запрос делай не на целевой сайт а на свой промежуточный
    Ответ написан
    Комментировать
  • Как реализовать на php экспорт данных вида json из SQL - в csv?

    @rPman
    Ты неправильно создаешь csv, строки в валидном csv могут содержать \n и разделитель (дублируется), используй штатную функцию fputcsv, записывающую строчку в файл (аналогично читать fgetcsv)

    Для json потоково одним проходом не получится, не зная структуры этих json для csv нужно будет два прохода: первый - определяет все возможные колонки (и если надо сохраняет значения), а второй - заполняет массив строки (для передачи fputcsv) пустыми значениями для тех колонок, значения которых отсутствуют. Чтобы порядок был верный первый проход должен сформировать массив - список названий колонок, а второй проход в цикле формирует массив пробегая по этому массиву названий колонок.

    p.s. а у тебя в json точно только один уровень? если есть вложенности на это нужно проверку делать и как то реагировать
    Ответ написан
    Комментировать
  • Можно ли узнать содержимое $r->rowCount() напрямую?

    @rPman
    причем тут значение prim и количество записей?

    rowCount() это прямое (низкоуровневее некуда) определение количество записей в результате запроса
    Если тебе нужно знать сколько prim имеет значение null, то либо считай их сам по загруженным результатам, либо сделай отдельно запрос select count(*) from anketa where prim is null
    Ответ написан
  • Почему PHP так работает?

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

    @rPman
    Наверное все уже забыли но xml это только часть комплекса технологий, и только та что отвечает за формат хранения данных.
    Вместе с xml был изобретен например язык шаблонов xslt (поддерживается всеми браузерами кстати), который позволяет выполнять кучу манипуляций с данными в xml, включая фильтрация (xpath от туда) сортировка, и т.п. и формировать неплохую динамическую страницу в браузере прямо средствами клиента без javascript!

    p.s. Язык сложный для чтения, громоздкий и считается устаревшим.
    Ответ написан
    Комментировать
  • Как по запросу что то сделать у пользователя?

    @rPman
    server (php) -> client (browser) коммуникации возможны следующими способами:
    1. правильный - с использованием javascript и технологии websocket, для этого тебе нужен websocket сервер (запущенный рядом на сервере или даже где угодно) либо модуль веб сервера, позволяющий php серверу отправлять короткие запросы типа такого но не рекомендую так схему выстраивать)
    2. устаревший но в принципе рабочий - технология long pooling, в браузере так же должен быть javascript, обычный веб сервер должен уметь отдавать клиенту по запросу (а скажи ка мне что ты хочешь) желаемую команду, с бесконечным (до таймаута и повтор) ожиданием события, т.е. клиент запрашивает у сервера - есть от тебя команды, и при получении - считает что сервер прислал ее, а сервер при запросе задерживает ответ, высылая для приличия в канал пустышки, например пробелы раз в минуту. Этот способ очень универсальный и заработает на старых браузерах, в которых нет поддержки websocket, так же серверная реализация очень проста.
    кстати javascript может запрашивать эту страницу в основном двумя способами - ajax (обобщенно так зовут способы отсылки запросов из javascript к серверу) и добавление тега script с нужным url, а веб сервер туда возвращает что то типа msgReceivedCallback(json...данные);
    3. для прикола - очень старый способ, когда в браузерах не было даже javascript, с помощью фреймов и тега
    <meta http-equiv="refresh" content="10;URL=http:/site.ru">
    можно контролировать автоматическое обновление частей страниц, а с помощью настроек кеширования в заголовках, веб сервер контролирует частоту реальных запросов (а так же изменение времени обновления в этом теге), я помню даже вебчаты в локалке на этой технологии.
    Ответ написан
    Комментировать
  • Насколько безопасны cookies?

    @rPman
    доверять чему? какую атакую боишься?

    cookies это файлы, буквально, на стороне клиента, сам клиент имеет к ним полный доступ, читать, удалять, изменять (подделывать), поэтому абстрактного ОТ ПОЛЬЗОВАТЕЛЯ защититься с помощью cookies не получится, но в некоторых случаях с помощью этой технологии и обфусикации можно создать сложности рядовому пользователю для этих действий.

    p.s. есть еще серверные cookies, клиент их может подменить только на своем браузере (например с помощью. расширений или кастомного браузера), при https шифровании никто больше их изменить не сможет
    Ответ написан
    Комментировать
  • При использовании проверок на $_POST выходит ошибка ключей из массива. Что у меня в коде не так?

    @rPman
    Я тебе подправил твой вопрос, ты тегами code не попал собственно в публикуемый текст

    По теме вопроса, у тебя на любое открытие страницы идет попытка доступа к $_POST[...] но при простом открытии этот массив пустой
    делай хотя бы так:
    $name =$_POST["username"]??"";
    этот ?? делает так:
    isset($_POST["username"])?$_POST["username"]:""
    и ошибки не будет, а неизвестное значение подставится как ""
    Ответ написан
    Комментировать
  • PHP file_put_contents дописывает в файл или перезаписывает его?

    @rPman
    file_put_contents(... FILE_APPEND) дописывает содержимое в конец без пересоздания и перечитывания файла
    это просто упрощенная запись конструкции
    fopen(...,'a');fwrite(...);fclose(...);
    если FILE_APPEND не указывать, то используется режим типа w+ (существующие файлы обрезаются в 0 размер, не существующие ошибки не вызывают)
    p.s. важное замечание file_put_contents FILE_APPEND работает очень медленно, синхронизируя каждую запись с диском, я помню переписывал код на использование fopen/fwrite плюс там можно гибко задавать буфер записи

    upd. на самом деле там используется просто режим 'a' и 'c' и чуть больше проверок
    С интересом обнаружил по исходникам что file_put_contents умеет писать array, объединяя без разделителя значения и пропуская ключи.... век живи век учись, не знаю зачем но смешно
    Ответ написан
    2 комментария