Как стать автором
Обновить
65.18

PHP *

Скриптовый язык общего назначения

Сначала показывать
Период
Уровень сложности

Небольшая разминка мозгов (или quine на php)

Время на прочтение1 мин
Количество просмотров3.1K
Встерил тут я на каком-то сайте интересную задачку, а именно:

Написать php-скрипт, который бы выводил собственный код.
Условия:
— Использовать функции чтения файла и потока нельзя.
— Код должен быть выведен от и до, включая символы <?php… ?>
— Код должен быть как можно короче.


Честно говоря, сначала я впал в ступор, но после получаса времени пришел к такому результату
(перенос строки убрать, поставлен чтоб на баннер не наезжало).

<?$a='<?$a="%s";printf(str_replace(chr(34),chr(39),$a),$a);?>';
printf(str_replace(chr(34),chr(39),$a),$a);?>



Но что-то мне подсказывает что сеё далеко не единственное решение. Поэтому просто интересно мнение сообщества — кто-нибудь может предложить еще решения? Включая всевозможные хаки, (halt_compiler разные) и др.

расширение zip, небольшой хинт

Время на прочтение1 мин
Количество просмотров1.5K
В одном из моих проектов широко используется импорт различных данных в формате CSV. Когда-то данных было немного и всех устраивало непосредственно загрузить один-два не слишком больших файла. Со временем данных стало больше, выросли размеры импортируемых файлов и их количество. Решено было загружать файлы в ZIP-архиве: экономим трафик + имеем всего один аплоад вместо несольких.

Для работы с архивом я воспользовался расширением zip. Описывать здесь, что к чему в этом расширении, я здесь не буду, это достаточно подробно описано в документации.

Я расскажу лишь об одной особенности, которая оказалась для меня полезной. При импорте файла, который пользователь загружает в форме, сам по себе ZIP-архив на сервере ни к чему, да и распаковывать его тоже без надобности: потом ведь еще удалять придется. На помощь приходит метод ZipArchive->getStream(). Получаем с его помощью файл-хэндлер и можем спокойно скормить его, допустим, в fgetcsv.

UPD. Наверное, не совсем понятно объяснил. Мне нужны данные из тех CSV-файлов, которые лежат в ЗИПе. И нужны мне эти данные в базе данных, а не в самих ЦСВшках и уж тем более не в архиве. То есть данные из ЦСВшек я импортирую в БД. Поэтому я беру тепленьким временный файл ( $_FILES['userfile']['tmp_name'] ). И прямо не распаковывая его, импортирую все содержащиеся в нем ЦСВшки в БД. После этого PHP сам позаботится о том, чтобы удалить архив, который больше уже не нужен.

UPD. От хабраюзера Adelf: в некоторых случаях (не в моем) следует принимать во внимание факт того, что $_FILES['userfile']['tmp_name'] может быть недоступен из-за open_basedir

Надеюсь, эта информация кому-нибудь окажется полезной.

Контроллеры, основанные на механизмах рефлексии.

Время на прочтение3 мин
Количество просмотров2K
контроллер — это специализированная сущность для управления другими сущностями.
Часто используют функциональные контроллеры, основанные на найменге (naming) примеры всем широко известны, например плагины смарти:
smarty_type_name() как видите из документации, плагин становится доступным если объявлены соответствующие функции.
чиатать далее...

PHP 5.2.4

Время на прочтение1 мин
Количество просмотров1K
В этой версии исправлено большое количество разных ошибок, в т.ч. связанных с безопасностью. Также стоит отметить включение в состав пакета библиотеки PCRE 7.2 и улучшение взаимодействия расширения oci8 с новыми версиями Oracle. Всем, кто использует PHP, рекомендуется обновиться незамедлительно.

Скачать тут: www.php.net/downloads.php#v5

via linux.org.ru

Создание подписи XML документа с использованием Smev-трансформации с помощью php-расширения Crypto Pro

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров558

