PHP задачи с собеседований @phpquiz Channel on Telegram

PHP задачи с собеседований

@phpquiz


Задачи, тесты и теоретические вопросы по PHP.

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny

PHP задачи с собеседований (Russian)

Вы хотите подготовиться к собеседованию на позицию PHP разработчика? Или просто улучшить свои знания в PHP? Тогда канал "PHP задачи с собеседований" (@phpquiz) именно то, что вам нужно! Здесь вы найдете задачи, тесты и теоретические вопросы по PHP, которые помогут вам успешно пройти собеседование и улучшить свои навыки в этой области.

Вы также можете прислать свои собственные задачи или вопросы на обсуждение, обратившись к @cyberJohnny. Не упустите возможность сотрудничества и обмена знаниями, присоединяйтесь к каналу уже сегодня!

PHP задачи с собеседований

07 Nov, 06:01


Приходите на курс “PHP Performance”

Хороший программист не только умеет пилить классные фичи, но и знает, как работает его код в продакшене, а также может разобраться, почему его сервис тормозит. Для этого слово «телеметрия» должно стать не просто словом, а инструментом для поиска и устранения проблем.

На курсе мы на практике изучим нужные инструменты, расскажем, как находить проблемы производительности, и как их исправлять.

🌐 В программе курса:

▪️
Архитектура бекенд-серверов на PHP и её особенности: php-fpm, RoadRunner, использование ресурсов, параметры конфигурации
▪️OpenTelemetry: применение на примере SigNoz
▪️Суб-real-time телеметрия поверх UDP c PINBA и промстэком (Grafana/Prometheus).

🥸 Кто мы: R&D-центр https://devhands.ru, наш канал (https://t.me/rybakalexey). Автор курса — Михаил Курмаев, эксперт по сложным распределённым системам. Долгое время строил платформу в Badoo/Bumble, сейчас в Т-банке развивает дата-платформу.

🗓 Старт курса: 28 ноября, 4 недели обучения.
Изучить программу и записаться можно здесь.

Ждем вас!

Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqwqTS7F

PHP задачи с собеседований

06 Nov, 08:58


Как не терять сообщения в Symfony при отправке через внешний брокер?

Разберёмся на бесплатном открытом уроке «Надёжная отправка и получение сообщений через RabbitMQ в Symfony»

Дата и время: 12 ноября, 20:00 МСК

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

🔥Вебинар проведёт Михаил Каморин, техлид в Skyeng

Урок будет полезен всем PHP-разработчикам, которые хотят повысить свою квалификацию!

После открытого урока можно записаться на курс «Symfony Framework», который доступен в рассрочку

👉🏻
Записаться на событие

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

PHP задачи с собеседований

30 Oct, 11:48


📢Что делать, когда процессы «пытаются» одновременно получить доступ к данным без правильной синхронизации?

Это называется «состоянием гонки». О том, как выйти из такого состояния, мы поговорим на открытом онлайн-уроке «Race condition, и как с ним бороться»

📅 Дата и время: 1 ноября, 20:00 МСК
🔗Записаться на урок: https://clck.ru/3EFUpm

Вы узнаете:
- О типовых сценариях возникновения состояния гонки
- Как и для чего использовать пакет Symfony Lock
- Как восстанавливать работу с БД после исключений

Будет интересно php-разработчикам

💡Встречаемся в преддверии старта курса «Symfony Framework». Все участники вебинара получат специальную цену на обучение!

➡️Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: https://clck.ru/3EFUpm

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

PHP задачи с собеседований

24 Oct, 10:16


⁉️Хотите повысить свою квалификацию в php-разработке?

🐘 Инвестируйте в успех своей карьеры прямо сейчас!
На курсе «PHP Developer. Professional» вы получите:

✔️ Инфраструктура — Docker, виртуальные машины, облака, сетевое взаимодействие, обеспечение безопасности приложения, Composer, управление зависимостями, очереди и построение асинхронного взаимодействия.
✔️ Хранилище — PostgreSQL, MySQL, NoSQL (Clickhouse, ElasticSearch) и взаимодействие PHP с различными типами хранилищ.
✔️ Тестирование — не только unit-тесты, но и покрытие тестами всех слоёв приложения

➡️ Пройдите короткий тест прямо сейчас, чтобы получить специальную цену на обучение: https://clck.ru/3EAB2S

🎁 А еще приятный бонус: до конца октября действует скидка 10% на обучение.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

