PHP задачи с собеседований
3.06K subscribers
467 photos
6 videos
11 files
360 links
Задачи, тесты и теоретические вопросы по PHP.

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

Как хранить списки для каждого врача? PHP

Делаю
API, и встал вопрос о том как хранить специальности и дополнительное образование врача в базе? В HTML это выводится так

<div class="doctor-card__about--row">
<div class="doctor-card__about--title">
Дополнительное образование:
</div>
<div class="doctor-card__about--text">
2020 г. Профессиональная программа "Нейрохирургия", Сертификационный курс по специальности «нейрохирургия», Российская Медицинская Академия Последипломного образования <br>
2017 г. Профессиональная программа "Неотложная нейрохирургия" ФГБОУ ВО МГМСУ им. Ф. И. Евдокимова Минздрава России. <br>
2014 г. Реабилитация пациентов с различными заболеваниями и травмами позвоночника и спинного мозга», Московский НПЦ медицинской реабилитации, восстановительной и спортивной медицины
</div>
</div>
<div class="doctor-card__about--row">
<div class="doctor-card__about--title">
Специализация:
</div>
<div class="doctor-card__about--text">
<ul>
<li>Лечение геморроя метолом латексного лигирования геморроидальных узлов</li>
<li>Удаление хронической анальной трещины</li>
<li>Современные методы консервативной терапии трещин</li>
<li>Удаление тромбов из наружных геморроидальных узлов (тромбоэктопия)</li>
</ul>
</div>
</div>



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

$additional_education = $_POST['additional_education'] ?? '';
$specialties = $_POST['specialties'] ?? '';
$doctor = R::dispense('doctors');
$doctor->photo = $photo; //Фото доктора
$doctor->fio = $fio; //ФИО доктора
$doctor->experience_about = $experience_about; //Какой стаж
$doctor->experience = $experience; //Стаж доктора
$doctor->specialty = $specialty; //Специализация
$doctor->price = $price; //Стоимось первичного приёма
$doctor->education = $education; //Образование
$clinic = R::load('clinics', $clinicId);
if ($clinic->id) {
$doctor->id_clinic = $clinic->id;
} else {
echo json_encode(['status' => 'error', 'message' => 'Клиника не найдена'], JSON_UNESCAPED_UNICODE);
exit;
}
$id = R::store($doctor);
echo json_encode(['status' => 'success', 'message' => 'Доктор успешно добавлен', 'doctor_id' => $id], JSON_UNESCAPED_UNICODE);




PHP задачи с собеседований
Вопрос от пользователя

Выводить поля повторителя где селект имеет value как у выбранного в селекте на странице - ACF Pro WordPress

Мне нужно чтобы я на странице выбрал в селекте пункт и появилось соответствующее содержимое. Сейчас проблема получить value выбранного пункта чтобы сравнить его с тем пунктом, который в репиторе каждого цикла. Сейчас там выводятся данные только последнего цикла. Этот селект один и тот же - что на странице выводится что в админке в репитере - vybor_napravleniya.

Вот это селект на странице выводится:

<?php if( have_rows('dobavit_kartochku') ): ?>

<?php

$select = get_sub_field_object('vybor_napravleniya');

$newvalue = $select['value'];

?>

<select name="selectedop">
<?php foreach( $select['choices'] as $k => $v ): ?>
<option <?php echo ($k === $newvalue) ? 'selected="selected"' : ''; ?>>
<?php echo $v; ?>
</option>
<?php endforeach; ?>
</select>

<?php endif; ?>

Этот код выводит данные, которые должны зависеть от выбранного селекта сверху:

<?php if( have_rows('dobavit_kartochku')): ?>

<div class="objects-slider">

<?php while ( have_rows('dobavit_kartochku') ) : the_row(); ?>
<?php
$field = get_sub_field_object( 'vybor_napravleniya' );
$value = $field['value'];
?>
<div class="slider-item">
<?php if( have_rows('dobavit_izobrazhenie') ): ?>

<?php while ( have_rows( 'dobavit_izobrazhenie') ) : the_row(); ?>
<?php if($value == $k): ?>

// Здесь выводится контент

<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>
<?php endwhile; ?>
</div>
<?php endif; ?>



PHP задачи с собеседований
Вопрос от пользователя

Автоматически создаются 2 гб. core файлы


В корневой папке сайта на постоянно основе стали создаваться core файлы, размером по 2 гб.

При выполнении команды: file core.1234 всплывают 2 типа ошибок в различныйх core файлах.

1 тип ошибки:

