Laravel

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

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

Трудовыебудни

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

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

Трудовыебудни

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

Казалось бы http_build_query — простая функция, однако, имеет некоторые особенности. Нельзя однозначно сказать что это баг, скорее просто недокументированная фича, которую стоит учитывать при разработке. Допустим, есть массив ['page' => 2, 'hide' => null]. Что же вернёт http_build_query в результате? Это будет просто page=2, аргумент hide был отброшен, т.к. он имеет значение null! Что будет, если передать массив, где все значения будут null? Функция вернёт строку нулевой длины. (далее…)

Laravel

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

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

composer create-project --prefer-dist laravel/laravel project
Вместо project можно указать любую другую директорию. На этом можно было бы остановиться, но давайте рассмотрим несколько лайфхаков облегчающих разработку проекта на Laravel. Важно: для версий Laravel отличных от 5.6 выполняемые команды и настройки могут отличаться! (далее…)

Laravel

Использование Telegram Core API (MTProto) на PHP

Эта заметка не про 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 Как вызвать этот метод? Как реализовать авторизацию с помощью API Telegram? Тогда эта статья для вас! (далее…)

Трудовыебудни

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

Существует красивое и элегантное решение в одну строку: list($a, $b) = [$b, $a]; А для PHP версий 5.3 и старше можно воспользоваться сокращённым вариантом: [$a, $b] = [$b, $a]; Что более читаемо и проще, чем классическое:

$tmp = $a;
$a = $b;
$b = $tmp;
(далее…)

Laravel

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

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

Трудовыебудни

Как по-быстрому увеличить объём выделяемой памяти для консольного 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');
(далее…)

Трудовыебудни

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

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