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

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

Выполнить код, если оператор if равен заданному числу


У меня есть 2 массив $arr1 $arr2 если рандом дает цифру 1 в цикле выполняется $arr1 если 2 то выполняется $arr2

$arr1 = [
[
'id' => 1,
'name' => 'Name',
'link1' => 'fb.com',
'link2' => 'vk.com',
'link3' => 'ok.ru'
],
[
'id' => 2,
'name' => 'Name',
'link1' => 'fb.com',
'link2' => 'vk.com',
'link3' => 'ok.ru'
]

];

$arr2 = [
[
'id' => 1,
'name' => 'Name',
'link1' => 'fb.com',
'link2' => 'vk.com',
'link3' => 'ok.ru'
],
[
'id' => 2,
'name' => 'Name',
'link1' => 'fb.com',
'link2' => 'vk.com',
'link3' => 'ok.ru'
]

];

shuffle($arr);

shuffle($arr2);

$rand = rand(1,2);

if($rand == 1) {

for($i = 0; $i < 2; $i++) {

echo $arr[$i]['name'].PHP_EOL;
echo $arr[$i]['id'].PHP_EOL;
echo $arr[$i]['link1'].PHP_EOL;
echo $arr[$i]['link2'].PHP_EOL;
#если итерпция 2 выполняется нужно добавлять еще один ключ 'link3' в итерации 2 будет 3 ссылки.
if($i = 2) {
echo $arr[$i]['link3'].PHP_EOL;
}
}
}

if($rand == 2) {

for($i = 0; $i < 2; $i++) {

echo $arr2[$i]['name'].PHP_EOL;
echo $arr2[$i]['id'].PHP_EOL;
echo $arr2[$i]['link1'].PHP_EOL;
echo $arr2[$i]['link2'].PHP_EOL;
#если итерпция 2 выполняется нужно добавлять еще один ключ 'link3' в итерации 2 будет 3 ссылки.
if($i = 2) {
echo $arr2[$i]['link3'].PHP_EOL;
}
}
}


в итерация 1 будет 2 ссылки 'link1' 'link2' в итерация 2 будет 3 ссылки 'link1' 'link2' 'link3'

Я нуб, просто эксприментирую. Спасибо за помощь.

PHP задачи с собеседований
👨🏻‍💻Почему у меня не отображается phpinfo в мною созданной папке (Linux)
Путь папки: /home/user/project/index.php В index.php:

<?php
phpinfo();


Права у папки: rwxr-xr-x Права у файла: -rw-r--r--

Указываю путь в /etc/apache2/sites-enabled/

ls => 000-default.conf


Путь: /home/user/project

Добавляю папку в конфиг apache2.conf
ps.Естественно я не забываю делать service apache2 restart после проделанных действий, и я получаю Forbiden 403.


PHP задачи с собеседований
Нужно сделать обновление данных на странице, которые подтягиваются с сокета и что бы обновление данных было раз в 1с

А еще лучше что бы раз в 20мс Использую Laravel в этом деле Код сокета.

public function index()
{
error_reporting(E_ALL ^ E_WARNING);
set_time_limit(0);
ob_implicit_flush();
date_default_timezone_set('Asia/Krasnoyarsk');



$address = '....';
$port = ....;

try {

echo 'Создание сокета ... ';
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
} else {
echo "выполнено.\n";
}


echo 'Соединение с сокетом ... ';
$result = socket_connect($socket, $address, $port);
if ($result === false) {
throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n");
} else {
$connect = "Установлено";
}

echo 'Отправка данных: ';
$byteOut = socket_send($socket, chr(15), 1, 0);
if ($byteOut === false) {
echo " Ошибка.";
throw new Exception('socket_send() failed: '.socket_strerror(socket_last_error())."\n");
} else {
echo "отправлено ".$byteOut." байт.\n";
}

echo 'Приём данных: ';

$byte = socket_recv($socket, $in, 898, 0);
if ($byte === false) {
echo " Ошибка.";
throw new Exception('socket_recv() failed: '.socket_strerror(socket_last_error())."\n");
} else {

//переменные которые вытаскиваются с сокета
$id1 = unpack("S*", substr($in, 0, 34));
$id42 = unpack("S*", substr($in, 226, 2));
$id45 = unpack("S*", substr($in, 244, 2));
$id48 = unpack("S*", substr($in, 262, 2));
$id51 = unpack("S*", substr($in, 280, 6));
$id57 = unpack("S*", substr($in, 310, 8));
$id65 = unpack("S*", substr($in, 350, 8));
$id74 = unpack("S*", substr($in, 398, 10));

}
catch (Exception $e) {
echo "\nError: ".$e->getMessage();
}
if (isset($socket)) {
echo 'Close socket ... ';
socket_close($socket);
echo "OK\n";
}
}
}