ELF 64-bit LSB core file x86-64, version 1 (SYSV), too many program header sections (7986)
при выполнении команды gdb -c core.1234 всплывает ошибка:

GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type ""show copying""
and ""show warranty"" for details.
This GDB was configured as ""x86_64-redhat-linux-gnu"".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
BFD: Warning: /var/www/mywebsite.ru/data/www/mywebsite.ru/core.8648 is truncated: expected core file size >= 2186629120, found: 679276 544.
[New LWP 8648]
[New LWP 8653]
[New LWP 8654]
[New LWP 8656]
[New LWP 8657]
[New LWP 8658]
[New LWP 8659]
[New LWP 8651]
[New LWP 8650]
[New LWP 8652]
[New LWP 8649]
Missing separate debuginfo for the main executable file
Try: yum --enablerepo='*debug*' install /usr/lib/debug/.build-id/da/37b4f7e97055c3dffa80997ec003396f77e0f8
Failed to read a valid object file image from memory.
Core was generated by `node /var/www/mywebsite.ru/data/www/mywebsite.ru/node_modules/.bin/frontity serve -'.
Program terminated with signal 6, Aborted.
#0 0x00007fca16ba5387 in ?? ()
2 тип ошибки:

ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from 'npm start', real uid: 1011, effective uid: 1011, real gid: 1011, effective gid: 1011, execfn: '/var/www/mywebsite.ru/data/.nvm/versions/node/v16.20.2/bin/node', platform: 'x86_64'
при выполнении команды gdb -c core.1234 всплывает ошибка:

GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
[New LWP 15613]
[New LWP 15617]
[New LWP 15616]
[New LWP 15618]
[New LWP 15615]
[New LWP 15614]
[New LWP 15620]
[New LWP 15621]
[New LWP 15623]
[New LWP 15619]
[New LWP 15622]
Missing separate debuginfo for the main executable file
Try: yum --enablerepo='*debug*' install /usr/lib/debug/.build-id/da/37b4f7e97055c3dffa80997ec003396f77e0f8
Core was generated by `npm start '.
Program terminated with signal 6, Aborted.
#0 0x00007f1b53843657 in ?? ()
Конфигурации VPS:

PHP 8.1.17 (alt)
FastCGI (Nginx + PHP-FPM)
Node.js 16.20.0
сайт на WordPress
панель управления ispmanager 6.5
OS CentOS 7
Вопрос: откуда взялась эта проблема и как ее исправить? Желательно средствами ispmanager!


PHP задачи с собеседований
Вопрос от пользователя
Замена фона темплейта Wordpress

Как поменять этот фон на мои картинки? Где он находиться? Или как его найти? (wordpress - тема astra - шаблон Bestselling Author)

PHP задачи с собеседований
Вопрос от пользователя

Необходимо выводить новый текст сообщения после двух одинаковых

Я создаю чат бот на php. У меня есть скрипт вывода сообщений чат бота. Мне необходимо реализовать так, чтобы после двух сообщений чат бота "Я не понимаю вас!" выводилось другое сообщение.Например, "Если вы не можете найти вопрос, напишите нам в телеграмм". Пока только выводиться одно сообщение каждый раз после неудачных попыток.

<?php
require_once 'dbconfig/config.php';

$stmt = $db->quote($_POST['txt']);
$sql="SELECT answer FROM `chatbot_shop` WHERE client_question LIKE $stmt";
$result = $db->prepare($sql);
$result->execute();

if($result->rowCount() > 0){
$row = $result->fetch(PDO::FETCH_ASSOC);
$content = $row['answer'];
}else{
$content = "Я вас не понимаю";
}





$result->closeCursor();

$added_on=date('Y-m-d h:i:s');
$db->prepare("INSERT INTO message(message,type) VALUES('$content','consultant')");


$added_on=date('Y-m-d h:i:s');
$db->prepare("INSERT INTO message(message,type) VALUES('$stmt','client')");

echo $content;
echo " ";
?>


PHP задачи с собеседований
Вопрос от пользователя

PHP FFMPEG - не работает поток RTSP на IOS

World! Этот код выполняет команду для ffmpeg на получение потока с камеры, копирует его и выводит в mp4.


