Задать вопрос
Ответы пользователя по тегу PHP
  • Вставка изображения на задний план gif-анимации. Как такое возможно реализовать?

    @rPman
    первый же запрос в гугл
    html transparrent background gif animated

    https://www.sitepoint.com/community/t/how-would-i-...
    Ответ написан
    Комментировать
  • Узнаем кол-во строк в нескольких базах?

    @rPman
    Если баз МНОГО то не только считайте количество тригерами, но и делайте запросы в базу асинхронными, иначе даже после десятка баз последовательный запрос будет выполняться секунды.

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

    p.s. будьте осторожны, несколько баз работают независимо и не умеют транзакции, т.е. количество может измениться в процессе чтения и к примеру если вы перемещаете объект между базами, суммарное количество объектов не изменилось (тут убрали там добавили) но при запросе количества можно получить на 2 меньше или больше, т.е. неверное значение.
    Одно из решений, храните несколько последних значений подсчетов количества с датой их получения, а запрашивать эти данные только те, дата которых ниже даты запроса
    Ответ написан
    Комментировать
  • Есть файл который весит ~6 гб, как его прочитать?

    @rPman
    Если предложения выше вам не помогут, и вам нужно весь файл зачем то считать в память, то воспользуйтесь 64-битной версией php, поправив в php.ini
    memory_limit = 8192M

    p.s. если ваш файл - картинка, смело умножайте на 4 ваши требования по оперативной памяти
    Ответ написан
    Комментировать
  • Как сделать кириллицу читабельной в HTTP_REFERER?

    @rPman
    вместо помещения в тело письма текстовой ссылки, помещайте ее html воплощение
    <a href='http://ссылка'>текст, который будет виден в письме, подчеркнутым как ссылка</a>
    в тексте вы можете писать что угодно и как угодно, лищь бы заголовки письма и в head соответствовали кодировке
    Ответ написан
    Комментировать
  • Как отправить 2 post запроса одновременно?

    @rPman
    Найдите в вашем коде код отправки ajax и тупо продублируйте вызов обычным копированием (скорее всего проще будет вместо анонимных методов сделать временно именованные а саму строчку с кодом ajax продублировать.
    Ответ написан
    Комментировать
  • Как обойти JS скрипт, мешающий спарсить страницу?

    @rPman
    Смиритесь, пол интернета уже javascript based.

    Загружать страницы headless браузерами, компоненты браузера есть по до все известные языки програмирования и платформы, основанные либо на webkit (например у java webengine) либо на основе firefox (mono webbrowser) либо iexplore (.net - webbrowser).
    p.s. php - https://github.com/chrome-php/headless-chromium-php

    Страницу получать либо прямо из языка програмирования, запрашивая webengine.document.innerHTML или делать скрин картинки, либо инжектить javascript на страницу и работать с ней как вам заблагорассудится, в т.ч. эмулировать нажатие кнопок и вообще пользователя.
    Ответ написан
    3 комментария
  • Размещение Node.js и PHP приложения на одном сервере?

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

    web-клиент -> web-севере на php -> файл на сервере -> nodejs -> база данных (отсюда php сервер отдаст его клиентам)
    Ответ написан
    1 комментарий
  • Есть ли бесплатный хостинг для PHP WebSockets?

    @rPman
    Хостинга именно php websocket вы не найдете, такого SasS скорее всего нет
    но из дешевых решений, вам достаточно не обслуживаемого linux vps за 1$ в месяц или даже дешевле

    гуглить low cost vps, например lowendstock.com

    запустить свой php websocket сервер из командной строки screen особых знаний linux не понадобится, а для тестов сойдет.
    Ответ написан
    1 комментарий
  • Как проверить, что каждые 0.5 секунд приходит запрос?

    @rPman
    Выкиньте из головы эту тупую устаревшую rest идеологию.
    Она создает экспоненциальную (n^2 от количества клиентов) нагрузку на сервер и имеет лаг реакции.

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

    @rPman
    Укажите в html файле в заголовке head тег <meta charset="utf-8"> (или в какой у вас кодировке файл на самом деле).
    p.s. вероятность нарваться на 100500 проблем с таким 'методом создания' файла эксель - очень высокая.
    Сделайте как надо (генерируйте файл по его формату, используя для этого правильные инструменты), не создавайте себе и другим проблем в будущем.

    p.p.s. начиная примерно с 2005 года, формат файлов excell - xlsx. Это на самом деле zip архив с файлами, многие из которых текстовые xml, работать с которыми очень даже просто без библиотек.
    В подавляющем большинстве случаев вам достаточно создать шаблонный документ и редактировать своей программой один файл, описывающий данные. Поверьте, он очень простой. Проблемы начинаются, когда у вас формулы, бинарные файлы, внешние ссылки на данные и т.п.
    Ответ написан
    Комментировать
  • Создание базы данных для накопления опыта, как реализовать?

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

    Все что вы описали сделать можно, и не обязательно на php и базах данных но если речь идет именно о них то вперед. Так как вы делаете для себя, вам не нужны никакие mysql/postgres и т.п., достаточно простой sql базы данных на основе sqlite - достоинство не надо ничего устанавливать и настраивать, база даных = файл, поддержка php из коробки и т.п. (не надо делать свою базу данных на файлах в своем формате, этот путь в никуда и пользы вам не принесет, но если у вас есть неизменяемые данные, которые не надо менять из интерфейса, такими бывают некоторые справочники например, то можно воспользоваться форматами данных, предлагаемых php - json, serialize, или var_dump т.е. формат php, когда данные описаны прямо в коде в виде массива)

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

    @rPman
    В одном месте, одно из требований у меня было - подготовить deb пакет со скриптами первичной установки и обновления (там не было классической базы но смысл в том чтобы и ее тоже при необходимости обновлять), причем необходимо было гарантировать что deb корректно обновит с любой предыдущей версии (это легко решается последовательным исполнением скриптов каждой промежуточной версии, не так эффективно зато однозначно). Откат на предыдущую версию не требовался.
    Ответ написан
  • Мнгновенные оповещения ajax Long Polling && php?

    @rPman
    Как реализовать серверную часть проверки бд, на новые оповещения для пользователя?
    не все базы данных предоставляют такой функционал, например postgres позволяет, используя sql выражения LISTEN и NOTIFY, и соответствующий метод на клиенте pg:
    php.net/manual/ru/function.pg-get-notify.php

    К сожалению php не event oriented язык програмирования (только сокеты позволяют красиво все делать асинхронно), то либо вы вызываете pgsqlGetNotify с 1 или 0.1 секундным интервалом в цикле, проверяя наличие notify либо слушаете свой сокет асинхронно в своем приложении, а в соседнем в цикле с 10-30 секундным ожиданием ждете событие и отправляете ответ в этот сокет.

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

    чтобы отправить ответ на сторону веб-клиента, вы вынуждены будете либо использовать long pooling (устаревшая технология, с кучей проблем) либо посмотреть примеры по работе с websocket и научиться наконец красивому event-based программированию, посмотрите примеры сервера websocket на php (на стороне клиента все еще проще)
    socketo.me/docs/hello-world
    В этом случае ваше php приложение становится полноценным веб-сервером (вебсокет например), который все еще не рекомендуют выпускать в интернет напрямую, и устанавливают между интернетом и им классивческий ngnix или apache.

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

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

    p.s. nodejs любят за то что асинхронных подход там используется изначально
    Ответ написан
    Комментировать
  • Сжатие картинок хранящихся на шареде?

    @rPman
    Приложения можно ставить и без root, в локальную директорию, чуть более сложно но реально, примерно так
    https://askubuntu.com/questions/339/how-can-i-inst...
    Ставьте imagemagic и пользуйтесь решением выше

    Приложение на php gd, меняющее разрешение картинки занимает 4 строчки плюс управление
    php.net/manual/ru/function.imagecopyresized.php
    Ответ написан
    Комментировать
  • Как реализовать рассылку на Вайбер, Вотсап, Телеграм?

    @rPman
    Легально проверить наличие - последовательно добавлять телефоны в контакт лист своего телефона и смотреть на реакцию чат-приложений.

    Легально организовать рассылку - нельзя. Судя по тому что я вижу в telegram там очень много ухищрений, чтобы это стало сложно.

    Пример бота рассылки сообщений - на базе web telegram, приложение эмитирует буквально добавление контакта, ввод посимвольно текста и прочее, само собой с фиктивных аккаунтов, ибо после спам деятельности они будут забанены почти моментально.
    Ответ написан
    2 комментария
  • PHP7. Двухуровневое кеширование + форк?

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

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

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

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

    В некоторых случаях скорость может подняться тысячекратно.

    Классический же подход позволяет 'из коробки' использовать многопоточность и даже кластерную реализацию чуть ли не на администраторском уровне.

    upd. исправил в ответе redis на react (глупо попутал термины)
    Ответ написан
    Комментировать
  • Зависает процесс php из командной строки, что сделать?

    @rPman
    в крон задании сохраняйте pid процесса в файл (запускайте через & и сразу берите pid из переменной $!), а соответственно перед этим, убиваете процесс с pid из этого файла (если он есть).
    Ответ написан
  • Возможно ли обновить часть XML файла через PHP?

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

    В сложных ситуациях, когда нужно искать, где именно и что заменить, можно парсить xml самостоятельно, построчно, есть для этого даже готовые методы
    https://secure.php.net/manual/ru/ref.xml.php
    т.е. вы построчно парсите xml для поиска нужной строки, а запись ведете как с обычным текстовым файлом, построчно, подменив нужные данные на лету.

    p.s. если у вас большие данные, что требуется такая оптимизация (если вам не подходит вариант, описанный в соседнем ответе) то... меняйте логику вашей программы,.. xml (или например json) вообще самый не подходящий инструмент для хранения.
    Ответ написан
    Комментировать
  • Почему возникают длительные задержки при ответе бота в Telegram?

    @rPman
    Боюсь что это проблема telegram а не ваша, когда я занимался анализом сообщений, задержки с момента отсылки сообщения и до получения их пользователем были до минуты (правда речь в моем случае идет об обычном клиенте, слегка модифицированным для работы с событиями, а не офицальных ботах, которые могут быть только админами/владельцами чата).
    Ответ написан
    Комментировать
  • Как реализовать динамическую базу данных(MySQL)?

    @rPman
    Шаблон должен иметь описание требуемых изменений в базе данных.

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

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

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

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

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