Парсинг HTML страниц с помощью DomCrawler в Laravel 5.6

Парсинг данных из разных источников. Кто и как это делает, и как это делать правильно. Как нужно правильно использовать парсинг в Ларавел вообще и в Laravel 5.6 в частности. В данном конкретном случае я хочу акцентироваться на том, как создавались парсеры для порталов и сервисов, и почему это было наказанием, разгребать эти легаси решения.

Когда я пришел в команду, то никто не хотел разгребать логику и функционал парсеров, которых было десятки на проекте. Все старались держаться от этого подальше. А так как меня взяли на позицию сина, то руководитель проекта в первый же день вывалил мне это на голову. Читать далее Парсинг HTML страниц с помощью DomCrawler в Laravel 5.6

Хитрости при работе с xDebug в PHP

Очень трудно обойтись без отладчика xDebug в PHP при работе с большими проектами и запутанным кодом. Он может сэкономить часы рабочего времени при поиске ошибок и понимании работы кода. Однако, не эффективная работа с отладчиком может превратиться в ад и бессмысленное и беспощадное нажатие клавиш F8 и F9. Читать далее Хитрости при работе с xDebug в PHP

Что не так с функцией http_build_query в PHP

Казалось бы http_build_query — простая функция, однако, имеет некоторые особенности. Нельзя однозначно сказать что это баг, скорее просто недокументированная фича, которую стоит учитывать при разработке.

Допустим, есть массив [‘page’ => 2, ‘hide’ => null]. Что же вернёт http_build_query в результате? Это будет просто page=2, аргумент hide был отброшен, т.к. он имеет значение null! Что будет, если передать массив, где все значения будут null? Функция вернёт строку нулевой длины. Читать далее Что не так с функцией http_build_query в PHP

Установить Composer как системную команду в Linux

Сейчас мало проектов на PHP обходятся без пакетного менеджера Composer. Однако, он не является предустановленным пакетом в операционных системах даже при наличии установленного php.

При попытке запуска composer install может возникнуть ошибка:

-bash: composer: command not found

Исправить это можно одной строчкой:

curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/bin/composer

Эта последовательность команд установит композер и переместит его в директорию системных команд.

Создать новый проект на Laravel 5.6: установка и настройка

Заметка для тех, кто хочет программировать с использование PHP фреймворка Laravel, но не знает с чего начать. Для начала нужно инициализировать Laravel с помощью Composer (который должен быть предварительно установлен).

composer create-project --prefer-dist laravel/laravel project

Вместо project можно указать любую другую директорию. На этом можно было бы остановиться, но давайте рассмотрим несколько лайфхаков облегчающих разработку проекта на Laravel. Важно: для версий Laravel отличных от 5.6 выполняемые команды и настройки могут отличаться! Читать далее Создать новый проект на Laravel 5.6: установка и настройка

Как на PHP работать с Telegram Core API (MTProto)

Эта заметка не про Bot API, а про Core API Telegram, с помощью которого можно создавать полноценные клиенты для месседжера, и конечно же любой другой софт, например для сбора данных из Телеграма. Основная проблема заключается в том, что общение с серверами Telegram осуществляется по специальному протоколу разработанным внутри компании — MTProto. Именно благодаря этому протоколу данный месседжер и славится своей безопасностью и шифрование данных.

Если вас мучают вопросы: как использовать Telegram Api на PHP. Как вызывать функции? Очень много примеров использования telegram api для бота, а как использовать обычное api telegram? Зарегистрировал приложение, получил api_id и api_hash, как получить все сообщения из телеграм-канала? https://core.telegram.org/method/messages.getHistory
Как вызвать этот метод? То эта статья для вас!
Читать далее Как на PHP работать с Telegram Core API (MTProto)

Как поменять местами значения двух переменных в PHP?

Существует красивое и элегантное решение в одну строку:

list($a, $b) = [$b, $a];

Что более читаемо и проще, чем классическое:

$tmp = $a;
$a = $b;
$b = $tmp;

Читать далее Как поменять местами значения двух переменных в PHP?

Как в Laravel создать подключение к БД в runtime

Бывают ситуации, например, когда предопределённых в конфиге Laravel подключений к базам данных не достаточно и возникает потребность создавать подключения динамически во время выполнения PHP скрипта. Например, креденшиналы задаются как параметры консольной команды. Иногда это единственный способ проинтегрироваться с посторонним приложением. Далее рассмотрим один из способов решения подобных задач. Читать далее Как в Laravel создать подключение к БД в runtime

Как по-быстрому увеличить объём выделяемой памяти для консольного PHP скрипта?

Иногда при обработке с помощью PHP больших и не очень данных, можно словить досадную ошибку посреди выполнения скрипта:

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)

Конечно, можно увеличить memory_limit в php.ini или дописать в скрипт:

ini_set('memory_limit','256M');

Читать далее Как по-быстрому увеличить объём выделяемой памяти для консольного PHP скрипта?

Что не так с функцией file_put_contents() в PHP?

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

Синтаксический сахар это хорошо. Судя по описанию, функция file_put_contents() идентична последовательным успешным вызовам функций fopen(), fwrite() и fclose(), что влечёт за собой некоторые особенности, связанные с этими функциями. Сразу скажу, что пробовал воспроизводить это только внутри Docker контейнеров и утилизацией диска близкой к 100%, возможно в другом окружении такое поведение воспроизводиться не будет. Для начала давайте с умным видом  посмотрим исходник PHP 7.1.12. Читать далее Что не так с функцией file_put_contents() в PHP?