if (isset($_REQUEST["get"])) {
header('Accept-Ranges:bytes');
header('Connection:keep-alive');

if (ffmpeg_getVersion()[0] >= 5) {$timeout_opt = "-timeout {$timeout}";}else {$timeout_opt = "-stimeout {$timeout}";}

$rtsp = $ncrypt->decrypt($_REQUEST["a"]); // Ссылка на основной поток

if (substr($rtsp, 0, 7) !== "rtsp://") die('RTSP URL is invalid!');
$ffmpeg_base = "{$ffmpeg_path} -rtsp_transport {$rtsp_transport} -probesize 32 {$timeout_opt} -i \"{$rtsp}\" -loglevel quiet";

if (isset($_REQUEST["c"])) {
$rtsp_lq = $ncrypt->decrypt($_REQUEST["c"]); // Ссылка на доп поток

if (substr($rtsp_lq, 0, 7) !== "rtsp://") die('RTSP URL (sub/second stream) is invalid!');
$ffmpeg_base_lq = "{$ffmpeg_path} -rtsp_transport {$rtsp_transport} -probesize 32 {$timeout_opt} -i \"{$rtsp_lq}\" -loglevel quiet";
}else {
$ffmpeg_base_lq = $ffmpeg_base;
}

switch ($_REQUEST["get"]) {
case "mp4":
disableBrowserCaching();
header('Content-type: video/mp4');
passthru("{$ffmpeg_base} -t {$duration_limit} -c copy -an -movflags empty_moov+omit_tfhd_offset+frag_keyframe+default_base_moof -f mp4 pipe:");
break;
}

}
Таким образом я подгружаю поток - просто гет запросом элементом

<video id="videobox" controlsList="nodownload nofullscreen " autoplay muted playsinline preload="metadata" poster="player_loading.png">
<source src="?get=mp4&a='.$rtsp_url.'&c='.$rtsp_lq_url.'" type="video/mp4">
<p>Ваш браузер не поддерживает видео в формате MP4.</p>
</video>
Это работает для десктопных браузеров (опера, хром, яндекс), а так же для android устройств, но если открывать это под IOS (тестирую на iphone 14) - ни с одного браузера не проигрывается. До этого пробовал через библиотеку Video.js, и там была ошибка о невозможности воспроизвести поток. Я предполагаю, что дело в команде для ffmpeg, может кто-то сталкивался с подобным?

UPD:

Обнаружил, что при выполнении команды без "-f mp4 pipe:" passthru("{$ffmpeg_base} -t {$duration_limit} -c copy -an -movflags empty_moov+omit_tfhd_offset+frag_keyframe+default_base_moof XXXXXXXX"); если вместо XXXXX выводить out.mp4, после чего открыть файл в браузере на IOS - файл прекрасно воспроизводится, проблема именно при выдаче потока -f mp4 pipe:

PHP задачи с собеседований
Вопрос от пользователя

Где хранить изображения для сайта

Товарищи, пытаюсь сделать сайт с поиском обоев на php и столкнулся с проблемой: я храню информацию о обоях в json файле, а само изображение в ссылке каждого объекта json, и не могу понять где хранить эти самые изображения, чтобы от туда я мог без проблем получать их url. Помогите советом.

Вот если что пример json:

{
"id": "00001",
"url":"url",
"tags": [

],
"author": "zoch",
"category": [

],
"uploadDate": "",
"resolution": [

],
"numDown": "",
"isFavorite": "none"
},

Может пригодится.


PHP задачи с собеседований
Как и какими средствами находить ошибки в PHP коде?
laravel ui auth login перенаправляет на другую страницу после входа и обратно
Мой проект лежит на гитхабе. Я его скачиваю на другую машину. Выполняю composer install, проект дополнен необходимыми файлами, запускаю php artisan serve.

На странице /login после входа (испльзуется стандартный auth/ui) должен перенаправлять на /home, но после перенаправления, судя по Inspect из хрома, он снова возвращается на страницу /login.

Идет login 302, home 302 и возврат на login с 200. В чем может быть дело?
При каждом обновлении страницы обновляется и сессия, может в этом дело. В настройках стоит время сессии 120, сессия использует файловую систему.
Laravel 10.29
Вопрос от пользователя

Удаление товара YITH Wishlist


Возникла проблема в удалении товара из "Избранных" с помощью плагина YITH Wishlist

Файл content-product.php