PHP задачи с собеседований

22 Oct, 13:33


Laravel - ключ к успешной карьере PHP-разработчика!

🦾 Пройди тест по Laravel! 🦾

➡️ Проверь себя и свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Framework Laravel" от OTUS по специальной цене.

👩‍💻 Присоединяйся к новому потоку онлайн-курса «Framework Laravel» в OTUS. В программе курса — удобные и мощные наработки огромного Laravel-сообщества, а практика — решение бизнес-задач.

👨‍💻 За 3 месяца обучения твое портфолио пополнится мини-проектами и выпускной работой.

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

👉 ПРОЙТИ ТЕСТ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

PHP задачи с собеседований

22 Oct, 10:57


Научитесь использовать ключевую особенность Clojure на открытом уроке для опытных разработчиков.

Запускайте программу всего один раз и работайте с ней в реальном времени весь процесс разработки.

Приходите на вебинар «Интерактивная разработка на языке Clojure»! Записаться на событие: https://clck.ru/3E6WHW

Вы узнаете:
- Как добавлять новые функции и изменять состояние программы
- Как «прощупывать» любые данные и пошагово отлаживать код.
- Как запускать тесты и подключаться к внешним системам.

Занятие пройдёт 24 октября в 19:00 МСК и приурочено к старту курса «Clojure Developer». После урока вы сможете продолжить обучение по специальной цене и даже в рассрочку!
Для бесплатного участия и получения записи регистрируйтесь прямо сейчас: https://clck.ru/3E6WHW

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

PHP задачи с собеседований

17 Oct, 08:45


🐘 Что нового в PHP 8.4 и как это повлияет на вашу работу?

Приглашаем на открытый урок

🗓 23 октября в 20:00 МСК

🆓 Бесплатно. Урок в рамках старта курса «PHP Developer. Professional»

На вебинаре разберем:

- какие нововведения появятся в PHP 8.4;
- как эти изменения повлияют на вашу работу;
- какие новые функции и улучшения ждут разработчиков.

Спикер Александр Пряхин — технический руководитель юнита в Авито, ITIL4 Certified.

Все участники вебинара получат специальную цену на обучение!

🔗 Ссылка на регистрацию: https://clck.ru/3Dy64y

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

PHP задачи с собеседований

15 Oct, 13:04


Laravel - ключ к успешной карьере PHP-разработчика!

🦾 Пройди тест по Laravel! 🦾

➡️ Проверь себя и свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Framework Laravel" от OTUS по специальной цене.

👩‍💻 Присоединяйся к новому потоку онлайн-курса «Framework Laravel» в OTUS. В программе курса — удобные и мощные наработки огромного Laravel-сообщества, а практика — решение бизнес-задач.

👨‍💻 За 3 месяца обучения твое портфолио пополнится мини-проектами и выпускной работой.

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

👉 ПРОЙТИ ТЕСТ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

PHP задачи с собеседований

14 Oct, 10:04


🚀 Хотите узнать, как автоматизировать бизнес-процессы в компании без навыков программирования?

Ждем вас на открытом вебинаре 16 октября в 20:00 мск, где мы разберем:

- Какие сущности можно автоматизировать с помощью бизнес-процессов;
- Как использовать роботов для автоматизации CRM-сущностей (лидов, сделок);
- Как расширить возможности автоматизации с помощью разработки.

Встречаемся в преддверии старта курса «Разработчик Битрикс24». Все участники вебинара получат специальную цену на обучение!

🎟 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://clck.ru/3DvGPm

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

PHP задачи с собеседований

14 Oct, 09:27


Каким образом можно автоматизировать HTTP запросы на интернет-ресурс, чтобы они выполнялись круглосуточно?

Задача следующая: есть URL, на который требуется с определенной периодичностью отправлять POST-запросы 24/7. Набросал код на JS и запустил на ноде, все работает. Но свой компьютер постоянно включенным держать не могу. Первая идея - арендовать виртуальный сервер и отправлять запросы с него, но в серверной разработке я полный ноль. Арендованный виртуальный сервер у меня есть, но использую я его только для тестов фронтенда, с серверными скриптами ни разу не работал. Есть ли вообще такая возможность? Подскажите направление куда копать.

PHP задачи с собеседований

11 Oct, 09:26


cms для блога прошу о помощи

