Ответы пользователя по тегу PHP
  • Как автоматически выводить последние 3 публикации из группы facebook на странице сайта?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    https://developers.facebook.com/docs/graph-api/ref...

    Укажите fields=id,message,link,picture
    Токен пользователя должен иметь соответствующие права доступа на чтение и пользователь должен быть администратором группы.

    Я категорически не рекомендую использовать группы Facebook для сайтов, бизнеса и т.д.
    Группы предназначены для общения между друзьями. У групп очень ограниченные функции, например вы не можете таргетировать рекламу, посмотреть как люди читают посты и т.д.

    Если вы хотите работать с аудиторией сайта/проекта/магазина - используйте страницы.
    Ответ написан
    Комментировать
  • Facebook api. Возможно ли загружать видео с youtube ссылкой?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Нет. Это не сработает. Либо скачивайте ролик с Youtube и делайте полноценный аплод либо просто шаринг ссылки с видосом.
    Ответ написан
    1 комментарий
  • Api php facebook. Как опубликовать несколько фото с текстом в группу?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Примерно так
    $response = $facebook->api("/группа/feed", 'POST',
      array(
        'access_token=' => $access_token,
        'message' => 'Много фоток',
        'attached_media[0]' => '{"media_fbid":"айди первого фото"}',
        'attached_media[1]' => '{"media_fbid":"айди второго фото"}'
      )
    );
    Ответ написан
    1 комментарий
  • Можно ли на хостинге разместить скрипт, который будет запускаться автоматически и выполнять определенный алгоритм на других сайтах?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    1. Вам потребуется VPS, а не просто виртуальный хостинг для простых сайтов. VPS сейчас стоит практически столько же сколько и виртуальный хостинг, только намного удобнее.
    2. Поскольку вам наверняка потребуется работа с более-менее полноценным браузером, то следует смотреть в сторону https://github.com/GoogleChrome/puppeteer и JavaScript как язык.
    Ответ написан
    Комментировать
  • Возможно ли обращаться в одном php файле к разным запросам?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Шаг первый phpfaq.ru/newbie/na_tanke
    Шаг второй php.net/manual/ru/function.include.php
    Ответ написан
    Комментировать
  • Как в огромнейших проектах искать ошибку?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Для начала следует поставить xdebug, xhprof и PHPStorm. Это необходимый набор инструментов для облегчения навигации. В PHPStorm очень удобный отладчик. Можно видеть стэк вызовов и т.д. xhprof позволяет в целом посмотреть на картину выполнения всего проекта. Работать с массивами правда сложно, особенно когда "черезчур умные" люди начинают изобретать самопальные сортировки и функции с паршивыми именами.

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

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Была когда-то попытка написать свою CMS. Молодой был, зеленый. Дало много опыта и понимания, что и как работает.
    1. Написание происходило без особо влияния чужих систем и идеи брались из головы.
    2. Файлы выкладывались на сервер, далее прописывался коннект к базе и потом запускался скрипт, который создавал структуры данных.
    3. Использовался TinyMCE.
    4. Не было особой специализации, но были написаны модули каталога, новостей, видеообработки.
    5. Да, было ядро и отдельные модули. Но все было жестко связано, не было динамического связывания. Сейчас бы сделал все иначе.
    6. В качестве шаблонизатора использовался Smarty.
    Репы пока нет, из работающих сайтов можете посмотреть на progimp.ru - там было достаточно большое коммьюнити в свое время.
    Ответ написан
    Комментировать
  • Как передавать моментальные статьи на facebook через api?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Скорее всего их публикуется слишком много и робот не успевает их проверить.
    Либо статьи плохого качества. Не могли бы вы привести примеры того, что есть и чего нет?
    Ответ написан
    Комментировать
  • Как получить подписчиков страницы на ФБ?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Через API нельзя. Можно получить только полное количество подписчиков через свойство fan_count на странице.

    Спарсить тоже не получится, т.к. Фейсбук не выдает полный список.

    Какую задачу вы пытаетесь решить?
    Ответ написан
    3 комментария
  • Для чего класс Stream в PSR-7?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    www.php-fig.org/psr/psr-7/#13-streams

    Стримы нужны для работы с потоками. Например тогда, когда вы не знаете размер ответа или ответ настолько велик, что не умещается в ОЗУ.
    Ответ написан
    Комментировать
  • Go или PHP как язык влияет на развертывание приложения?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Язык никак не влияет на развертывание приложения. Влияют зависимости.
    Например, если вы собираетесь создавать Debian-пакет, то вам так или иначе прийдется прописать зависимости от других пакетов. Если какой-то пакет уже установлен, то нет никаких проблем.

    Прописывание в крон или создание vhost для Nginx задачи тривиального характера и не должны вас смущать. Это стандартные вещи, как и настройка ротации логов или синхронизация времени на сервере.

    Как и Go, PHP тоже можно собрать в один файл. Например так работает Composer.

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

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Обычно большие объёмы парсятся посредством map/reduce. На PHP лучше всего использовать консольные скрипты и сразу отводить побольше памяти. Алгоритмы парсинга очень зависят от формата файлов. Например csv парсить очень легко. Обычно такие файлы парсят сразу в несколько потоков.
    Разного рода xml парсят либо через simple xml либо через domparser. Иногда парсят с помощью ручного построения дерева. Т.е. Читают файл посимвольно и формируют дерево тегов. Этот подход работает, когда файлы очень большие, а глубина вложенности небольшая и формат предсказуем.
    Разного рода xls парсятся через Phpexcel, он даже картинки умеет доставать.
    Плюс парсинги делаются через механизм очередей. Например загружается файл на сервер, ставится задача распарсить файл, далее файл парсится через консольный скрипт. В особо извращенных случаях, вроде xls файлов с адскими макросами внутри, доходит до инстанцирования OLE объектов на отдельной виндовой машине и выдёргивания данных через vbs.
    Ответ написан
    Комментировать
  • Junior PHP, что бы вы спросили на собеседовании?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    1. Написать простейшее API для формы обратной связи. От фронта через POST приходят поля email и text. Ответ в JSON, булев параметр success. От руки, прямо на доске. Если через php_filter завалидирует поля, жирный плюс.
    2. Зачем нужены интерфейсы?
    3. Что делать, если отображаются крякозябры на экране вместо сайта?
    4. Есть база, в ней 2 таблицы: пользователи и фотографии, напишите запрос, который будет выводить список пользователей с их первой (самой старой) и последней (самой новой) фотографиями.
    5. Работали ли вы с git ранее?
    Ответ написан
    Комментировать
  • Как надежнее удалить больше 2КК ключей из Redis?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    eval "for _,k in ipairs(redis.call('keys','key:*:pattern')) do redis.call('del',k) end" 0


    Замените key:*:pattern на свой шаблон и скормите redis-cli.
    Ответ написан
    Комментировать
  • Push сервер, серверная часть, php+node.js, как правильно реализовать?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Первое, это то, что вам нужно разобраться, как именно работают push-уведомления.
    Второе, ненужно порождать лишние компоненты.
    Для PHP тоже имеются решения https://packagist.org/packages/minishlink/web-push

    Для начала вам потребуется понять, что подписки браузеров нужно хранить в отдельной таблице или коллекции в зависимости от вашего основного хранилища.
    Для личных сообщений необходимо будет реализовать опциональную, но включенную по умолчанию связь. Следует помнить о том, что один и тот же пользователь может заходить с разных устройств. Например с десктопа, ноута и таблетки. У одного пользователя может быть несколько подписок.
    Вам потребуется сервер очередей, например RabbitMQ. У вас будет 2 вида задач - публичные и частные.
    Публичная задача - это широковещательная задача, цель которой охватить всех пользователей.
    Например, когда публикуется новый материал на сайте и сайт готов принять всех желающий.
    Для него потребуется простая очередь. Задача воркера будет заключаться в том, чтобы найти всех подписчиков, создать задание для каждого из них и поместить это задание во вторую очередь со множеством воркеров, которые будут непосредственно отправлять пуши.
    Первое задание будет содержать id - материала.
    Второе будет содержать id материала и id подписки.
    Данный подход позволит очереди работать очень быстро. Плюс выборка из базы по id практически мгновенна вне зависимости от движка + отлично кэшируется на уровне самой базы. Доставать из базы нужно только необходимый минимум полей.
    Рассылка личных сообщений может быть сделана на основе второй очереди, дополнив задание несколькими полями. Т.е. воркерам будет все равно что они доставляют.
    Записывать задание со всеми полями для глобальных публикаций не очень хорошая идея, т.к. это будет занимать много памяти и вызывать тормоза. Плюс такое решение не очень хорошо масштабируется.

    Воркеры можно сделать и на Node.js, а можно на PHP. У RabbitMQ есть все необходимое для этого. Можно поискать и другие очереди, однако RabbitMQ достаточно популярное и проверенное решение.
    Ответ написан
    Комментировать
  • Есть примеры как сделать realtime чат на ajax+php+mysql? Например Ajax Long Polling?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Не занимайтесь хренью. Используйте это socketo.me

    Еще можете на этот проект посмотреть www.swoole.com
    Ответ написан
    5 комментариев
  • Есть ли в PHPStorm инструмент для просмотра того, какие файлы инклюдят друг друга?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    В PHPStorm такой штуки нет. Про CacheGrind вам уже написали. Еще я бы рекомендовал бы посмотреть в сторону XHProf. Особенно его рендерер вызовов.

    xhprof_callgraph.jpg
    Ответ написан
    2 комментария
  • Как бы вы сделали бэкенд для такого приложения?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Для этой задачи идеально подходит MongoDB. В ней просто указываешь точку и радиус https://docs.mongodb.com/v3.2/reference/operator/q...
    С точки зрения производительности здесь аналогов практически нет, особенно, если вы можете позволить себе InMemory storage.
    Ответ написан
    Комментировать
  • Плохо ли создавать проекты с нуля? Что значит быть про?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Я понимаю, о чем вы пишите и почему. Ваш код работает, т.к. решает поставленные задачи и удовлетворяет потребности ваших клиентов. Имеет ли он право на жизнь? Да, но только в вашем отдельно взятом случае.

    Дело в том, что ваш код не гибок, в нем отсутствует масштабируемость, его невозможно поддерживать.

    Что если вам потребуется сделать блог, в котором нужно иметь комментарии, которые обновляются в режиме реального времени? И комментарии могут содержать HTML, но такой, чтобы ваш сайт не могли взломать?
    А еще комментарии короче 2000 символов по воскресеньям платные. Оплата через Яндекс.Деньги.
    Вы все это делаете, все работает.
    Затем заказчик вам говорит, я хочу запустить такую же систему другу, но с оплатой по понедельникам через WebMoney.
    Вы копируете сайт, переписываете функцию оплаты.
    Дальше ваш заказчик видит, что у друга больше денег, он просит добавить WebMoney к себе.
    Вы опять переписываете код. Добавляете условия.
    Потом к вам приходит друг заказчика и хочет другое оформление. Вы переписываете его функции.
    Затем он просит добавить поиск по названиям записей к себе на сайт. Вы делаете. Буквально на следующий день к вам приходит заказчик и тоже просит поиск, но не только по названиями, но и по телу статей и по комментариям. Вы делаете.
    Затем ваш заказчик видит, что дела у него идут в гору и он просит отменить платные комментарии и сделать просто платные аккаунты для всех. Вы переписываете.
    Тем временем друг просит вас сделать все тоже самое, но с его оформлением.
    Дела у заказчика идут в гору и сайт начинает тормозить. Вы делаете кэширование.
    Внезапно сайт заказчика попадает в топ и нагрузка резко увеличиваете настолько, что один сервер уже не справляется. Вы переносите все на самый мощный, но он его тоже мало.
    Нужно делать горизонтальное масштабирование.
    Для этого нужно переписать все функции, которые работают с базой данных. А их уже больше двухсот. И просто замена не подходит.
    Сайт открывается через раз, заказчик звонит вам каждые 2 часа и спрашивает, как там прогресс.
    И тут вам присылает письмо друг заказчика и говорит, что хочет перейти с MySQL на PostgreSQL.
    И вы понимаете, что вам надо будет переписать еще 300 функций, но на другом сайте. Вы его посылаете, поскольку вы и так в мыле.
    Друг жалуется на вас заказчику. Заказчик, не ставя вас в известность, нанимает другого исполнителя, у которого отваливается челюсть от того, что творится в системе. Он объясняет, что ему нужно будет потратить полгода, чтобы вникнуть в то, чтобы понять ваш код, но он может сделать все тоже самое за 4 месяца, причем для заказчика и его друга так, что это будет расширяемо и поддерживаемо не только им.
    Тем временем, спустя двое суток жизни на кофеине вы героически переписываете все функции заказчика и идете отсыпаться. После суток сна вы обнаруживаете на автоответчике сообщение, что вы уволены. А все потому, что забыли проверить функцию логина.

    А теперь разберем эту историю по частям. Почему же вас уволили?

    Незнание абстракций и шаблонов проектирования привело к тому, что вы вынуждены были поддерживать 2 разных проекта с практически одинаковой логикой.
    Например ORM смог вам помочь поддерживать 2 разные базы данных без каких-либо усилий. Сменить одну базу на другую стоило бы исправления конфигурации, а не переписывания 300 функций.
    Использование фреймворков позволило бы сократить время на реализацию подключений платежных систем. Многие из них имеют готовые реализации.
    Опять же в современных фреймворках, например в той же Doctrine реализован шардинг. В большинстве случаев ваши проблемы свелись к изменению настроек.
    Но даже если бы вы накосячили, то интеграционные тесты не позволили бы попасть говну в продакшен. А если бы оно и попало, ну накосячили вы с тестами тоже, то проблема была бы обнаружена на раннем этапе благодаря "сине-зеленому" развертыванию и она бы не затронула всех пользователей.
    И да, ваш код не прошел внешний аудит.

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

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

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Чтобы убрать полностью, нужно закомментировать эту и три следующие строки.

    Можно просто переопределить заголовок:
    $phpMailerInstance->XMailer = 'dzheka3d';
    Ответ написан
    2 комментария