Разделить список директории на дочерние и родительские
Подскажите правильное направление или пример. Есть список:
$list = ['folder', 'folder2','folder2/items','folder2/items/css','folder2/images'];
Нужно получить многомерный массив с дочерними элементами:
$list = [
["name" => "folder", "path" => "/folder", children: []],
["name" => "folder2", "path" => "/folder2", children:
[
"name" => "items", "path" => "/folder2/items", children:
[
"name" => "css", "path" => "folder2/items/css", children: []
],
"name" => "images", "path" => "/folder2/images", children: [],
]
],
];
Подскажите правильное направление или пример. Есть список:
$list = ['folder', 'folder2','folder2/items','folder2/items/css','folder2/images'];
Нужно получить многомерный массив с дочерними элементами:
$list = [
["name" => "folder", "path" => "/folder", children: []],
["name" => "folder2", "path" => "/folder2", children:
[
"name" => "items", "path" => "/folder2/items", children:
[
"name" => "css", "path" => "folder2/items/css", children: []
],
"name" => "images", "path" => "/folder2/images", children: [],
]
],
];
Bitrix24 вызов попапа посредством события в inti.php
В init.php прописываю событие, которое должно открывать попап после сообщения в открытых линиях, само событие отрабатывает, в лог пишет. Но попап в CRM не открывается. Вот само событие:
AddEventHandler("imopenlines", "OnSessionStart", "OnFirstMessage");
function OnFirstMessage($arFields) {
$chatId = $arFields['CHAT_ID']; // Логируем ID чата в файл для дальнейшей обработки
file_put_contents(__DIR__."/test.txt", $chatId . PHP_EOL, FILE_APPEND);
\Bitrix\Main\Page\Asset::getInstance()->addString('
<div id="openline_confirm"></div>');
\Bitrix\Main\Page\Asset::getInstance()->addString('
<script>
BX.ready(function() {
var Confirmer = new BX.PopupWindow("openline_confirm", null, {
content: "<div></div>" + "<h3>Новое сообщение в открытых линиях</h3>",
closeIcon: {
right: "20px",
top: "20px"
},
width: 350, // ширина окна
height: 150, // высота окна
zIndex: 100, // z-index
draggable: false, // можно двигать или нет
resizable: true, // можно ресайзить
min_height: 250, // минимальная высота окна
min_width: 100, // минимальная ширина окна
overlay: {
backgroundColor: "black",
opacity: "80"
},
buttons: [
new BX.PopupWindowButton({
text: "Принять",
className: "popup-window-button-accept",
events: {
click: function() {
BX.Messenger.Public.openLines();
this.popupWindow.close();
}
}
}),
new BX.PopupWindowButton({
text: "Отклонить",
className: "webform-button-link-cancel",
events: {
click: function() {
this.popupWindow.close();
}
}
})
]
});
Confirmer.show();
});
</script>');
CJSCore::Init(array("Confirmer"));
}
При событии js на стороне клиента не добавляется, как это можно реализовать?
В init.php прописываю событие, которое должно открывать попап после сообщения в открытых линиях, само событие отрабатывает, в лог пишет. Но попап в CRM не открывается. Вот само событие:
AddEventHandler("imopenlines", "OnSessionStart", "OnFirstMessage");
function OnFirstMessage($arFields) {
$chatId = $arFields['CHAT_ID']; // Логируем ID чата в файл для дальнейшей обработки
file_put_contents(__DIR__."/test.txt", $chatId . PHP_EOL, FILE_APPEND);
\Bitrix\Main\Page\Asset::getInstance()->addString('
<div id="openline_confirm"></div>');
\Bitrix\Main\Page\Asset::getInstance()->addString('
<script>
BX.ready(function() {
var Confirmer = new BX.PopupWindow("openline_confirm", null, {
content: "<div></div>" + "<h3>Новое сообщение в открытых линиях</h3>",
closeIcon: {
right: "20px",
top: "20px"
},
width: 350, // ширина окна
height: 150, // высота окна
zIndex: 100, // z-index
draggable: false, // можно двигать или нет
resizable: true, // можно ресайзить
min_height: 250, // минимальная высота окна
min_width: 100, // минимальная ширина окна
overlay: {
backgroundColor: "black",
opacity: "80"
},
buttons: [
new BX.PopupWindowButton({
text: "Принять",
className: "popup-window-button-accept",
events: {
click: function() {
BX.Messenger.Public.openLines();
this.popupWindow.close();
}
}
}),
new BX.PopupWindowButton({
text: "Отклонить",
className: "webform-button-link-cancel",
events: {
click: function() {
this.popupWindow.close();
}
}
})
]
});
Confirmer.show();
});
</script>');
CJSCore::Init(array("Confirmer"));
}
При событии js на стороне клиента не добавляется, как это можно реализовать?
Ошибка в получении данных VK Api
Подскажите почему возникает ошибка "Ошибка при получении данных"? Ничего не отдается хотя id и токен ввожу правильно
<?php
$group_id = '******';
$access_token = '********';
$count = 5; // Количество постов
$url = "https://api.vk.com/method/wall.get?owner_id=-$group_id&count=$count&access_token=$access_token&v=5.131";
$response = file_get_contents($url);
$data = json_decode($response, true);
if (isset($data['response']) && isset($data['response']['items'])) {
$posts = $data['response']['items'];
foreach ($posts as $post) {
// Выводим текст поста
echo $post['text'] . '
';
// Дополнительные действия с постом
// Например, вывод изображений, комментариев и т.д.
}
} else {
echo 'Ошибка при получении данных';
}
?>
php
Подскажите почему возникает ошибка "Ошибка при получении данных"? Ничего не отдается хотя id и токен ввожу правильно
<?php
$group_id = '******';
$access_token = '********';
$count = 5; // Количество постов
$url = "https://api.vk.com/method/wall.get?owner_id=-$group_id&count=$count&access_token=$access_token&v=5.131";
$response = file_get_contents($url);
$data = json_decode($response, true);
if (isset($data['response']) && isset($data['response']['items'])) {
$posts = $data['response']['items'];
foreach ($posts as $post) {
// Выводим текст поста
echo $post['text'] . '
';
// Дополнительные действия с постом
// Например, вывод изображений, комментариев и т.д.
}
} else {
echo 'Ошибка при получении данных';
}
?>
php
Как установить правильно sqlsrv для php?
0
В общем я пытался установить sqlsrv, с помощью вот этой документации: https://learn.microsoft.com/ru-ru/sql/connect/php/microsoft-php-driver-for-sql-server?view=sql-server-ver16#getting-started, но у меня после вызова phpinfo нет sqlsrv. Что находиться в php(Тип файла INI-DEVELOPMENT):
extension_dir = "C:\php\ext"
extension=php_pdo_sqlsrv_82_ts_x64.dll
extension=php_sqlsrv_82_ts_x64.dll
Моя версия php: PHP Version 8.2.20 Мне это нужно для того, чтобы подключиться ко внешней БД, со своего локального ПК (у меня нет сервера). Но у меня появилась ошибка: Fatal error: Uncaught Error: Call to undefined function sqlsrv_connect() in C:\Users\ivakov.av\Desktop\Php_Projects\sigur.php:15 И мне надо установить корректно sqlsrv, помогите, пожалуйста!
// Подключаемся к MS SQL
$serverName = ""; // Имя сервера MS SQL
$connectionInfo = array(
"Database" => "", // Имя базы данных
"UID" => "", // Имя пользователя
"PWD" => "" // Пароль
);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
echo "Connection failed: " . print_r(sqlsrv_errors(), true);
exit;
}
0
В общем я пытался установить sqlsrv, с помощью вот этой документации: https://learn.microsoft.com/ru-ru/sql/connect/php/microsoft-php-driver-for-sql-server?view=sql-server-ver16#getting-started, но у меня после вызова phpinfo нет sqlsrv. Что находиться в php(Тип файла INI-DEVELOPMENT):
extension_dir = "C:\php\ext"
extension=php_pdo_sqlsrv_82_ts_x64.dll
extension=php_sqlsrv_82_ts_x64.dll
Моя версия php: PHP Version 8.2.20 Мне это нужно для того, чтобы подключиться ко внешней БД, со своего локального ПК (у меня нет сервера). Но у меня появилась ошибка: Fatal error: Uncaught Error: Call to undefined function sqlsrv_connect() in C:\Users\ivakov.av\Desktop\Php_Projects\sigur.php:15 И мне надо установить корректно sqlsrv, помогите, пожалуйста!
// Подключаемся к MS SQL
$serverName = ""; // Имя сервера MS SQL
$connectionInfo = array(
"Database" => "", // Имя базы данных
"UID" => "", // Имя пользователя
"PWD" => "" // Пароль
);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
echo "Connection failed: " . print_r(sqlsrv_errors(), true);
exit;
}
PHP parse/syntax errors; Ошибки Unexpected XXX и как решить их
Часто программисты допускают ошибки. Могут возникать ошибки синтаксиса. Например:
PHP Parse error: syntax error, unexpected '{' in index.php on line 20
Неожиданный символ не всегда является настоящим виновником. Но номер строки дает приблизительное представление о том, с чего начать поиск.
Всегда смотрите на контекст кода. Синтаксическая ошибка часто кроется в упомянутых или в предыдущих строках кода. Сравните свой код с примерами синтаксиса из руководства.
Часто программисты допускают ошибки. Могут возникать ошибки синтаксиса. Например:
PHP Parse error: syntax error, unexpected '{' in index.php on line 20
Неожиданный символ не всегда является настоящим виновником. Но номер строки дает приблизительное представление о том, с чего начать поиск.
Всегда смотрите на контекст кода. Синтаксическая ошибка часто кроется в упомянутых или в предыдущих строках кода. Сравните свой код с примерами синтаксиса из руководства.
cms для блога прошу о помощи
здравствуйте у меня такой вопрос я пока нечего не понимаю в программирования решил разработать cms для блога , в краце подскажите пж как создать связь меж этими таблицами я пользуюсь PhpMyAdmin id | login | password | screen_name
#posts id | alias | author_id | date_posted
#posts_content post_id | language_id | title | post_body
#comments id | post_id | author_id | text | date_posted | parent_comment_id
здравствуйте у меня такой вопрос я пока нечего не понимаю в программирования решил разработать cms для блога , в краце подскажите пж как создать связь меж этими таблицами я пользуюсь PhpMyAdmin id | login | password | screen_name
#posts id | alias | author_id | date_posted
#posts_content post_id | language_id | title | post_body
#comments id | post_id | author_id | text | date_posted | parent_comment_id
Каким образом можно автоматизировать HTTP запросы на интернет-ресурс, чтобы они выполнялись круглосуточно?
Задача следующая: есть URL, на который требуется с определенной периодичностью отправлять POST-запросы 24/7. Набросал код на JS и запустил на ноде, все работает. Но свой компьютер постоянно включенным держать не могу. Первая идея - арендовать виртуальный сервер и отправлять запросы с него, но в серверной разработке я полный ноль. Арендованный виртуальный сервер у меня есть, но использую я его только для тестов фронтенда, с серверными скриптами ни разу не работал. Есть ли вообще такая возможность? Подскажите направление куда копать.
Задача следующая: есть URL, на который требуется с определенной периодичностью отправлять POST-запросы 24/7. Набросал код на JS и запустил на ноде, все работает. Но свой компьютер постоянно включенным держать не могу. Первая идея - арендовать виртуальный сервер и отправлять запросы с него, но в серверной разработке я полный ноль. Арендованный виртуальный сервер у меня есть, но использую я его только для тестов фронтенда, с серверными скриптами ни разу не работал. Есть ли вообще такая возможность? Подскажите направление куда копать.
Исправление конфигурации OPcache ускорило работу PHP-приложения в 3 раза
Правильное управление OPcache при атомарных деплойментах позволило:
🔸Ускорить приложение в 3 раза.
🔸Снизить нагрузку на CPU в 10 раз.
🔸Сохранить сотни дней на время загрузки для пользователей.
Проблема
При деплойментах с символьными ссылками OPcache продолжает кэшировать файлы предыдущих релизов, заполняя память. Это снижает эффективность кэша.
Решение
Сбрасывать OPcache при каждом деплойменте с помощью cachetool. Это гарантирует, что файлы нового релиза будут кэшироваться заново.
Настройки OPcache
Настроить объем памяти (
Мониторинг
Добавьте ключевые метрики OPcache (свободная память, hit rate) в систему мониторинга. Это поможет выявлять проблемы и оптимизировать работу.
@phpquiz
Правильное управление OPcache при атомарных деплойментах позволило:
🔸Ускорить приложение в 3 раза.
🔸Снизить нагрузку на CPU в 10 раз.
🔸Сохранить сотни дней на время загрузки для пользователей.
Проблема
При деплойментах с символьными ссылками OPcache продолжает кэшировать файлы предыдущих релизов, заполняя память. Это снижает эффективность кэша.
Решение
Сбрасывать OPcache при каждом деплойменте с помощью cachetool. Это гарантирует, что файлы нового релиза будут кэшироваться заново.
Настройки OPcache
opcache.validate_timestamps=0
— отключить проверку временных меток.opcache.file_update_protection=0
— мгновенное кэширование новых файлов.Настроить объем памяти (
opcache.memory_consumption
) и количество файлов (opcache.max_accelerated_files
) для ваших нужд.Мониторинг
Добавьте ключевые метрики OPcache (свободная память, hit rate) в систему мониторинга. Это поможет выявлять проблемы и оптимизировать работу.
@phpquiz
Настраивать xdebug для первого запуска не нужно вообще! Как в Phpstorm запустить отладку за минуту и без браузера
Многие считают, что добиться успешного запуска отладки xdebug после его установки — тяжело и мучительно. Но на самом деле, сделать первый запуск можно менее чем за минуту, не делая настройки и даже не прикасаясь к конфигурационным файлам .ini (php.ini/xdebug.ini). Как это сделать? Об этом и пойдет речь в этой статье.
@phpquiz
Многие считают, что добиться успешного запуска отладки xdebug после его установки — тяжело и мучительно. Но на самом деле, сделать первый запуск можно менее чем за минуту, не делая настройки и даже не прикасаясь к конфигурационным файлам .ini (php.ini/xdebug.ini). Как это сделать? Об этом и пойдет речь в этой статье.
@phpquiz
Хабр
Настраивать xdebug для первого запуска не нужно вообще! Как в Phpstorm запустить отладку за минуту и без браузера
Многие считают, что добиться успешного запуска отладки xdebug после его установки - тяжело и мучительно. Но на самом деле, сделать первый запуск можно менее чем за минуту, не делая настройку и даже не...
Всех с наступившим новым годом! ❤️🌲
С завтрашнего дня публикации будут выходить как обычно.
С завтрашнего дня публикации будут выходить как обычно.
Как PHP обрабатывает статическое свойство класса, если объект класса клонируется?
Anonymous Poll
27%
Создается новая копия статического свойства
52%
Статическое свойство не копируется, остается одно для всех объектов
4%
Выдается предупреждение о невозможности клонирования
20%
Клонируется только ссылка на статическое свойство
🔥 Как избежать проблем с isset() и empty() в PHP?
Сегодня разберём две часто используемые функции в PHP — isset() и empty(), которые могут вести себя не так, как вы ожидаете.
📌 isset()
Функция isset($var) проверяет, была ли переменная установлена и не равна ли она null.
❗️ Пример подвоха:
$var = null;
var_dump(isset($var)); // false
Если переменной вообще нет в коде — тоже будет false.
📌 empty()
Функция empty($var) проверяет, считается ли переменная "пустой".
❗️ Пустыми считаются:
- "" (пустая строка)
- 0 (число)
- "0" (строка с нулём)
- null
- false
- [] (пустой массив)
Пример:
$var = "0";
var_dump(empty($var)); // true, хотя строка не null
⚠️ Ошибка: проверка if (!isset($var) || empty($var)) может привести к неожиданному результату.
🔥 Лучший подход?
Используйте строгие проверки:
if ($var === null) { /* Переменная null */ }
if ($var === '') { /* Пустая строка */ }
if ($var === 0) { /* Число 0 */ }
Если проверяете массивы, то:
if (count($var) === 0) { /* Массив пуст */ }
Вывод: не злоупотребляйте isset() и empty(), а проверяйте переменные строго!
Сегодня разберём две часто используемые функции в PHP — isset() и empty(), которые могут вести себя не так, как вы ожидаете.
📌 isset()
Функция isset($var) проверяет, была ли переменная установлена и не равна ли она null.
❗️ Пример подвоха:
$var = null;
var_dump(isset($var)); // false
Если переменной вообще нет в коде — тоже будет false.
📌 empty()
Функция empty($var) проверяет, считается ли переменная "пустой".
❗️ Пустыми считаются:
- "" (пустая строка)
- 0 (число)
- "0" (строка с нулём)
- null
- false
- [] (пустой массив)
Пример:
$var = "0";
var_dump(empty($var)); // true, хотя строка не null
⚠️ Ошибка: проверка if (!isset($var) || empty($var)) может привести к неожиданному результату.
🔥 Лучший подход?
Используйте строгие проверки:
if ($var === null) { /* Переменная null */ }
if ($var === '') { /* Пустая строка */ }
if ($var === 0) { /* Число 0 */ }
Если проверяете массивы, то:
if (count($var) === 0) { /* Массив пуст */ }
Вывод: не злоупотребляйте isset() и empty(), а проверяйте переменные строго!
Какую из следующих функций PHP нужно использовать для получения текущего использования памяти?
Anonymous Poll
8%
get_usage()
4%
get_peak_usage()
82%
memory_get_usage()
12%
memory_get_peak_usage()
Какая из реализаций метода getName() не валидна в классе ChildCls?
Anonymous Poll
12%
protected function getName(){}
22%
function getName(){}
53%
private function getName(){}
29%
public function getName(){}
Какой метод позволяет рассчитать действует ли летнее время в конкретную дату и время?
Anonymous Poll
51%
ISODate()
13%
savingTime()
23%
getOffset()
17%
getTranitions()
Что произойдет при выполнении следующего кода?
Anonymous Poll
8%
Trait Message
68%
Class Message
22%
Ошибка
1%
NULL
Какое значение по умолчанию принимает директива memory_limit в PHP?
Anonymous Poll
31%
64M
54%
128M
14%
256M
2%
512M