Задать вопрос
Ответы пользователя по тегу PHP
  • Как узнать процент похожести текста?

    @rPman
    Похожесть - перебором.

    У меня в поиске заголовков статей (40к) postgres подсчет левенштейн со всеми записями был меньше секунды, а ведь он фактически перебор делает. Но задача на самом деле сложнее.

    Посмотри хорошую статья с обзором алгоритмов, статья старая но взяв из нее алгоритмы будет что гуглить дальше

    p.s. рандомная ссылка из гугла, в работе есть код на питоне
    Ответ написан
    Комментировать
  • Как работает PHP, Браузер - PHP?

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

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

    Так что от тебя зависит
    Ответ написан
    Комментировать
  • Как лучше организовать запрос к БД на основе данных?

    @rPman
    Да это хорошая практика с точки зрения юзабилити, когда выбрав один из параметров система фильтрует варианты выбора в дальнейшем на основании уже сделанного выбора

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

    @rPman
    Делай проверки по успешному выполнению каждого вызываемого метода, в отладку или логи выводи что там в $res лежит, что передашь в параметрах запроса, вдруг там пробелы, каким-нибудь print_r или var_dump или json_encode.

    Настрой отладчик, сэкономили много времени
    Ответ написан
    1 комментарий
  • Как разобраться в api php Binance?

    @rPman
    Installation

    composer require binance/binance-connector-php

    composer есть в поставке любой linux либо скачай с офф сайта последний (тогда запускать composer.phar, он написан на php)

    p.s. есть библиотека ccxt ставится так же через composer, поддерживает кучу бирж (наверное все имеющие смысл) для бинанса там помню максимум проблема будет с coin-m futures и то это было несколько лет назад, когда они только только появились

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

    @rPman
    прописать это в php.ini или так:
    ini_set("log_errors", 'on'); // 'on' а не true как многие пишут
    ini_set('error_log', 'errors.log');


    еще можно свой обработчик ошибок задать
    https://www.php.net/manual/en/function.set-error-h...
    https://www.php.net/manual/en/function.set-excepti...
    Ответ написан
    2 комментария
  • Обновлять базу данными, затирая первые старые данные?

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

    Если нет связанных таблиц (что логично, твой id на самом деле не идентификатор, не вводи народ в заблуждение и назови по другому) в твоем случае скорее всего можно схитрить, можно key_id считать на лету, т.е. ключевое поле с autoincrement, но назови его по другому, например key_id_orig
    1+key_id_orig-min(key_id_orig)

    но это сработает только если удаление возможно только самой старой записи, если же будут удаления из середины, то порядок придется пересчитывать по другому, через сортировку всей таблицы по key_id_orig и подсчету колонок функцией row_number
    Ответ написан
    5 комментариев
  • Как получить информацию, отправленную с помощью метода GET/POST в PHP?

    @rPman
    Работа с http запросами рекомендуется с помощью curl_xxx смотри там куча примеров, мало того для GET запросов вообще ничего не надо и простой file_get_contents('http://xxxx вернет ответ

    Работа со строками, если ты определяешь, что вернется в ответ на запрос, то делай это не в таком виде как ты предложил а используй какую-нибудь стандартную сериализацию, настоятельно рекомендую json, для ее работы в php есть методы json_encode/json_decode

    Тогда строки будут легко превращаться в объекты/массивы и с ними будет легко работать
    Ответ написан
  • Почему сравнение всегда ложно?

    @rPman
    удостоверься что $trainings[1] действительно содержит побайтово "pump", причем очень часто символы могут совпадать визуально но не значением, например русская 'Р' и английская 'P'.

    выведи обе сравниваемые строки с помощью bin2hex
    Ответ написан
  • Как правильно писать код, чтобы не было PHP Notice: Undefined index?

    @rPman
    если ты точно знаешь что отсутствие переменной это нормальная ситуация, то можно отключить проверку ее наличия с помощью @, тогда будет подставлено значение NULL в случае ошибки для строк, и 0 для чисел
    @$com_offer['offer_count'] += @$_item['quantity'];
    В данном случае если у тебя оба ключа будут отсутствовать то будет создан 'offer_count' с 0 значением

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

    @rPman
    когда запросы блочатся, когда есть проверка браузера. Задавая вопрос,
    но ты не задала вопрос про свою проблему

    покажи свой код, покажи свои попытки, где именно затык, вот тогда тебе дадут советы

    p.s. лучше всего парсить с помощью браузера, гуглить к примеру selenium
    Ответ написан
    Комментировать
  • Почему php не отправляет письмо на телеграм?

    @rPman
    {$txt}
    текст в ссылках должен быть пропущен через urlencode, а еще у тебя там минус в идентификаторе

    так же настоятельно рекомендую, прежде чем делать приложение, протестировать ссылки вручную через curl, будет видно и ответ, а с ключом -v подробности и заголовки ответа.

    fopen не самый лучший способ коммуникации по сети, проще было бы file_get_contents использовать, и у него есть context, который позволяет много что настроить в запросе) но лучше пользоваться встроенный curl_xxx
    Ответ написан
    2 комментария
  • Создание классов в цикле?

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

    Если есть задача динамического формирования кода (например нужно 100500 классов, отличающихся незначительно но if-ы по коду заметно замедляют его работу и усложняют чтение), особенно крупного, настоятельно рекомендую генерировать файлы и делать их include (имя файла можешь делать по хешу содержимого, если вариантов содержимого много, или по именам атрибутов, определяющих изменения). Так как include отлаживать удобнее, сообщения об ошибках будут понятны и легко проверяемые, а так же сервер такие файлы кеширует и при наличии ускорителей - еще и оптимизирует, eval же компилируется каждый раз при вызове.
    Ответ написан
    4 комментария
  • Как работать с большими данными в MySQL или как создать удобную структуры базы данных?

    @rPman
    Да.
    Есть момент, твой объём данных ничтожно мал.

    У хранения данных в базе данных есть два основных подхода - хранить ключ-атрибут-значение, где на атрибут будет отводиться одна строка таблицы, называется eav, и хранение данных в полях, где на один объект отводится одна запись в таблице атрибуты хранятся в колонках.

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

    Второй подход всем хорош и рекомендуется, мало того можно разрабатывать интерфейс приложения с оглядкой на первый способ с возможностью добавления новых атрибутов не как новые записи в базе а как вызов ddl sql модификации таблицу, т.е. добавлять колонки на лету, таким образом получить достоинства eav и скорость аналитики. Недостаток подхода, в общем случае удаление и изменение колонок медленное в базах данных, так как пересоздаётся вся таблица, Но это проблема будет заметна когда объектов сотни тысяч.

    То есть я рекомендую хранить объекты в строках а атрибуты в колонках, даже если их сотни. Старайся отделять разные объекты по разным таблицам.
    Ответ написан
    2 комментария
  • Как в php с помощью curl отправить многомерный массив вместе с файлом?

    @rPman
    Финский Мачо все прекрасно расписал
    добавлю от себя, так как у тебя принимающая сторона php то можно создавать массивы через именованные параметры GET или POST multipart/form-data в формате name[] или name[key], например:
    curl -X POST http://example.org/test.php -d a[]=1 -d a[]=2
    на сервере создаст переменную
    $_POST['a'] = [1,2]
    или так
    curl -X POST example.org/test.php -d a[xxx]=1 -d a[zzz]=2
    $_POST['a'] = ["xxx"=>1,"zzz"=>2]
    Ответ написан
    Комментировать
  • Скачивания файлов (в браузере) с FTP сервера через VPS?

    @rPman
    ftp худший способ, работает медленно, веб сервером не поддерживается
    купил FTP сервер
    где же такой ужас нашел
    p.s. fuse mount будет глючить, проверено, любой косяк даже малейший с сетью до ftp и вся машина висит и ожидает таймаут.

    Ищи способ раздачи файлов по http, тогда nginx поддерживает проксирование, в т.ч. с авторизацией

    При наличии полноценной vps-ки можно настроить nfs, не самый лучший способ (возможно я плохо настраивал, у меня было медленно) зато универсально и из коробки поддерживается всеми linux

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

    Полностью аналогичное nbd решение - это iscsi сервер (на linux рекомендую использовать istgt, очень простая и легкая реализация, другие кушают процессор), в этом случае его может подключить и windows машина.

    Так вот главный момент, подключив медленное блочное устройство в linux можно поверх него добавить кеширование на локальный диск меньшего размера, например с помощью универсального bcache (есть еще старый lvcache), так же файловая система zfs умеет штатно кеширующие устройства для кеша на чтение. В общем возможности очень гибкие.
    Ответ написан
    4 комментария
  • Как оптимизировать работу PHP интеграции?

    @rPman
    Со своим сервисом - сделать batch запросы, позволяющие одним запросом выполнять несколько операций, например запрашивать/модифицировать информацию сразу по нескольким объектам. Но еще лучше, реализовать требуемую логику изменения объектов прямо на сервере, грубый пример - нужно сдвинуть координаты объектов на величину [dx,dy,dz], вместо того чтобы все с сервиса выгружать, менять координаты и загружать обратно, нужно сделать команду, которая на вход получит этот вектор и все сделает на сервере (это самый быстрый вариант)

    С чужими сервисами, либо искать api для batch операций, либо переделать код на параллельные запросы, надеясь что этот сервис оптимизирован на такую работу (не факт, и даже если есть, количество параллельных запросов могут быть ограничены). Если ни то ни другое не доступно, размести свой сервис территориально максимально близко к чужому сервису (так как очень часто задержки сетевых запросов вносят очень большую задержку), само собой сначала удостовериться что причина именно в этом а не тормозах сервиса
    Ответ написан
    3 комментария
  • Линк на апи валидации паспортных данных?

    @rPman
    какой закон это требует?
    p.s. https://kontur.ru/market/spravka/25171-xochu_proda...
    Ответ написан
    Комментировать