здравствуйте у меня такой вопрос я пока нечего не понимаю в программирования решил разработать cms для блога , в краце подскажите пж как создать связь меж этими таблицами я пользуюсь PhpMyAdmin id | login | password | screen_name

#posts id | alias | author_id | date_posted

#posts_content post_id | language_id | title | post_body

#comments id | post_id | author_id | text | date_posted | parent_comment_id

PHP задачи с собеседований

10 Oct, 15:35


👩‍💻 Устали от ограничений RESTful API?
Хотите узнать, как использовать GraphQL в Laravel?


📆 Ждем вас на открытом вебинаре 16 октября в 20:00 мск.

Где мы разберем:

✔️ сравнение RESTful и GraphQL;
✔️ как предоставить API, используя GraphQL;
✔️ как работать с GraphQL на фронтэнде.

Встречаемся в преддверии старта курса «Framework Laravel».
Все участники вебинара получат специальную цену на обучение!

👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://clck.ru/3Dpq26

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

PHP задачи с собеседований

09 Oct, 11:15


Хотите узнать, как превратить массив в пирамиду и ускорить сортировку данных?

Ждем вас на бесплатном вебинаре 14 октября в 20:00 мск, где мы разберем:

- как реализовать алгоритм сортировки выбором с линейной сложностью;
- как превратить массив в пирамиду (кучу) для быстрого доступа к максимальному элементу;
- как создать алгоритм пирамидальной сортировки с квазилинейной сложностью — О(N log N);
- визуальные примеры работы алгоритма на конкретных числах.

🚀 Спикер Евгений Волосатов — программист баз данных и преподаватель с огромным и разнообразным опытом, автор статей и учебных программ по C#, Java, PHP.

Встречаемся в преддверии старта курса «Алгоритмы и структуры данных». Все участники вебинара получат специальную цену на обучение!

Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://clck.ru/3DomCk

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

PHP задачи с собеседований

09 Oct, 09:25


PHP parse/syntax errors; Ошибки Unexpected XXX и как решить их

Часто программисты допускают ошибки. Могут возникать ошибки синтаксиса. Например:

PHP Parse error: syntax error, unexpected '{' in index.php on line 20

Неожиданный символ не всегда является настоящим виновником. Но номер строки дает приблизительное представление о том, с чего начать поиск.

Всегда смотрите на контекст кода. Синтаксическая ошибка часто кроется в упомянутых или в предыдущих строках кода. Сравните свой код с примерами синтаксиса из руководства.

PHP задачи с собеседований

08 Oct, 11:11


🐘 Курс для PHP-разработчиков, которые хотят профессионального роста.

Пройди тест по PHP и проверь свои знания, готов ли ты к обучению на курсе.

Ответишь — пройдешь на продвинутый курс "PHP Developer. Professional" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса

👉 ПРОЙТИ ТЕСТ: https://clck.ru/3DnKGd

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

PHP задачи с собеседований

07 Oct, 09:25


Как установить правильно sqlsrv для php?

0

В общем я пытался установить sqlsrv, с помощью вот этой документации: https://learn.microsoft.com/ru-ru/sql/connect/php/microsoft-php-driver-for-sql-server?view=sql-server-ver16#getting-started, но у меня после вызова phpinfo нет sqlsrv. Что находиться в php(Тип файла INI-DEVELOPMENT):

extension_dir = "C:\php\ext"
extension=php_pdo_sqlsrv_82_ts_x64.dll
extension=php_sqlsrv_82_ts_x64.dll
Моя версия php: PHP Version 8.2.20 Мне это нужно для того, чтобы подключиться ко внешней БД, со своего локального ПК (у меня нет сервера). Но у меня появилась ошибка: Fatal error: Uncaught Error: Call to undefined function sqlsrv_connect() in C:\Users\ivakov.av\Desktop\Php_Projects\sigur.php:15 И мне надо установить корректно sqlsrv, помогите, пожалуйста!

// Подключаемся к MS SQL
$serverName = ""; // Имя сервера MS SQL
$connectionInfo = array(
"Database" => "", // Имя базы данных
"UID" => "", // Имя пользователя
"PWD" => "" // Пароль
);
$conn = sqlsrv_connect($serverName, $connectionInfo);

if ($conn === false) {
echo "Connection failed: " . print_r(sqlsrv_errors(), true);
exit;
}

PHP задачи с собеседований

04 Oct, 09:24


Ошибка в получении данных VK Api