В один прекрасный день где‑то кто‑то поменял законодательство и нашей курьерской компании стало нужно передавать данные о доставленных ювелирных изделиях в систему ГИИС ДМДК (это государственная система контроля за оборотом драгоценных металлов и камней). Доступ к ГИИС ДМДК предоставляется в виде SOAP сервиса, куда необходимо передавать подписанные запросы, т. е. подписанные XML‑документы. Одним из требований к интеграции было использование КриптоПро для построения защищенного канала передачи данных. Поскольку КриптоПро уже присутствовал в проекте, это сделало очевидным выбор данного продукта и для подписи передаваемых документов.

В этой статье я расскажу о том, как мы реализовали подпись XML‑документов для передачи в ГИИС ДМДК с помощью расширения КриптоПро phpсades, какие подводные камни встретились по пути и как их удалось обойти.

Читать далее

Новый релиз бота технической поддержки: интеграция с ВКонтакте и docker-compose сборка с мониторингом

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров803

Привет, Хабр!

Месяц назад я выложил в открытый доступ проект бота для технической поддержки. За это время он собрал более 100 клонирований и 40+ звёзд на GitHub. В Issues начали появляться предложения по доработкам — большое спасибо всем, кто откликнулся. Это дало мощную мотивацию развивать проект дальше.

GitHub - https://github.com/prog-time/tg-support-bot

В этом посте — кратко о ключевых изменениях последнего релиза.

Читать далее

Работаем с Nats в PHP

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров2.6K

Сегодня затронем такую неожиданную тему как работу с брокером сообщений Nats на PHP. Как оказалось, есть очень мало статей на эту тему, так что попробуем с этим разобраться и реализовать базовую работу с очередью.

Читать далее

Чат GPT в колонке Алиса

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров14K

В последнее время мне приходится активно использовать чат GPT в своей работе, а дома для музыки и управления умным домом я использую колонки Алиса. Алиса очень удобна в использовании и управлении, однако иногда ей не хватает интеллекта и гибкости, присущих последним моделям от OpenAI. Я подключил Yandex GPT Pro с последней версией модели, но это особо не помогло. Поэтому я задумался: можно ли использовать чат GPT на колонке Алиса? Следует отметить, что я не разработчик и хотел реализовать это максимально просто, используя имеющиеся у меня ресурсы.

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

Читать далее

Из легаси в конфетку: история трансформации

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров1.6K

Каждый разработчик рано или поздно сталкивается с легаси-код — тем самым старым, не всегда понятным и, порой, пугающим набором строк, в которых легко заблудиться. Легаси может вызывать смешанные чувства: с одной стороны, это результат чьей-то работы и часть истории компании, с другой — постоянный вызов, требующий не просто поддержки, но и регулярных улучшений. Переделать такой код в "конфетку" — задача не из лёгких, но вполне выполнимая. 

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

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

Читать далее

PHP и Laravel дайджест новостей за сентябрь 2024 года

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров4K

Это дайджест новостей от CutCode. Сергей Пантелеев и Данил Щуцкий с ежемесячным обзором новостей в мире PHP и Laravel.

Читать далее

Решение задачи от Оборот.ру: Создаем прототип сборщика фруктов в саду на PHP

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров3K

Привет, Хабр! Меня зовут Ник, мне 25, и я уже несколько лет работаю в сфере разработки. Недавно я столкнулся с интересной задачей, которую хотел бы обсудить с вами. Я получил её как тестовое задание — компании Оборот.ру, которая специализируется на автоматизации процессов. Задача заключалась в том, чтобы написать прототип сборщика фруктов в саду, реализовав его в парадигме объектно-ориентированного программирования (ООП) на PHP. В этой статье я расскажу, как я подошел к её решению.

Читать далее

Анатомия умного поиска в Joomla 5. Создание плагина

Время на прочтение29 мин
Количество просмотров1.1K

