❓Вопрос от пользователя
Выводить поля повторителя где селект имеет value как у выбранного в селекте на странице - ACF Pro WordPress
Мне нужно чтобы я на странице выбрал в селекте пункт и появилось соответствующее содержимое. Сейчас проблема получить value выбранного пункта чтобы сравнить его с тем пунктом, который в репиторе каждого цикла. Сейчас там выводятся данные только последнего цикла. Этот селект один и тот же - что на странице выводится что в админке в репитере - vybor_napravleniya.
Вот это селект на странице выводится:
Этот код выводит данные, которые должны зависеть от выбранного селекта сверху:
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 задачи с собеседований
Автоматически создаются 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 задачи с собеседований
Замена фона темплейта Wordpress
Как поменять этот фон на мои картинки? Где он находиться? Или как его найти? (wordpress - тема astra - шаблон Bestselling Author)
PHP задачи с собеседований
❓Вопрос от пользователя
Необходимо выводить новый текст сообщения после двух одинаковых
Я создаю чат бот на php. У меня есть скрипт вывода сообщений чат бота. Мне необходимо реализовать так, чтобы после двух сообщений чат бота "Я не понимаю вас!" выводилось другое сообщение.Например, "Если вы не можете найти вопрос, напишите нам в телеграмм". Пока только выводиться одно сообщение каждый раз после неудачных попыток.
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 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:
Может пригодится.
PHP задачи с собеседований
Где хранить изображения для сайта
Товарищи, пытаюсь сделать сайт с поиском обоев на php и столкнулся с проблемой: я храню информацию о обоях в json файле, а само изображение в ссылке каждого объекта json, и не могу понять где хранить эти самые изображения, чтобы от туда я мог без проблем получать их url. Помогите советом.
Вот если что пример json:
{
"id": "00001",
"url":"url",
"tags": [
],
"author": "zoch",
"category": [
],
"uploadDate": "",
"resolution": [
],
"numDown": "",
"isFavorite": "none"
},
Может пригодится.
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
Мой проект лежит на гитхабе. Я его скачиваю на другую машину. Выполняю 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
Ругается на $found_item->get_id(), так как она не определена. Как ее получить? Спасибо!
PHP задачи с собеседований
Удаление товара 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'],
]
],
],
];
}
Не работает 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-запроса и потоково читать данные из него. Как это сделать?
Для реализации 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 для оптимизации и ускорения загрузки?
Есть код:
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
не могу найти как обойти канал и просмотреть посты с количеством просмотров.
не могу никак найти информацию как получить посты и количество просмотров через 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
Отправляю 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. Подскажите кто уже делал проеткы таким образом какие действия нужно совершать или где можно найти информацию по данному вопросу.
Решил полностью разделить бэкэнд и фронтенд часть. Бэк и фронт запускаются на разных локальных хостах vue(localhost://5173) а laravel(localhost:127.0.0.1 ). Столкнулся с проблемой того что при входе в учётную запись на стороне фронта не могу осуществить вход. В config(laravel) пытался настроить cors по документации всё равно не могает и прописывал чтобы запросы шли именно с хоста vue.js всё равно выкидывает ошибку 419. Подскажите кто уже делал проеткы таким образом какие действия нужно совершать или где можно найти информацию по данному вопросу.
500 ошибка, отдать html страницу
htaccess
ErrorDocument 500 /500.html
Прописал правило на 500 ошибку, в php коде намеренно сделал ошибку. Но вместо того, чтобы отдать документ 500.html, браузер пишет мол не удалось отобразить ошибку.
Код ответа страницы: 500
Возможно ли когда в синтаксисе php допущена ошибка, отобразить документ?
htaccess
ErrorDocument 500 /500.html
Прописал правило на 500 ошибку, в php коде намеренно сделал ошибку. Но вместо того, чтобы отдать документ 500.html, браузер пишет мол не удалось отобразить ошибку.
Код ответа страницы: 500
Возможно ли когда в синтаксисе php допущена ошибка, отобразить документ?
Bitrix и его файл init.php
сем привет! Подскажите пожалуйста проблема заключается в том что на локальном проекте под битрикс в папке php_interface создал файл init.php и просто хочу вывести текст - только вот выводит текст или что либо в самом конце сайта. Знаю то что все содержимое файла init должно подгружаться в начале сайта. Кто ни будь сталкивался с такой проблемой?
сем привет! Подскажите пожалуйста проблема заключается в том что на локальном проекте под битрикс в папке php_interface создал файл init.php и просто хочу вывести текст - только вот выводит текст или что либо в самом конце сайта. Знаю то что все содержимое файла init должно подгружаться в начале сайта. Кто ни будь сталкивался с такой проблемой?