Подскажите почему возникает ошибка "Ошибка при получении данных"? Ничего не отдается хотя id и токен ввожу правильно

<?php
$group_id = '******';
$access_token = '********';
$count = 5; // Количество постов

$url = "https://api.vk.com/method/wall.get?owner_id=-$group_id&count=$count&access_token=$access_token&v=5.131";
$response = file_get_contents($url);
$data = json_decode($response, true);

if (isset($data['response']) && isset($data['response']['items'])) {
$posts = $data['response']['items'];

foreach ($posts as $post) {
// Выводим текст поста
echo $post['text'] . '
';

// Дополнительные действия с постом
// Например, вывод изображений, комментариев и т.д.
}
} else {
echo 'Ошибка при получении данных';
}
?>
php

PHP задачи с собеседований

03 Oct, 08:19


🐘 Разработчики на PHP, устали от «тормозящего» кода и избыточного потребления памяти?

📆 Дата и время: ждем вас на открытом вебинаре 9 октября в 20:00 мск,

Где мы разберем:

➡️ как устроены процессорные кеши и оперативная память;
➡️ внутреннее представление данных в PHP;
➡️ простые и эффективные приёмы для ускорения работы вашего кода.

Спикер Дмитрий Кириллов — соучредитель и технический директор одного из крупнейших сервисов онлайн-регистрации бизнеса в России, имеет высшее педагогическое образование.

Встречаемся в преддверии старта курса «PHP Developer. Professional». Все участники вебинара получат специальную цену на обучение!

👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://clck.ru/3DfXrj

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

PHP задачи с собеседований

02 Oct, 09:23


Bitrix24 вызов попапа посредством события в inti.php

В init.php прописываю событие, которое должно открывать попап после сообщения в открытых линиях, само событие отрабатывает, в лог пишет. Но попап в CRM не открывается. Вот само событие:

AddEventHandler("imopenlines", "OnSessionStart", "OnFirstMessage");
function OnFirstMessage($arFields) {
$chatId = $arFields['CHAT_ID']; // Логируем ID чата в файл для дальнейшей обработки
file_put_contents(__DIR__."/test.txt", $chatId . PHP_EOL, FILE_APPEND);
\Bitrix\Main\Page\Asset::getInstance()->addString('
<div id="openline_confirm"></div>');
\Bitrix\Main\Page\Asset::getInstance()->addString('
<script>
BX.ready(function() {
var Confirmer = new BX.PopupWindow("openline_confirm", null, {
content: "<div></div>" + "<h3>Новое сообщение в открытых линиях</h3>",
closeIcon: {
right: "20px",
top: "20px"
},
width: 350, // ширина окна
height: 150, // высота окна
zIndex: 100, // z-index
draggable: false, // можно двигать или нет
resizable: true, // можно ресайзить
min_height: 250, // минимальная высота окна
min_width: 100, // минимальная ширина окна
overlay: {
backgroundColor: "black",
opacity: "80"
},
buttons: [
new BX.PopupWindowButton({
text: "Принять",
className: "popup-window-button-accept",
events: {
click: function() {
BX.Messenger.Public.openLines();
this.popupWindow.close();
}
}
}),
new BX.PopupWindowButton({
text: "Отклонить",
className: "webform-button-link-cancel",
events: {
click: function() {
this.popupWindow.close();
}
}
})
]
});
Confirmer.show();
});
</script>');
CJSCore::Init(array("Confirmer"));
}
При событии js на стороне клиента не добавляется, как это можно реализовать?

PHP задачи с собеседований

01 Oct, 16:22


👩‍💻 Актуальное повышение квалификации для PHP-разработчиков

Пройди тест по Laravel !

➡️ Проверь себя и свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Framework Laravel" от OTUS по специальной цене.

👨‍💻 За 3 месяца обучения твое портфолио пополнится мини-проектами и выпускной работой.

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

➡️ ПРОЙТИ ТЕСТ: https://clck.ru/3DcR2F

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

PHP задачи с собеседований

30 Sep, 11:22


Разделить список директории на дочерние и родительские

Подскажите правильное направление или пример. Есть список:

$list = ['folder', 'folder2','folder2/items','folder2/items/css','folder2/images'];
Нужно получить многомерный массив с дочерними элементами:

$list = [
["name" => "folder", "path" => "/folder", children: []],
["name" => "folder2", "path" => "/folder2", children:
[
"name" => "items", "path" => "/folder2/items", children:
[
"name" => "css", "path" => "folder2/items/css", children: []
],
"name" => "images", "path" => "/folder2/images", children: [],
]
],
];

PHP задачи с собеседований

30 Sep, 07:18


Highload, системный дизайн, производительность и масштабирование

Приглашаем на курс для прокачки навыков архитектора и проектировщика, которые важны для профессионального роста программиста.

🌐 С курсом «Системный дизайн высоконагруженных проектов» вы:

▪️изучите ключевые фундаментальные паттерны и получите навыки проектирования проектов с миллионной аудиторией (балансировка, масштабирование апп/кешей/субд, высокая доступность и кластерные решения, шардинг, CAP/PACELS, консистентность, саги, транзакционные очереди и многое другое)
▪️поупражняетесь в проектировании и получите обратную связь на реальных задачах: магазин/маркетплейс, такси/доставка, обьявления, соцсети, дейтинг, игры, википедия, мессенжер, CDN, хранилище файлов, онлайн-кинотеатр, счетчики, удаленный мониторинг, интеграционные вебхуки, рассылки и тд.
▪️ научитесь планировать нагрузку и связывать
бизнес-показатели с нефункциональными требованиями к системе
▪️ попрактикуемся в проведении и прохождения секций системного дизайна на интервью

Всё в формате «живых» онлайн-сессий (лекции, брейнштормы, презентации домашних проектов).

🥸 Кто мы: школа Devhands, основатель школы и автор курса Алексей Рыбак, ex-СТО Badoo, с 20-летним опытом высоконагруженных проектов и и управления глобальными технологическими организациями, член программного комитета Highload.

🗓 Старт 22-го октября, изучаем программу, записываемся здесь

Реклама. ИП Рыбак А.А. ИНН 771407709607 erid: 2VtzqvS4wkM

PHP задачи с собеседований

27 Sep, 09:21


laravel pusher не работает почему то отправка

'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com',
'port' => env('PUSHER_PORT', 443),
'scheme' => env('PUSHER_SCHEME', 'https'),
'encrypted' => true,
'useTLS' => env('PUSHER_SCHEME', 'https') === 'https',
],
'client_options' => [
// Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
],
],
Файл конфигурации не трогал просто добавлял в env креды ,на прямую креды работают если использовать