<?php if(YITH_WCWL()->is_product_in_wishlist($product->get_ID())):?>
<a href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'remove_from_wishlist', $product->get_ID(), $base_url ), 'remove_from_wishlist' ) ); ?>"
class="delete_item <?php echo esc_attr( $link_classes ); ?> card__favorite card__favorite_set"
data-item-id="<?php echo esc_attr( $found_item->get_id() ); ?>"
data-product-id="<?php echo esc_attr( $product_id ); ?>"
data-original-product-id="<?php echo esc_attr( $parent_product_id ); ?>"
data-title="<?php echo esc_attr( apply_filters( 'yith_wcwl_add_to_wishlist_title', $label ) ); ?>"
rel="nofollow">
<svg>
<use xlink:href="#icon-favorite"></use>
</svg>
</a>
<?php else: ?>
<a href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'add_to_wishlist', $product->get_ID(), $base_url ), 'add_to_wishlist' ) ); ?>"
class="<?php echo esc_attr( $link_classes ); ?> card__favorite yith-wcwl-add-button"
data-product-id="<?php echo esc_attr( $product_id ); ?>"
data-product-type="<?php echo esc_attr( $product_type ); ?>"
data-original-product-id="<?php echo esc_attr( $parent_product_id ); ?>"
data-title="<?php echo esc_attr( apply_filters( 'yith_wcwl_add_to_wishlist_title', $label ) ); ?>"
rel="nofollow">
<svg>
<use xlink:href="#icon-favorite"></use>
</svg>
</a>
<?php endif; ?>

Ругается на $found_item->get_id(), так как она не определена. Как ее получить? Спасибо!

PHP задачи с собеседований
Вопрос от пользователя

Не работает AccessControl на самописные роли RBAC в фреймворке YII2

Совсем новичок в yii2, пишу свой первый сайт. Я написал RBAC контроллер, написал нужные роли, правила и разрешения. Возникла проблема на моменте создания поведения для User контроллера: в behaviors() добавил AccessControl и прописал нужные доступы. Однако фильтр не пропускает самописные роли (user, admin). Пожалуйста, подскажите в чём проблема? Спасибо!

Код RBAC контроллера:

class RbacController extends Controller
{
public function actionInit()
{
$authManager = \Yii::$app->authManager;

// Create roles
$guest = $authManager->createRole('guest');
$user = $authManager->createRole('user');
$admin = $authManager->createRole('admin');

// Create simple, based on action{$NAME} permissions
$signin = $authManager->createPermission('/user/signin');
$logout = $authManager->createPermission('/user/logout');
$signUp = $authManager->createPermission('/user/signup');
$index = $authManager->createPermission('/user/index');
$history = $authManager->createPermission('/user/history');
$profile = $authManager->createPermission('/user/profile');
$usersList = $authManager->createPermission('/user/userlist');

// Add permissions in Yii::$app->authManager
$authManager->add($signin);
$authManager->add($logout);
$authManager->add($signUp);
$authManager->add($index);
$authManager->add($history);
$authManager->add($profile);
$authManager->add($usersList);

// Add rule, based on UserExt->group === $user->group
$userGroupRule = new UserGroupRule();
$authManager->add($userGroupRule);

// Add rule "UserGroupRule" in roles
$guest->ruleName = $userGroupRule->name;
$user->ruleName = $userGroupRule->name;
$admin->ruleName = $userGroupRule->name;

// Add roles in Yii::$app->authManager
$authManager->add($guest);
$authManager->add($user);
$authManager->add($admin);

// Add permission-per-role in Yii::$app->authManager
// Guest
$authManager->addChild($guest, $signin);
$authManager->addChild($guest, $signUp);
$authManager->addChild($guest, $index);

// user
$authManager->addChild($user, $profile);
$authManager->addChild($user, $history);
$authManager->addChild($user, $guest);

// Admin
$authManager->addChild($admin, $usersList);
$authManager->addChild($admin, $user);
}
}
Код behaviors() User контроллера

public function behaviors()
{
return [
'access' => [
'class' => AccessControl::class,
'denyCallback' => function() {
if(Yii::$app->user->isGuest)
return $this->redirect('signin');
throw new ForbiddenHttpException('У вас нет доступа к этой странице');
},
'only' => [],
'rules' => [
[
'allow' => true,
'actions' => ['signin', 'signup'],
'roles' => ['?'],
],
[
'allow' => true,
'actions' => ['logout', 'profile', 'history'],
'roles' => ['user'],
],
[
'allow' => true,
'actions' => ['userlist'],
'roles' => ['admin'],
]
],
],
];
}
Добраться до текущего соединения

Для реализации http-метода CONNECT мне надо переслать все дальнейшие данные этого соединения в другой сокет. Хотел прочитать из php://input, но там пусто, поскольку connect-запрос не имеет тела. Мне надо каким-то образом добраться до tcp-сокета текущего http-запроса и потоково читать данные из него. Как это сделать?
Запрос MYSQL из цикла в 1 запрос. Как и стоит ли?

