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

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

Как сделать массовую замену URL ссылок в phpMyAdmin для ocStore?

Подскажите, пожалуйста, какой нужно сделать SQL запрос в phpMyAdmin чтобы сделать массовую замену ссылок для ocStore 3??
PHP задачи с собеседований
Вопрос от пользователя

В шаблонах blade laravel для указания путей используется asset(), есть ли что-то подобное в компонентах vue 3?


Пример

<script src="{{ asset('js/script.js') }}"></script>

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

Как сделать вывод тегов относящихся только к текущей категории, в категории товаров Prestashop 1.6

Подскажите пожалуйста как можно сделать вывод тегов товаров, которые относятся только к текущей категории? В престе по-умолчанию теги выводятся все сразу... есть такой код вставляю в category.tpl:

<div class="producttags"> 

{foreach from=$products item=product name=products}
{foreach from=Tag::getProductTags($product.id_product) key=k item=v}
{foreach from=$v item=value}
{if isset($tags) && !empty($tags) && $tags > 0}
<a href="{$link->getPageLink('search', true, NULL, "tag={$value|urlencode}")}">{$value|escape:html:'UTF-8'}</a>
{else}
{l s='Пока что здесь ничего нет' mod='blocktags_mod'}
{/if}
{/foreach}
{/foreach}
{/foreach}

</div>


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

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

Как правильно разбить строку по определенному символу


Имеется строка вида: 192.168.0.1@User;p@ssword. Мне нужно положить в массив отдельно 192.168.0.1, User и p@ssword, чтобы пользоваться этими данными по отдельности. Дело в том, что, если запись будет в таком виде - 192.168.0.1@User;password, то мне удается получить значения через этот код:

$data = explode("@", "192.168.0.1@User;password");
$data2= explode(";", $data[1]);
В итоге я пользуюсь всеми тремя значениями:

$data[0] (192.168.0.1)
$data2[0] (User)
$data2[1] (password)

Получается, что проблема возникает, когда в строке два символа - @.

Помогите, пожалуйста, разобраться.

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

Как перенести бд sql с помощью скрипта в файле по крону на другой хостинг. Подскажите куда копать?

Как перенести бд c помощью скрипта sql и php, подскажите куда копать, уже долго ищу в гугле, но не нашёл примера или объяснений?

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

Не выводятся ACF поля через Ajax WordPress

Переменная $pvar выводится и меняется при выборе option в списке select - это работает. Но мне ещё нужно вывести значения всех ACF полей что у меня в functions.php - они не выводятся. При выборе в селекте нужно выводить всё из полей.

То что у меня в functions.php:

add_action('wp_ajax_nopriv_ajax_slide','ajax_slide');
add_action('wp_ajax_ajax_slide','ajax_slide');

function ajax_slide(){
$pvar = $_POST['hash'];
echo $pvar;
?>

<?php if( have_rows('dobavit_punkt')): ?>
<?php
$field = get_sub_field_object( 'vybor_napravleniya');
$value = $field['value'];

if($value == $pvar): ?>
<?php while ( have_rows('dobavit_punkt') ) : the_row(); ?>
<div> // тут поля </div>
<?php endwhile; ?>
<?php endif; ?>
<?php endif; ?>
<?php
wp_die();
}

Мой скрипт ajax-script.js:


jQuery(document).ready(function($){

$("select#selectedop").on( "change", function() {
let thisselval = $(this).val();

$.ajax({
type:"POST",
url: my_ajax_name.ajax_url,
data:{
'action':'ajax_slide',
'hash': thisselval
}, success: function (data){ //received content
$(".wr").empty();
$(".wr").append(data);

} });

});
});

Я его локализовал в functions.php:

wp_enqueue_script( 'service-ajax', get_template_directory_uri() . '/app/js/ajax-script.js', array( 'jquery' ), '0.0.2', true );
wp_localize_script( 'service-ajax', 'my_ajax_name', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );




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

Как хранить списки для каждого врача? 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 коде?