public function sendTestMessage()
{
$options = [
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => true
];
$pusher = new Pusher(
env('PUSHER_APP_KEY'),
env('PUSHER_APP_SECRET'),
env('PUSHER_APP_ID'),
$options
);

$data['message'] = 'hello world';
$pusher->trigger('test-channel', 'my-event', $data);

return response()->json(['message' => 'Event has been sent!']);
}
Отправляю Event после того как создал заказ но сам event не приходит в pusher Debug Console

Использую laravel 11

PHP задачи с собеседований

26 Sep, 12:10


🐘 Тест по PHP

Проверь насколько хорошо ты знаешь PHP, ты начинающий junior или крепкий Middle?

Ответишь — сможешь пройти на продвинутый курс "PHP Developer. Professional" от OTUS по специальной цене + получишь чек-лист "Solid и типичные ошибки на собеседованиях" .

👉 ПРОЙТИ ТЕСТ: https://clck.ru/3DWpFq

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

PHP задачи с собеседований

25 Sep, 09:21


Один источник данных для множества каналов

Всем привет.

Не уверен, что правильно указал название. Сейчас столкнулся с тем, что нужно раздавать данные из одного источника многим. Схема такая

Источник->Раздающий скрипт->Потребители

То есть, я получаю по вебсокету и по curl определенные данны. По вебсокету бегут постоянно, по curl более статичные. Мне нужно, желающим, эти данные отдавать не неся нагрузку на Источник. То есть Источник только предоставляе их одному сайту, а тот сайт уже раздает другим.

Вопрос в том, как правильно организовать раздачу вебсокета, если к Источнику я могу подключить только один канал?

Я с вебсокетом работал только в простом варианте - получить, отправить и т.д.

PHP задачи с собеседований

23 Sep, 09:20


Как устроена реализация в играх кликерах обработка и сохранение кликов в бд?

Каждый клик допустим это +N монет. Отправлять при каждом клике на фронте событие в виде простого запроса на бэк, где инкрементируется значение в бд - очевидное и простое решение, но будет высокая нагрузка на бэк. Поэтому интересно как лучше всего решать задачи подобного плана и какие инструменты использовать.

