Ответы пользователя по тегу PHP
  • Как simple_html_dom разбить в массив?

    @rPman
    не смотрю что там внутри у тебя, просто знай что в результате find() ты получаешь массив объектов, к которым так же можно сделать find

    почти наверняка тебе достаточно просто корректно составить css селектор
    Ответ написан
    Комментировать
  • Как написать бота локально если нужен SSL?

    @rPman
    Никак, ssl сертификат должен быть известен серверам viber, им твой самописный неизвестен.

    Можно попытаться сэкономить, настроив http прокси на том же nginx, в этом случае требования к серверу будут мнимальные, мало того всякие cdn типа cloudflare дают бесплатно как сертификат так и предоставляют простейшие прокси
    Ответ написан
    Комментировать
  • Как исправить ошибки php mysql?

    @rPman
    нужно смотреть что там за сообщение об ошибке, вполне возможно /usr/lib/php/20200930/mysqli.so файл нулевой длины и его достаточно будет удалить вручную

    удаляй все что хоть как то конфликтует, включая их зависимости
    apt purge ...

    если что можно удалять вручную с помощью dpkg игнорируя зависимости но в конце концов порядок нужно восстановить чтобы apt autoremove -f отработало и dpkg-reconfigure -a тоже

    p.s. почему у тебя такой странный путь?
    поэтому вместо debian я ставлю ubuntu, список и поддержка backports для кучи полезных приложений там заметно полнее и все за порядок удобнее
    Ответ написан
  • Как получить данные формы и отправить дальше?

    @rPman
    Старый и идеологически уже не правильный способ, при формировании кода страницы 2 в значения value тегов input можно вставлять значения, принятые со страницы 1 (глобальная переменная $_POST или $_GET), но при этом необходимо пропустить эти данные через htmlspecialchars а для данных вне атрибутов, например для select или textarea, - более мощную htmlentities, но в любом случае с осторожностью, например \n там для html опций не конвертируется (а для xml да но другие нюансы), советую полистать комментарии под этими функциями.

    Если из страницы 1 нужно было передать данные полей, которых нет на странице 2 но нужны на странице 3, то использовали скрытые input type=hidden

    Очевидно, что это максимально идиотский и неэффективный метод передачи данных между страницами, и существовал он исключительно потому, что браузеры не имели нормального скрипта в стандарте, но теперь есть javascript, есть куки, есть локальное браузерное хранилище, есть ajax, есть вебсокеты, любой из этих технологий достаточно чтобы не городить описанное мной многоуровневое убожество.
    Ответ написан
  • Как в массив вставить цикл foreach?

    @rPman
    можно использовать array_map, на вход подаешь $_GET[CART] и функцию, обрабатывающую каждый элемент (то что у тебя внутри foreach)

    'items' => array_map(function($v){...},$_GET[CART])
    Ответ написан
    Комментировать
  • Каким образом почистить и перезаписать большой файл с номерами телефона?

    @rPman
    20т записей это маленький файл, большой это миллиарды

    русские номера это начинающиеся на +7 или 8
    еще есть местные городские номера, без кода города, вот что это за номер 58510350

    ты ж программист (судя по вопросам), берешь свой любимый javascript, берешь nodejs и пишешь в 4 строчки фильтр
    Ответ написан
    Комментировать
  • Exec (или ffmpeg) игнорирует get параметр. Как заставить его увидеть?

    @rPman
    Из консоли у меня всё работает, НО там тоже была загвоздка с ссылкой и её пришлось указывать в двойных кавычках (одинарные не принял)

    так поставь их:
    exec("ffmpeg.exe -rtsp_transport tcp -i \"$url\" -c copy -map 0 -t 10 out2.mkv 2>&1", $output, $return_var);
    Ответ написан
    Комментировать
  • Где в сети можно найти php коды для отладки?

    @rPman
    Правильное создание забагованного кода это отличный способ обучаться.

    Задавайся вопросом, как ведет себя та или иная функция когда на вход подаются неправильный данные. Пустые, не того типа, слишком большие, закрытые дескрипторы, писать в заблокированные файлы, проблемы с сетью в той или иной функции типа работы с базами данных или ожидании post данных от пользователя и т.п.
    Ответ написан
    Комментировать
  • Как авторизоваться на сервисе проверки чеков?

    @rPman
    у них какая то проблема с сертификатом
    vxh5ejgygibsv896odmn5lk7yn0.png
    Ответ написан
    Комментировать
  • Как в строке найти любой первый непечатный символ средствами php?

    @rPman
    preg_replace (или если надо utf8 к примеру то mb_ereg_replace )
    примерно так
    preg_replace('/[^a-z0-9\n\r ,\.]/','',$str)

    в регулярке указываешь списком символы, которые надо оставить, символ ^ переворачивает список на 'все кроме указанных'
    Ответ написан
  • Как распарсить такие данные?

    @rPman
    в php готовых инструментов нет, может отдельно кто писал

    parse_ini_str мог бы разобрать такое но без поддержки массива item[x] так же нет поддержки вложенных полей xxx.yyy.zzz

    так что ручками в цикле, построчно, либо регуляркой либо preg_split выделяешь сначала =, затем все что между . и в цикле набираешь поля в объекты
    Ответ написан
  • Почему не выполняется пользовательская функция?

    @rPman
    Попробуй ccxt там поддержка больше сотни бирж (криптовалютных) в частности для твоего binance поддержка торговли спот точно поддерживалась, несколько месяцев назад когда я смотрел, фьючи глючили (еще не обновили поддержку в библиотеке и я пользовался nodejs от jaggedsoft либой).
    Ответ написан
  • Почему происходит такое с WebSocket?

    @rPman
    Можно ли как-то это поправить? Или есть альтернатива может?

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

    @rPman
    Классический алгоритм обхода дерева по линейному списку - рекурсивный.
    твой метод должен искать элементы в списке, у которых parent_id указанный в параметрах вызова, возвращает метод html код отрисовки найденных элементов (кстати что возвращать так же зависит от того, как именно ты собираешься рисовать дерево, есть два подхода, рекурсивный и линейный с отступами)

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

    Если нужно сгенерровать дерево без не раскрытых ветвей, то где то надо хранить какая ветвь выбрана (раскрыта) и пропускать генерацию вывода для не раскрытых.

    Часто генерируют все дерево но для не раскрытых веток указывают стиль - display:none, меняя его при перемещении пользователя по дереву.
    Ответ написан
    Комментировать
  • Как посчитать символы после точки и до единицы?

    @rPman
    Задача - подсчет значимы цифр после десятичной запятой в строковм представлении.
    Интересно, у меня впереди маячит решение этой маленькой задачи, но только максимально эффективно на c++ ибо данных много.

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

    p.s. осторожно, данный алгоритм на php может оказаться медленнее других, менее адекватных с первого взгляда.

    Например, в цикле делишь на pow(10,x) берешь intval и снова умножаешь на этот же pow, начиная с максимально большого значения x (для double это где то 15, для криптовалютных бирж тебе скорее всего нужно 8 или 9) и уменьшаешь его до тех пор, пока полученное значение не станет не равно изначальному. Очень может оказаться что деление в php сравнимо по скорости работы со строками
    Ответ написан
    Комментировать
  • Как объединить два файла на php?

    @rPman
    Окей, буду умничать, если нужно объединить файлы именно на php (лимит памяти, нельзя вызывать сторонние утилиты shell_exec и т.п.) то делать это придется по частям.

    Читаем от файла сколько то килобайт в память, пишем столько же в результирующий, снова читаем кусочек... потом повторяем со вторым.

    fopen
    fread
    fwrite
    fclose

    больше работы с отслеживанием граничных ситуаций (пустые или отсутствующие файлы или нехватка места)
    Ответ написан
    5 комментариев
  • Как сделать сопоставление данных?

    @rPman
    Все данные у тебя уже агрегированные и не подходящие для работы и сравнения (точнее любые инструменты без семантики будут выдавать ошибки)

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

    https://esklp.egisz.rosminzdrav.ru/esklp?smnn_date...
    https://portal.eaeunion.org/ru-ru/_layouts/15/Cit....
    и т.п. это первое что гугл выдал
    Ответ написан
    2 комментария
  • Как сделать множественный поиск по БД?

    @rPman
    Подавляющее большинство реализуют подобную задачу именно так, в лоб, теряя полезную информацию о типах данных, объединяя их в текстовую строку.

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

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

    Это сложнее, но в особых сложных случаях это может быть оправдано.

    Полнотекстовый можно проапгрейдить до поддержки подобных случаев, расширяя текстовую строку, по которой идет поиск всеми вариантами поисковых запросов, но это повышение затрат ресурсов, причем заметное но главное, не позволяет лучше ранжировать результаты.
    Ответ написан
    Комментировать
  • Как узнать наличие IP в листе?

    @rPman
    $query2 = $db->prepare("SELECT count(*) FROM accounts WHERE userName LIKE :userName");
    ...
     if ($regusrs > 0) {
        echo "-2";
    этот кусок кода проверяет, есть ли пользователь с таким именем, и если есть, выдает 'ошибку' -2 (кстати почему бы и не 42?), т.е. добавь в sql запрос проверку на ip (храни их тоже в базе) и проверяй по нему.

    Приведенный код отвратителен. Почему методы exploitPatch для проверки данных пользователя называются remove? я правильно понимаю ты удаляешь из емейла, логина и пароля пользователя опасные символы, и с полученными строками их регистрируешь? А потом, когда ты поменяешь эту логику, пользователи с паролями с " начнут обламываться

    Обычно методы проверки называют validate и они должны проверять валидность и возвращать boolean разрешено/запрещено
    Ответ написан
    2 комментария