Не работает библиотека phpWord
Нужно конвертировать файлы на php из формата docx в формат txt. Решил воспользоваться библиотекой phpWord. Написал я следующий код для конвертации:
Как я подозреваю проблема с самой библиотекой потому что после использования скрипт выдает следующую ошибку:
Не имею честно говоря и малейшего понимания как решить эту проблему, уже долгое время.
PHP задачи с собеседований
Нужно конвертировать файлы на 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 задачи с собеседований
у меня есть код для работы с 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 пишет:
А вот какое значение я пытаюсь передать:
2024-01-12T16:41
Вот код:
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. Я, конечно, понимаю, что это значит, но вот как исправить - нет...
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 задачи с собеседований
Передача переменных в подключаемый файл
Доброго всем времени суток господа
Собственно не могу передать get переменную в подключаемый файл. Айфреймы в моем случае не катят. В гугле пишут, что 'должно работать'. Но в реальности ошибка
короче как бы он пытается найти не файл с переменной, а файл с таким адресом
Подскажите, как прописать GET параметры в подключаемый файл.
PHP задачи с собеседований
Доброго всем времени суток господа
include('./block.php'); // работает
include('./block.php?alfa=1&beta=2'); // не работает
Собственно не могу передать get переменную в подключаемый файл. Айфреймы в моем случае не катят. В гугле пишут, что 'должно работать'. Но в реальности ошибка
warning: include(./block.php?alfa=1&beta=2)
failed to open stream
короче как бы он пытается найти не файл с переменной, а файл с таким адресом
Подскажите, как прописать GET параметры в подключаемый файл.
PHP задачи с собеседований
Не поворачиваются картинки на мобильном устройстве с использованием php
Есть сайт с картинками, которые подгружаются из базы данных и отображаются на сайте в ряд. Необходимо реализовать функционал поворота данных картинок. Реализовал поворот при помощи данного кода:
Проблема в том, что на компьютере данный код отлично отрабатывает и картинки поворачиваются без проблем, а вот на мобильном устройстве картинки вообще не поворачиваются. Подскажите в чём может быть причина?
PHP задачи с собеседований
Есть сайт с картинками, которые подгружаются из базы данных и отображаются на сайте в ряд. Необходимо реализовать функционал поворота данных картинок. Реализовал поворот при помощи данного кода:
$image = imagecreatefromjpeg($path);
$rotate = imagerotate($image, $degree, 0);
imagejpeg($rotate, $path);
imagedestroy($image);
Проблема в том, что на компьютере данный код отлично отрабатывает и картинки поворачиваются без проблем, а вот на мобильном устройстве картинки вообще не поворачиваются. Подскажите в чём может быть причина?
PHP задачи с собеседований
xdebug не может соединиться с VSCode
Нужно настроить коннект xdebug с VScode. В xdebug конфиги такие (он не в docker):
в VSCode в launch.json
В логах ошибка - что не удалось соединится с клиентом, не могу понять почему, если они на одном хосте, что клиент что xdebug!
ERR: Could not connect to debugging client. Tried: 127.0.0.1:9000 (fallback through xdebug.client_host/xdebug.client_port).
PHP задачи с собеседований
Нужно настроить коннект xdebug с VScode. В xdebug конфиги такие (он не в docker):
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.start_with_request = yes
xdebug.discover_client_host = true
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9000
xdebug.idekey = vsc
xdebug.mode = debug
xdebug.trace_output_name = trace.%s.%u
xdebug.profiler_output_name = cachegrind.out.%R.%u
xdebug.output_dir = /tmp
xdebug.log = /var/log/xdebug.log
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
xdebug.output_dir = /var/www/.xdebug
xdebug.cli_color=1
в VSCode в launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "remote XDebug",
"type": "php",
"request": "launch",
"hostname": "127.0.0.1",
"port": 9000,
"pathMappings": {
"/var/www/crm.itscript.local": "${workspaceRoot}"
}
},
]
}
В логах ошибка - что не удалось соединится с клиентом, не могу понять почему, если они на одном хосте, что клиент что xdebug!
ERR: Could not connect to debugging client. Tried: 127.0.0.1:9000 (fallback through xdebug.client_host/xdebug.client_port).
PHP задачи с собеседований
Php спит перед загрузкой сайта
У меня есть код, вот его кусок:
И дело в том, что сайт загружается как раз 10 секунд, и к тому времени файл уже удаляется, как сделать так, чтобы sleep работал вовремя, а не перед загрузкой сайта? Заранее спасибо.
PHP задачи с собеседований
У меня есть код, вот его кусок:
echo "файл загружен успешно: $filename";
sleep(10);
unlink($filename);
И дело в том, что сайт загружается как раз 10 секунд, и к тому времени файл уже удаляется, как сделать так, чтобы sleep работал вовремя, а не перед загрузкой сайта? Заранее спасибо.
PHP задачи с собеседований
❓Вопрос от пользователя
Как изменить url для сброса пароля на laravel
При использовании базовой нотификации отправляется письмо для сброса со следующей ссылкой:
При использовании же кастомной нотификации, которую я создаю в папке app\Notifications, url преобразуется уже в динамический вид:
Вот как сделать так, чтобы при использовании моей нотификации, url был таким же,как и при использовании базовой нотификации.
Код ResetPassword (сама нотификация):
PHP задачи с собеседований
Как изменить url для сброса пароля на laravel
При использовании базовой нотификации отправляется письмо для сброса со следующей ссылкой:
http://127.0.0.1:8000/password/change?token=236359ccf050d6616c4e0405c29df7e9eeee11228e61899836afa5a2db347b876c92&email=admin%40gmail.com
При использовании же кастомной нотификации, которую я создаю в папке app\Notifications, url преобразуется уже в динамический вид:
http://127.0.0.1:8000/password/change/f9f100222f214f2a65fbb1ba46b516bfcc5ee2egca56111917d922cdc5758312.
Вот как сделать так, чтобы при использовании моей нотификации, url был таким же,как и при использовании базовой нотификации.
Код ResetPassword (сама нотификация):
<?php
namespace App\Notifications;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class ResetPassword extends Notification
{
public $token;
public function __construct($token)
{
$this->token = $token;
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Сброс пароля')
->line('Вы получили это электронное письмо, потому что мы получили запрос на сброс пароля для вашей учетной записи.')
->action('Сбросить пароль', url('password/change', $this->token))
->line('Если вы не запрашивали сброс пароля, то, пожалуйста, проигнорируйте данное сообщение.')
->salutation('С уважением, Laravel');
}
}
PHP задачи с собеседований
❓Вопрос от пользователя
Всем привет, я новичок в докере и в laravel, хотел протестировать laravel octane, через sail,
у самого window использовал wsl2 ubuntu, создал проект установил sail, запустил докер контейнеры, позже установил laravel octane, но при запуске сервера каждый раз пишет "Server is already running" - при том что сам не запускал, переход на 127.0.0.0:8000 не даёт результатов, можете подсказать в чем дело?
пробывал и перезапускать docker, и пересоздавать проект, и ставить по многу раз octane.
PHP задачи с собеседований
Ошибка запуска laravel octane через sailВсем привет, я новичок в докере и в laravel, хотел протестировать laravel octane, через sail,
у самого window использовал wsl2 ubuntu, создал проект установил sail, запустил докер контейнеры, позже установил laravel octane, но при запуске сервера каждый раз пишет "Server is already running" - при том что сам не запускал, переход на 127.0.0.0:8000 не даёт результатов, можете подсказать в чем дело?
пробывал и перезапускать docker, и пересоздавать проект, и ставить по многу раз octane.
PHP задачи с собеседований
❓Вопрос от пользователя
Не запускается geckodriver во время выполнения cron на Bitrix
Написал модуль для Bitrix с использованием Selenium и geckodriver в частности. Использую php-библиотеку php-webdriver.
При установке модуля в систему создается агент. Агенты выполняются по крону (при переводе агентов на крон делал все по инструкции с курсов разработчика Битрикса).
После установки модуля обнаружил что мой агент не выполняется. Начал копать и пришел к тому, что при попытке запустить процесс geckodriver выдается исключение
File is not executable. Make sure the path is correct or use environment variable to specify location of the executable. ("geckodriver").
Что делать в этом случае? Сам geckodriver в системе установлен. Права на него установил 777, владельцем поставил пользователя bitrix.
До этого агенты запускались на хитах и этот агент отлично запускал geckodriver.
Также проверял вызов функции, которая вызывается в агенте. Вызывал ее через консоль и через браузер (открывал страницу). В первом и во втором случае все работает хорошо.
В чем может быть причина такого поведения, и как это исправить?
PHP задачи с собеседований
Не запускается geckodriver во время выполнения cron на Bitrix
Написал модуль для Bitrix с использованием Selenium и geckodriver в частности. Использую php-библиотеку php-webdriver.
При установке модуля в систему создается агент. Агенты выполняются по крону (при переводе агентов на крон делал все по инструкции с курсов разработчика Битрикса).
После установки модуля обнаружил что мой агент не выполняется. Начал копать и пришел к тому, что при попытке запустить процесс geckodriver выдается исключение
File is not executable. Make sure the path is correct or use environment variable to specify location of the executable. ("geckodriver").
Что делать в этом случае? Сам geckodriver в системе установлен. Права на него установил 777, владельцем поставил пользователя bitrix.
До этого агенты запускались на хитах и этот агент отлично запускал geckodriver.
Также проверял вызов функции, которая вызывается в агенте. Вызывал ее через консоль и через браузер (открывал страницу). В первом и во втором случае все работает хорошо.
В чем может быть причина такого поведения, и как это исправить?
PHP задачи с собеседований
❓Вопрос от пользователя
Как отфильтровать правильно данные в Laravel?
Хочу отфильтровать данные так:
чтобы фильтровалось сначала по source , а потом уже по search
То есть, как и last_name (Киселев) так и first_name (Олег) так и вместе.
Попытки к этому есть: Но этот запрос не работает так как надо, находит только по first_name, а last_name не учитывается
orWhereLikeFilter и whereFilter - это обычный where с like. Написан Trait.
PHP задачи с собеседований
Как отфильтровать правильно данные в Laravel?
Хочу отфильтровать данные так:
{{base_url}}/models?source=0&search=Олег Киселев
чтобы фильтровалось сначала по source , а потом уже по search
То есть, как и last_name (Киселев) так и first_name (Олег) так и вместе.
Попытки к этому есть: Но этот запрос не работает так как надо, находит только по first_name, а last_name не учитывается
public function index(Request $request): AnonymousResourceCollection
{
return IndexResource::collection(
Model::query()
->whereSource(SourceEnum::LARAVEL)
->whereFilter('source', $request->get('source'))
->orwhereLikeFilter('first_name', $request->get('search'))
->orwhereLikeFilter('last_name', $request->get('search'))
->paginate(25)
);
}
orWhereLikeFilter и whereFilter - это обычный where с like. Написан Trait.
PHP задачи с собеседований
❓Вопрос от пользователя
sqlsrv выдаёт ошибку 102
у меня есть бд в которую нужно вносить данные введённые пользователем из формы. К бд я подключаюсь, а данные не вставляются. Вот код php:
Сама проблема я думаю в запросе, но не понимаю где именно.
PHP задачи с собеседований
sqlsrv выдаёт ошибку 102
у меня есть бд в которую нужно вносить данные введённые пользователем из формы. К бд я подключаюсь, а данные не вставляются. Вот код php:
<?php
require_once('connect.php');
$startDay = $_POST['startDay'];
$endDay = $_POST['endDay'];
$targetType = $_POST['taget-type'];
$divisionType = $_POST['division-type'];
$fio = $_POST['fio'];
$firstName = $_POST['firstName'];;
$secondName = $_POST['secondName'];
$thirdName = $_POST['thirdName'];
$phoneNumber = $_POST['phoneNumber'];
$email = $_POST['email'];
$organization = $_POST['organization'];
$comment = $_POST['comment'];
$birthday = $_POST['birthday'];
$seriaPassport = $_POST['seriaPassport'];
$numberPassport = $_POST['numberPassport'];
$photo = $_POST['uploadImage'];
$uploadDocument = $_POST['uploadDocument'];
//print_r($_POST);
$sqlInsert = "INSERT INTO SoloVisitTable (stardDay, endDay, targetType, divisionType, fio, secondName, firstName, thirdName, phoneNumber, email, organization, comment, birthday, seriaPassport, numberPassport, photo, uploadDocument) VALUES ($startDay, $endDay, $targetType, $divisionType, $fio, $firstName, $secondName, $thirdName, $phoneNumber, $email, $organization, $comment, $birthday, $seriaPassport, $numberPassport, $photo, $uploadDocument)"; //sql запрос
$stmtInsert = sqlsrv_query($conn, $sqlInsert);
if($stmtInsert){
echo 'Инфа вставилась';
}
else{
if( ($errors = sqlsrv_errors() ) != null) {
foreach( $errors as $error ) {
echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
echo "Код: ".$error[ 'code']."<br />";
echo "Сообщение: ".$error[ 'message']."<br />";
}
}
}
?>
Сама проблема я думаю в запросе, но не понимаю где именно.
PHP задачи с собеседований
Товарищи, подскажите
Есть объект такого класса
есть кастомный сериалайзер:
Стандартный сериалайзер при вызове
выдает такое
а кастомный такое
Как заставить кастомный сериалайзер учитывать атрибуты Context для свойств?
symfony5.4
Есть объект такого класса
class Client
{
#[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]
public \DateTimeImmutable $passportIssuedDate;
#[Context([DateTimeNormalizer::FORMAT_KEY => \DateTimeImmutable::ATOM])]
public \DateTimeImmutable $agreementDateTime;
}
есть кастомный сериалайзер:
$encoders = [new JsonEncoder()];
$extractor = new PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()]);
$normalizers = [
new DateTimeNormalizer(),
new ObjectNormalizer(propertyTypeExtractor: $extractor),
];
$serializer = new Serializer($normalizers, $encoders);
Стандартный сериалайзер при вызове
$this->serializer->serialize($client, 'json');
выдает такое
{"passportIssuedDate":"2024-04-05","agreementDateTime":"2024-04-05T11:59:32+00:00"}
а кастомный такое
{"passportIssuedDate":"2024-04-05T11:59:32+00:00","agreementDateTime":"2024-04-05T11:59:32+00:00"}
Как заставить кастомный сериалайзер учитывать атрибуты Context для свойств?
symfony5.4