html

<p class="m-1 quantity-details" >
<span>{{ $id42[1] }}</span>
</p>



PHP задачи с собеседований
👨🏻‍💻 Отобразить содержимое страницы по ссылке WordPress

Вот код

<?
$activeCity = do_shortcode( '[city]' ); // этот результат выдает плагин BelingoGeo
if($activeCity == "Москва") {
$link = get_field('main_p_moskow','options');
}
if($activeCity == "Санкт Петербург") {
$link = get_field('main_p_saint_p','options');
}
if($activeCity == "Иркутск") {
$link = get_field('main_p_irk','options');
}
?>


Зная ссылку на страницу определенного города мне нужно вывести ее содержимое. Как это можно сделать средствами WordPress?

PHP задачи с собеседований
👨🏻‍💻 Необходимо аждую секунду проверять, существует ли уже пользователь с таким логином

Есть страница регистрации. На ней должен работать программа, который каждую секунду берёт из формы данные, и обычным sql проверяет, существует ли уже юзер с такими же.

Как узнавать данные из формы?
Как делать это каждую секунду?
А может быть, лучше сделать js скрипт, который каждую секунду добавляет iframe с check.php?login=nnn?

PHP задачи с собеседований
Проверить если таблица существует mySQL PHP

Вот код PHP

<?
$path = $_SERVER['DOCUMENT_ROOT'];
include_once $path . '/wp-config.php';
include_once $path . '/wp-load.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';
global $wpdb;
$serv = $wpdb->dbhost;
$user = $wpdb->dbuser;
$pass = $wpdb->dbpassword;
$name = $wpdb->dbname;
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli($serv, $user, $pass, $name);
$val = mysql_query("SHOW TABLES LIKE `linkName`");
if($val !== FALSE)
{
$sql = "SELECT link FROM linkName";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<div id='linkTitle'>".$row["link"]."</div>";
}
}
}
$mysqli->close();
?>
Не работает эта строка


if($val !== FALSE)


Даже контент страницы не загружается после этого кода php. Нужно проверить если таблица linkName существует то выполнить следующий код

"SELECT link FROM linkName"


Где тут ошибка?

PHP задачи с собеседований
👨🏻‍💻 Не могу подключиться к базам данных


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

файлы: index.php:

<!DOCTYPE html>
<html xml:lang="ru" lang="ru">
<head>

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width-device-width? initial- scale-1.0">

<title>CSS</title>

<link rel="stylesheet" href="css/style.css" />
</head>

<body>

<header>
<section>
<form action="/php/register.php" method="post">
<label for="login">Логин</label><br>
<input type="txt" name="login" id="login"><br><br>
<label for="password">Пароль</label><br>
<input type="txt" name="password" id="password"><br><br>
<label for="email">E-mail</label><br>
<input type="txt" name="email" id="email"><br><br>
<button class="button-a">Зарегистрироваться</button>
</form>
</section>
</div>
</header>
</body>
</html>


register.php:

<?php

| require_once('db.php');
$login = $_POST['login'];
$password = $_POST['password'];
$email = $_POST['email'];

?>

db.php:

<?php

$servername = "localhost";
$username = "root";
$password = "";
$bdname = "users";

$conn = mysqli_connect($servername, $username, $password, $bdname);

if (!$conn){
due("Сonnection file". myesquel_connect_error());
} elso {
echo "Успех";
}
?>

может быть что то необходимо подключить, потому что делаю с 0.

