Ответы пользователя по тегу PHP
  • Как обновлять файл json на php?

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

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

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

    @rPman
    Связывай письма не по теме а по хидерам в письмах: In-Reply-To, References и не стандартный майкрософтовский Thread-Index, по крайней мере так было раньше, маловероятно что что то еще добавилось
    Ответ написан
    Комментировать
  • Как отредактировать данные в php файлах?

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

    Второй - как много данных

    Третий - на сколько сложные запросы по поиску и фильтрации у тебя есть

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

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

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

    p.s. по теме конкретно сформулированного вопроса, гугли CRUD, это готовые инструменты по create,read, update, delete объектов, которые тут же описываешь. Так или иначе эти механизмы мого кто реализует в своих фреймворках

    но начинающему настоятельно рекомендую пройти весь путь от самописных структур данных и работе с sql
    Ответ написан
    4 комментария
  • Как правильно составить SQL запрос SELECT PDO PHP для получения данных по двум строкам?

    @rPman
    так как не сказано какая именно логика в запросе должна быть при нулевых значениях, я выбрал в примере вариант - и в базе тоже нули.
    select .. from ... where ... and (:product_group is null and `product_group` is null) or (`product_group` = :product_group)

    чтобы один и тот же параметр в запросе использовать несколько раз, используй пользовательские переменные (живут до конца сессии), т.е. выполняешь два запроса, первый
    set @product_group=:product_group
    а уже в самом запросе вместо :product_group используешь @product_group
    Ответ написан
    Комментировать
  • Как сделать закрытый доступ для страницы на php и mysql?

    @rPman
    digest http auth
    настоятельно рекомендую не использовать этот метод авторизации (да и любой) без https
    Ответ написан
    Комментировать
  • Как вывести информацию с БД массивом?

    @rPman
    в $query->execute(['ref' => $my_ref[0]]); данные массивом передались.

    к сожалению биндинг в pdo не умеет работать с массивами, каждый параметр должен быть конечным объектом (число., строка...)

    так же чтобы условие в sql обрабатывало массив нужно использовать выражение
    select ... from ... where id in (1,2,3,4,...)

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

    $sql='select ... from ... where id in ('.implode(',',$id_array).')'

    Так же проверь что массив идентификаторов не пустой, так как иначе будет ошибка в sql

    p.s. осторожно, количество значений в 'id in' лимитировано (кажется 1000), если инужно больше, то придется создавать временную таблицу, заливать в нее искомые идентификаторы и строить запрос с left join

    Еще я встречал похожий метод но с использованием биндингов, когда sql запрос генерировался вида:
    select ... from ... where id in (?,?,?,?,...)
    с нужным количеством ? тогда передав массив напрямую в execute можно получить результат, лимит на количество ? еще меньше, это определяется драйвером базы данных.

    p.p.s. и совсем сверху на засыпку методика, ее имеет смысл использовать когда со стороны клиента фильтруемых данных больше чем 1 поле (например 2 массива точнее таблица с несколькими колонками) и очень не хочется заполнять в базе временную таблицу с этими данными (это очень сильно роняет производительность) то можно сформировать внутри sql таблицу из константных данных:
    select ... from ...,
    (
      select ? as col1,? as col2
      union select ?,?
      union select ?,?
    ...  
    ) x where ...
    Ответ написан
    4 комментария
  • Как можно вытащить стоимость товара из сайта конкурента?

    @rPman
    цена на сайте не формируется скриптом, т.е. достаточно загрузить эту страницу и разобрать например simple_html_dom
    Ответ написан
    Комментировать
  • Как оптимизировать генератор слов на PHP?

    @rPman
    Этот алгоритм пытается сохранить все сгенерированные слова в памяти, это 64^5 строк на это никакой оперативки не хватит

    Вместо
    $words[] = $prefix;
    вставь свой код, который сейчас в цикле
    // My Code ...

    либо оформи его вызов через анонимную функцию, так синтаксически будет красивее
    Ответ написан
    Комментировать
  • Как лучше и проще организовать на сайте RealTime notification?

    @rPman
    современное решение - websocket (позволяет серверу слать сообщения веб-клиентам)

    поддерживается всеми браузерами, есть огромное количество реализаций сервера, в т.ч. на php (рекомендую reactphp асинхронный, на нем же и сам http бакэнд делать нормально, а nginx снаружи проксирует запросы)
    Ответ написан
    Комментировать
  • Как регуляркой извлечь из html-кода элемент с определённым классом?

    @rPman
    так и не понял почему нельзя использовать адекватные инструменты?
    simple_html_dom например?
    Ответ написан
    3 комментария
  • Как регуляркой не просто удалить, но и возвратить удаляемое из строки?

    @rPman
    preg_replace_callback не подходит? будет вызывать твой метод для обработки каждого найденного вхождения чтобы получить строку, на которую ее нужно заменить
    Ответ написан
  • Как устроить поиск и вывод всех найденных значений из csv файла PHP?

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

    а из php работать с помощь - fopen, цикл !feof и fgetcsv
    p.s. fgetcsv сильно медленней простого чтения по строкам fgets, но он умеет читать строки с экранированными ковычками '"', так что если таковых нет то работай с текстом напрямую
    Ответ написан
  • Как избавиться от одновременных запросов в PHP?

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

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

    @rPman
    если я верно понял вопрос по комментариям, это javascript injecting, сделать это можно только на стороне клиента (плагином к браузеру или командой в консоли)

    Например плагин к браузеру удобный tempermonkey, позволяет запускать пользовательский javascript в зависимости от url (по маске например example.org/path/*)
    Ответ написан
    Комментировать
  • На своем сайте выложить часть другого сайта, по верх всех окон. Как сделать?

    @rPman
    скорее всего это тот сайт детектирует открытие себя в iframe и предотвращает, так как это позволяет использовать очень серьезную уязвимость clickjacking
    Ответ написан
  • Как использовать javascript для junior backend разработчика на php?

    @rPman
    it это наиболее динамичный (быстро развивающийся и меняющийся) 'рынок'

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

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

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

    @rPman
    кто же так задание формулирует
    слова - элементы массива? игнорировать ли небуквенные символы? пустые строки? про кодировку я молчу...

    есть в php функция ctype_upper - скармливаешь ей в цикле первые символ каждого элемента и если true то выводишь его
    foreach($mas as $word) if(ctype_upper($word[0])) echo "$word ";


    есть тут любители не циклов, может array_walk использовать?
    Ответ написан
  • Можно на php сделать websocket-ы и почему все предпочитают на node.js?

    @rPman
    что значит все?
    лично мне не нравится nodejs мне оно показалось медленней php (хотя чистый helloworld сервер работает примерно в 2 раза быстрее)

    асинхронный php реализован неплохо в reactphp, там тебе и вебсокеты, и веб сервер и вообще все вкусное из мира nodejs
    Ответ написан
    Комментировать
  • Как лучше писать парсер (PHP)?

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

    Так что все зависит от твоего целевого сайта

    По теме, если прямо надо парсить html именно на php то я рекомендую simple_html_dom, простой удобный... но он спасовал со страницами aliexpress (этот сайт борется с парсерами, даже если брать страницу уже после javascript), можно пользоваться более низкоуровневым DOMDocument::loadHTMLFile, он не такой удобный но менее строгий
    Ответ написан
    Комментировать