Исторически в ядре Joomla существовало 2 компонента поиска: просто "поиск" и "умный поиск" (smart search). Простой поиск был в составе ещё Joomla 1.x и с тех пор существенно не менялся, а начиная с Joomla 4 был исключен из состава ядра. Начиная с Joomla 2.5 в число штатных был включен компонент Умного поиска (smart search) - com_finder, главным отличием которого от простого поиска стала индексация контента. Как создать плагин для умного поиска Joomla расскажет эта статья.

Читать далее

Ближайшие события

Как создать расширение OpenCart для отправки SMS

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров978

Представим ситуацию. Где-то на просторах нашей страны есть благородный негоциант XXI века. У него много светлых идей, но мало золотых дублонов в электронном кошельке. Наш предприниматель выбрал для себя один из самых популярных бесплатных движков интернет-магазина в России OpenCart. 

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

Наш герой начинает искать информацию о том, как доработать свой интернет-магазин. Мы с вами не можем оставить человека в беде. Поэтому я написал туториал, как создать собственное расширение для OpenCart 4 и реализовать в нём вызов стороннего API. 

Разберу пример отправки SMS через API МТС Exolve, но в принципе материалы статьи с небольшими доработками подойдут для вызова любого другого REST API.

Читать далее

Magento 2: Visual Search модуль (php + Tensorflow)

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров1K

Всем привет! Давайте знакомиться ;) Я Аня, и я php разработчик. Основной стек - Magento. Очень люблю в свободное время писать всякие интересные штуки, и сегодня я хочу поделиться своей наработкой для реализации поиска по изображению в Magento 2. На мой взгляд - это полезная фича, и довольно удобная для пользователей.

Для нетерпеливых, вот прямая ссылка на github

Читать далее

WordPress Interactivity API: Подробное объяснение

Уровень сложностиСредний
Время на прочтение32 мин
Количество просмотров4.2K

WordPress Interactivity - это относительно новый API, который позволяет создавать декларативный фронтенд в WordPress нативно. Декларативный? Да, да, он использует тот же принцип, что React и Vue. Только тут под капотом Preact и собственные директивы. И конечно куда же без SSR, который здесь идет из коробки. Звучит интересно? Давайте разбираться вместе.

Читать далее

Лучшие практики Laravel для разработчиков в 2024 году

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров12K

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

Разбираемся, как помогает Laravel, и называем нужные практики для создания приложений.

Читать далее

Как я решился писать свою текстовую MMORPG игру с открытым миром и фронтом Telegram в 2024 году

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров1.1K

В одно мгновение мир, который мы знали, рухнул, оставив после себя только воспоминания о былой цивилизации. Теперь, в 2050 году, перед выжившими стоит задача не только сохранить себя, но и восстановить утраченное, шаг за шагом возвращаясь к технологическому прогрессу. Как?

Это история одной текстовой игры написанной программистом любителем с довольно сложными механиками и функционалом...

Читать далее

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

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров2.2K

Всем привет! Мы уже много писали про разработку корпоративного портала НЛМК, которым пользуются больше половины сотрудников нашей большой компании. Сейчас хочу рассказать какие существуют дополнительные инструменты оповещения пользователей, которые мы кастомно настроили на портале, чтобы повысить вовлечение: новостная лента, корпоративное телевидение, онлайн-трансляции, Push уведомления и e-mail рассылка.

Читать далее

Анемичная модель предметной области и логика в сервисах

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров12K

Анемичная модель предметной области (Anemic domain model) это такая модель, где сущности содержат только свойства, а бизнес-логика находится в сервисах. Ее противоположность это богатая модель предметной области (Rich domain model), где логика находится в сущностях, а cервиcы рекомендуют писать только в редких случаях.

В этой статье я хочу показать, почему логика в сервисах является более правильным подходом. Мы рассмотрим пример бизнес-требований и их реализацию с Anemic domain model.

Читать далее