Ответы пользователя по тегу PHP
  • Как исправить кодировку в 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 код для каждого элемента), порядке и местах размещения элементов на форме и прочее.
    Ответ написан
    Комментировать
  • Как мне выводить дату при выводе ошибки в php?

    @rPman
    добавьте вывод даты тут:
    php.net/manual/ru/function.set-error-handler.php

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

    @rPman
    С трудом понимаю что у вас за проблемы и с каким именно репозитарием?

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

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

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

    https://secure.php.net/manual/ru/function.fileatime.php
    Ответ написан
    Комментировать
  • Почему зависает консоль ssh при завершении демона php?

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

    когда нажимаете enter, bash просто выводит повторно приглашение ко вводу команд
    Ответ написан
    1 комментарий
  • Как реализовать статусы пользователя online/offline - PHP?

    @rPman
    Пожалуйста, поднимите у себя websocket, ресурсов это много не займет, зато возможности у вас появятся огромные, вы сможете не только точно знать момент, когда пользователь закрыл страницу или отключил интернет, но и сможете со стороны сервера эффективно передавать сигналы клиентам (чат например)
    Ответ написан
    2 комментария
  • Как сделать бесконечно выполняющийся скрипт php?

    @rPman
    php-cli
    Это отдельный, хоть и виртуальный пакет в операционных системах, имеет свой каталог с настройками расширений в /etc/, запускается приложение как и все скриптовые php имя файла плюс можно добавить первой строчкой по стандарту #!/usr/bin/php и поставить бит x на файл, тогда он будет запускаться как обычное приложение.

    cron - это не порядок, он подходит наоборот для периодических задач, которые отработали и завершили работу.

    По правилам, если вам нужен демон, который постоянно будет работать, то для этого необходимо создать для него файл службы, читать документацию по операционной системе или в /etc/init.d этот список все операционки тянут для совместимости до сих пор (там простой bash который запускает и останавливает вашу программу по команде start|stop).

    Будьте внимательны, если вы об этом не позаботитесь сами, ваш скрипт самостоятельно никто не перезапустит, если он вылетит по ошибке.
    Ответ написан
    Комментировать
  • Создание вероятности на php. Можете помочь?

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

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

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

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

    p.s. попробуйте это get-included-files чтобы узнать все используемые файлы и debug_backtrace чтобы узнать какой в каком порядке вызван (не подключен! момент подключения можно получить только добавляя специальные вызовы в каждый важный файл)
    Ответ написан
    Комментировать
  • Как отсылать PONG?

    @rPman
    Вам точно нужно работать с websocket на таком низком уровне и реализовывать его самому?
    Попробуйте https://github.com/ratchetphp/Pawl и вообще пользуйтесь react и асинхронный код - это действительно круто.
    Ответ написан
    4 комментария