PHP задачи с собеседований
Как внутри <?if (!isset($_COOKIE[сюда])){?> вставить php echo

Подскажите, как внутри <?if (!isset($_COOKIE[сюда надо вставить])){?> вставить вот такой код: <?php echo $this->href_to('karma_vote', $profile['id']); ?> Такая конструкция нужна для того, чтобы в $_COOKIE[] на каждой странце был уникальный код, который в другом месте этой страницы выводится с помощью <?php echo $this->href_to('karma_vote', $profile['id']); ?>. Если вставлять как есть - страница не открывается, ошибка 500. Наверное, решение на уровне азов PHP, но я как раз решил постигать их опытным путем и пока не могу сам найти рабочий способ.

PHP задачи с собеседований
Как можно редактировать или удалять сообщения без указания их id на странице?

Есть чат на чистом PHP и Js. У каждого сообщения в атрибутах указан id сообщения из бд. По нему я редактирую или удаляю сообщения. На сервер отправляется id сообщения. На сервере убеждаюсь, что это владелец сообщения, и что-то с ним делаю. Как можно это сделать без указания id сообщения на странице?

PHP задачи с собеседований
Не могу сделать два запроса одновременно в MySQL через php

Вот код

if(isset($_POST['name'])) {
$nameLink = $_POST['name'];
}
$path = $_SERVER['DOCUMENT_ROOT'];
include_once $path . '/wp-config.php';
include_once $path . '/wp-load.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';
global $wpdb;
$serv = $wpdb->dbhost;
$user = $wpdb->dbuser;
$pass = $wpdb->dbpassword;
$name = $wpdb->dbname;
$conn = new mysqli($serv, $user, $pass, $name);
$sql = "CREATE TABLE linkName (link VARCHAR(30) NOT NULL)";
$sql .= "INSERT INTO linkName (link) VALUES (".$nameLink.")";
mysqli_close($conn);

Наверное не срабатывает эта строка

$sql .= "INSERT INTO linkName (link) VALUES (".$nameLink.")";

Не могу создать таблицу linkName и вторым действием записать значение $nameLink. Что тут не так?
PHP задачи с собеседований
Не работает библиотека phpWord

Нужно конвертировать файлы на php из формата docx в формат txt. Решил воспользоваться библиотекой phpWord. Написал я следующий код для конвертации:

<?php
require 'vendor/autoload.php';


use PhpOffice\PhpWord\IOFactory;

$inputFile = $_FILES['filename']['tmp_name'];
$outputFile = 'D:\localhost\txt\meow.txt';
function convertDocxToTxt($docxFilePath, $txtFilePath) {
$phpWord = IOFactory::load($docxFilePath);
$txtContent = $phpWord->getFullText();
file_put_contents($txtFilePath, $txtContent);
}

if(move_uploaded_file($_FILES['filename']['tmp_name'], 'uploads/'.$_FILES['filename']['name'])){
echo "Файл скопирован на сервер";
echo "<br>";
echo "<br>";
echo $_FILES['filename']['tmp_name'];
convertDocxToTxt($inputFile, $outputFile);
echo "конвертация завершена";
} else {
echo "Повторите загрузку файла на сервер";
}
?>


Как я подозреваю проблема с самой библиотекой потому что после использования скрипт выдает следующую ошибку:

Fatal error: Uncaught Exception: Cannot find archive file. in D:\localhost\vendor\phpoffice\phpword\src\PhpWord\Shared\XMLReader.php:60 Stack trace: #0 D:\localhost\vendor\phpoffice\phpword\src\PhpWord\Reader\Word2007.php(150): PhpOffice\PhpWord\Shared\XMLReader->getDomFromZip('D:\\localhost\\up...', '_rels/.rels') #1 D:\localhost\vendor\phpoffice\phpword\src\PhpWord\Reader\Word2007.php(114): PhpOffice\PhpWord\Reader\Word2007->getRels('D:\\localhost\\up...', '_rels/.rels') #2 D:\localhost\vendor\phpoffice\phpword\src\PhpWord\Reader\Word2007.php(44): PhpOffice\PhpWord\Reader\Word2007->readRelationships('D:\\localhost\\up...') #3 D:\localhost\vendor\phpoffice\phpword\src\PhpWord\IOFactory.php(89): PhpOffice\PhpWord\Reader\Word2007->load('D:\\localhost\\up...') #4 D:\localhost\file2.php(10): PhpOffice\PhpWord\IOFactory::load('D:\\localhost\\up...') #5 D:\localhost\file2.php(20): convertDocxToTxt('D:\\localhost\\up...', 'D:\\localhost\\tx...') #6 {main} thrown in D:\localhost\vendor\phpoffice\phpword\src\PhpWord\Shared\XMLReader.php on line 60


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

PHP задачи с собеседований
Как подключиться из websocket к базе данных?

у меня есть код для работы с websocket, я пытаюсь записать сообщение пользователя в базу данных, но, когда пытаюсь подключиться к базе данных ($this->connectDB = new DB();), выдает ошибку подключения к websocket, сам websocket я запускаю, как параллельные процесс:

<?php

ini_set('display_errors', 1);

exec("php chat-server.php param=value > /dev/null 2>/dev/null &");

require_once 'app/Bootstrap.php';

?>

Код создания объекта подключение к БД:

<?php

namespace App\core;

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use App\data\DB;

class Chat implements MessageComponentInterface
{
protected $clients;
public $connectDB;

public function __construct() {

$this->clients = new \SplObjectStorage;
$this->connectDB = new DB();

}

код подключения к БД:

<?php

namespace App\data;

use RedBeanPHP\R;
use RedBeanPHP\RedException;

try{
R::setup('sqlite:' . DATA . 'db.sqlite');
if(!R::testConnection()) {
throw new RedException('No connection');
}
}

catch(RedException $e){
exit(var_dump($e));
}


class DB {

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

PHP задачи с собеседований
Не могу обновить DateTime в MySQL с помощью PHP

При попытке обновить поле с форматом DateTime пишет:

Fatal error: Uncaught Error: Object of class DateTime could not be converted to string in /var/www/MiniCRM/app/models/todo/tasks/ToDoTasksModel.php:137 Stack trace: #0 /var/www/MiniCRM/app/models/todo/tasks/ToDoTasksModel.php(137): PDOStatement->execute() #1 /var/www/MiniCRM/app/controllers/todo/tasks/ToDoTasksController.php(80): app\models\todo\tasks\ToDoTasksModel->edit() #2 [internal function]: app\controllers\todo\tasks\ToDoTasksController->editReg() #3 /var/www/MiniCRM/app/Router.php(59): call_user_func_array() #4 /var/www/MiniCRM/index.php(29): app\Router->run() #5 {main} thrown in /var/www/MiniCRM/app/models/todo/tasks/ToDoTasksModel.php on line 137


А вот какое значение я пытаюсь передать:

2024-01-12T16:41

Вот код:

$finish_date_value = $data['finish_date'];
$reminded_at_option = $data['reminded_at'];
$finish_date = new \DateTime($finish_date_value);

switch ($reminded_at_option) {
case '30_minutes':
$interval = new \DateInterval('PT30M');
break;
case '1_hour':
$interval = new \DateInterval('PT1H');
break;
case '2_hours':
$interval = new \DateInterval('PT2H');
break;
case '12_hours':
$interval = new \DateInterval('PT12H');
break;
case '24_hours':
$interval = new \DateInterval('P1D');
break;
case '7_days':
$interval = new \DateInterval('P7D');
break;
}

$prereminded_at = $finish_date->sub($interval);
$data['reminded_at'] = $prereminded_at->format('Y-m-d\TH:i');

$reminded_at = $data['reminded_at'];

$st = $this->db->prepare("UPDATE `todo_tasks` SET title = ?, description = ?, category = ?, status = ?, priority = ?, finish_date = ?, reminded_at = ? WHERE id = ?");
$st->execute([$title, $description, $category, $status, $priority, $finish_date, $reminded_at, $id]);



PHP задачи с собеседований
Как вывести данные из MySQL при помощи PHP?

Есть таблица news, в ней 5 полей id, text, title, author, date. Необходимо вывести на странице эти данные. У меня никак не получается это сделать: все время какие-либо ошибки. Пробовал использовать функцию mysql_fetch_assoc, но что-то, как ее применять, я не очень понял постоянно - одна и та же ошибка expects parameter 1 to be resource, boolean. Я, конечно, понимаю, что это значит, но вот как исправить - нет...

$news = mysql_query("SELECT * FROM `news` ");
while ($row = mysql_fetch_assoc($news, MYSQL_ASSOC)) {
foreach ($row as $col_value) {
print "\t\t<td>$col_value</td>\n";
}
}


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