Есть код:

for ($i = 0; $i < count($array_tip); $i++) {
$sql = "SELECT * FROM reestr WHERE tip LIKE '%$array_tip[$i]%' ORDER BY date DESC LIMIT 1";
$res = $conn->query($sql);
$numb_rows = $res->num_rows;
if (!$res) {
echo 'Не удалось подключиться к базе планов!';
} else {
if ($numb_rows == '0') {
$dateValueLast = '0';
} else {
while ($row0 = $res->fetch_assoc()) {
$dateValueLast = $row0('date');
}
}
$lastDateTip[] = $dateValueLast;
}
}

Есть 5 типов (отделов), в цикле запрашивается максимальная дата для каждого. Например, для 1 отдела последней датой окажется 10 августа, для 2 отдела - 13 августа и т.п.

Как сделать этот запрос без цикла? Вложенные запросы не поддерживают LIMIT, поэтому запрос выдаёт все записи (MAX(date) не работает). Есть ли смысл объединить этот запрос в 1 для оптимизации и ускорения загрузки?
PHP Телеграм АПИ Получить посты с количеством просмотров

не могу никак найти информацию как получить посты и количество просмотров через PHP

Сейчас публикую посты с помощью CURL:

function sendTelegram($method, $response)
{
$ch = curl_init('https://api.telegram.org/bot' . TOKEN . '/' . $method);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);

return $res;
}

$resulttg = sendTelegram(
'sendPhoto',
array(
'chat_id' => $telegramchatid,
'caption' => $message,
'photo' => $photofortg,
'parse_mode' => 'HTML',
'reply_markup' => json_encode(array('inline_keyboard' => $keyboardtg))
)
);
тем самым я публикую фото с комментарием методом sendPhoto

не могу найти как обойти канал и просмотреть посты с количеством просмотров.
Ошибка при отправке event через Pusher : local.ERROR: Pusher error: cURL error 7: Failed to connect to localhost port 8080 after 0 ms:


Отправляю event тестовый на фронт

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class MyEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;

public $message;

public function __construct($message)
{
$this->message = $message;
}

public function broadcastOn()
{
return new Channel('my-channel');
}

public function broadcastAs()
{
return 'my-event';
}
}

вот сам event

<?php

namespace App\Http\Controllers;

use App\Events\MyEvent;
use App\Events\TestEvent;
use Illuminate\Http\Request;

class TestEventController extends Controller
{
public function sendTestEvent(Request $request)
{
event(new TestEvent('Привет, это тестовое сообщение!'));
return response()->json(['status' => 'Событие отправлено']);
}
}


контролер

Запускаю потом очереди и в логах дает ошибку

[2024-08-09 15:23:37] local.ERROR: Pusher error: cURL error 7: Failed to connect to localhost port 8080 after 0 ms: Could not connect to server (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://localhost:8080/apps/838075/events?auth_key=cnppbxcgb0mhtfhieve4&auth_timestamp=1723217017&auth_version=1.0&body_md5=d32cd63fe1ba7f01b6756da9017f0f0d&auth_signature=1b2c3647055a9eed651c64b351c728d20a6e3d9b64ca07377dc93a900f85d6d4. {"exception":"[object] (Illuminate\\Broadcasting\\BroadcastException(code: 0): Pusher error: cURL error 7: Failed to connect to localhost port 8080 after 0 ms: Could not connect to server (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://localhost:8080/apps/838075/events?auth_key=cnppbxcgb0mhtfhieve4&auth_timestamp=1723217017&auth_version=1.0&body_md5=d32cd63fe1ba7f01b6756da9017f0f0d&auth_signature=1b2c3647055a9eed651c64b351c728d20a6e3d9b64ca07377dc93a900f85d6d4. at /Users/ruslantasmetov/pulsbackend/pulsebackend/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php:164)
[stacktrace]


Может кто сталкивался , использую laravel 11
Как настроить авторизацию laravel и vue.js при этом они на расположены на разных хостах

Решил полностью разделить бэкэнд и фронтенд часть. Бэк и фронт запускаются на разных локальных хостах vue(localhost://5173) а laravel(localhost:127.0.0.1 ). Столкнулся с проблемой того что при входе в учётную запись на стороне фронта не могу осуществить вход. В config(laravel) пытался настроить cors по документации всё равно не могает и прописывал чтобы запросы шли именно с хоста vue.js всё равно выкидывает ошибку 419. Подскажите кто уже делал проеткы таким образом какие действия нужно совершать или где можно найти информацию по данному вопросу.