Я так понимаю для таких задач нужен какой то демон на сервере собирающий события пользователей о кликах в оперативке и после интервально сохранять в БД подсчитав и проверив данные, так как хранить на фронте даже шифруя наверное будет опрометчиво и при желании можно будет обмануть сервер? Какими инструментами лучше решать эту задачу? nginx push stream, socketio nodejs или есть еще варианты?

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

PHP задачи с собеседований

20 Sep, 09:19


Качество кода, архитектуры. Service and Repository pattern. PHP & Laravel

Стремлюсь к очень качественному коду, посоветоваться не с кем. Вычитал очень много про архитектуру и пришел к этому (Пример на PHP Laravel)

Middleware - Прослойка запроса, проверка аутентификации и подобного, если это необходимо

FormRequest - Тут мы делаем валидацию запроса(Если это не GET)

Controller - тут мы принимаем запрос, делаем валидацию, если FormRequest не предусмотрен, отдаем это всё в Service и затем отдаём ответ

Service - Тут вся бизнес логика, обращение к Repository

ServiceInterface - интерфейс для нашего Service, для гибкости кода

Repository - логика обращения к базе данных, модели, все запросы и т д

RepositoryInterface - интерфейс для Repository, так же для гибкости

Затем мы регистрируем наши интерфейсы и их реализацию в ServiceProvider и работаем по такой архитектуре.

Хотел спросить - всё ли верно, не излишне ли, стоит ли добавить какой то шаг или же убрать. Спасибо

PHP задачи с собеседований

18 Sep, 05:47


Авторизация действий над определенными полями на основе ролей и разрешений

Использую пакет spatie-permission, Laravel 11.У юзера есть permission формата entity.action.value, например - order.edit.description(редактировать описание заказа) или order.see.Accepted (видеть заказы со статусом Accepted). У меня появились две идеи как это авторизовать: первая - написать кастомное правило валидации и применить к каждому полю в FormRequset:

public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (!Gate::allows($this->action,[$attribute,auth()->user()])){
$fail('You do not have permission to interact with this field.');
}
}
Gate:

Gate::define('order-edit-field', function (User $user,string $attribute): bool {
return (in_array($attribute,$user->convertPermissionToValue('order.edit')) || $user->isAdmin());
});
Идея в чем - все разрешения обрезаются с помощью convertPermissionToValue() до value , и это value сравнивается с пришедшем с реквеста полем.

Вторая мысль - через политики:

public function update(User $user, Order $order,array $data): bool
{
if ($user->isAdmin()){
return true;
}

$fields = $user->convertPermissionToValue('order.edit');
$statuses = $user->convertPermissionToValue('order.view');
return in_array($order->status,$statuses)
&& array_reduce(array_keys($data),function ($accum, $item ) use ($fields){
return in_array($item,$fields) && $accum;
},true);
}
Сравнивается .value и fields реквеста, если какого то field нет в value - 403. Таким же образом проверяются любые действия над сущностями - permissions обрезаются до value, value сравнивается с полями ,со статусами, и вообще с чем угодно ,над чем нужно будет совершить action.

В чем собственно говоря вопрос: хоть один из этих вариантов - так вообще норм делать ? Сколько бы не гуглил, я не смог найти как именно организовать авторизацию действий над конкретными полями. Есть какие примеры реализации такого, как бы это вы сделали, где разумно было бы делать подобные проверки, хорошая ли вообще идея с convert разрешений, рабочая ли идея с такими составными permission. Буду ооочень благодарен за любую помощь или подсказку, ибо я новичок и даже те два примера выше выдались огромными нервозатратами)

PHP задачи с собеседований

16 Sep, 09:17


Ошибка Call to undefined function mysqli_connect()

Не могу подключить базу данных к сайту. При попытке подключить БД выдаётся такая ошибка:

Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in D:\Проекты\Новая папка\index.php:11 Stack trace: #0 {main} thrown in D:\Проекты\Новая папка\index.php on line 11

У меня OC Windows 11

Вот мой код:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p>Не работает php</p>
<?php
$connection=mysqli_connect('localhost', 'root', '', 'data');
$sql = "SELECT Name FROM tablical";
$massive=mysqli_query($connection, $sql);
$data=mysqli_fetch_assoc($massive);
foreach ($data as $key => $value) {
print_r($value);
}
?>



</body>
</html>