Используйте
Storage::download(), чтобы принудительно запустить скачивание файла в браузере. Отлично подходит для защищенных файлов или генерации динамических загрузок.Совет: Настройте имя файла и заголовки для большего контроля.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
This media is not supported in your browser
VIEW IN TELEGRAM
Официальный мануал по PHP освоило новый трюк: теперь вы можете запускать примеры кода на PHP прямо на сайте благодаря WASM!
👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥6❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - prism-php/prism: A unified interface for working with LLMs in Laravel
A unified interface for working with LLMs in Laravel - prism-php/prism
👍7
Как генерировать случайные числа в PHP: безопасно и эффективно
В PHP есть множество способов создать случайное число, но важно выбирать метод в зависимости от задачи. Давайте разберем основные подходы.
1️⃣ Для базовых задач:
Если вам нужно случайное число для простых сценариев, например, выбора победителя в игре, используйте:
Или его более быстрый аналог:
⚠️ Предупреждение: Эти функции не подходят для криптографически безопасных операций, таких как генерация токенов или паролей.
2️⃣ Для безопасности:
Начиная с PHP 7, для безопасной генерации случайных чисел появился random_int():
🔸 Эта функция использует криптографически безопасные источники энтропии.
🔸 Рекомендуется для задач, где важно исключить предсказуемость (например, сессии, API-ключи).
3️⃣ Генерация взвешенных случайных чисел
Если вы хотите дать некоторым значениям больше шансов на выбор, воспользуйтесь алгоритмом взвешенной случайности. Например:
Вывод
🔸 Используйте random_int() для критичных задач.
🔸 Простые rand() или mt_rand() подойдут для игр и тестов.
🔸 Добавьте взвешенность, если некоторым значениям нужно придать больший приоритет.
Генерируйте случайные числа правильно и безопасно!🎹
👉 @PHPgx | #заметки
В PHP есть множество способов создать случайное число, но важно выбирать метод в зависимости от задачи. Давайте разберем основные подходы.
rand() и mt_rand()Если вам нужно случайное число для простых сценариев, например, выбора победителя в игре, используйте:
$randomNumber = rand(1, 100); // Число от 1 до 100
Или его более быстрый аналог:
$randomNumber = mt_rand(1, 100);
random_int()Начиная с PHP 7, для безопасной генерации случайных чисел появился random_int():
$safeRandomNumber = random_int(1, 100);
Если вы хотите дать некоторым значениям больше шансов на выбор, воспользуйтесь алгоритмом взвешенной случайности. Например:
$options = ['A' => 1, 'B' => 2, 'C' => 3]; // Шансы: A - 1, B - 2, C - 3
$totalWeight = array_sum($options);
$random = random_int(1, $totalWeight);
foreach ($options as $key => $weight) {
if ($random <= $weight) {
echo "Выбрано: $key";
break;
}
$random -= $weight;
}
Вывод
Генерируйте случайные числа правильно и безопасно!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤1
Dead code detector
Библиотека для обнаружения неиспользуемого кода с помощью расширения PHPStan. Обнаруживает мертвые циклы, поддерживает такие библиотеки, как Symfony, Doctrine, PHPUnit и др. Может автоматически удалять неиспользуемый PHP-код.
👉 @PHPgx | #ресурсы
Библиотека для обнаружения неиспользуемого кода с помощью расширения PHPStan. Обнаруживает мертвые циклы, поддерживает такие библиотеки, как Symfony, Doctrine, PHPUnit и др. Может автоматически удалять неиспользуемый PHP-код.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - shipmonk-rnd/dead-code-detector: 💀 PHP unused code detection via PHPStan extension. Detects dead cycles, supports libs…
💀 PHP unused code detection via PHPStan extension. Detects dead cycles, supports libs like Laravel, Symfony, Twig, Doctrine, PHPUnit etc. Can automatically remove dead PHP code. Able to detect dead...
❤8
Работа с датой и временем в PHP: просто и эффективно
Дата и время — одни из самых востребованных инструментов в веб-разработке. PHP предлагает множество встроенных функций и классов для работы с ними. Давайте разберем основные.
1️⃣ Получение текущей даты и времени
Самый простой способ узнать текущее время:
Используя date(), можно кастомизировать формат. Примеры:
🔹 Y — год (4 цифры)
🔹 m — месяц
🔹 d — день
🔹 H — часы (24 часа)
🔹 i — минуты
🔹 s — секунды
2️⃣ Работа с объектами DateTime
Класс DateTime предлагает больше возможностей, чем простая функция date():
Установить дату и время вручную:
3️⃣ Вычисление разницы между датами
Чтобы узнать разницу между двумя датами, используйте метод diff():
4️⃣ Добавление или вычитание времени
Добавлять или вычитать дни, месяцы и годы можно с помощью modify():
5️⃣ Учет часовых поясов
Работать с разными часовыми поясами тоже легко:
Сменить часовой пояс:
6️⃣ Преобразование строк в дату
Используйте DateTime::createFromFormat(), чтобы разобрать строку:
✅ Итог
PHP предлагает мощные инструменты для работы с датой и временем. Используйте их для отображения времени, расчета интервалов и поддержки разных часовых поясов.
Если хотите подробнее разобраться с календарями или локализацией даты, дайте знать💙
👉 @PHPgx | #заметки
Дата и время — одни из самых востребованных инструментов в веб-разработке. PHP предлагает множество встроенных функций и классов для работы с ними. Давайте разберем основные.
Самый простой способ узнать текущее время:
echo date('Y-m-d H:i:s'); // Текущая дата и время в формате "2024-12-06 12:34:56"Используя date(), можно кастомизировать формат. Примеры:
Класс DateTime предлагает больше возможностей, чем простая функция date():
$now = new DateTime();
echo $now->format('Y-m-d H:i:s'); // Текущая дата и время
Установить дату и время вручную:
$date = new DateTime('2023-01-01 10:00:00');
echo $date->format('d-m-Y H:i'); // 01-01-2023 10:00Чтобы узнать разницу между двумя датами, используйте метод diff():
$start = new DateTime('2023-01-01');
$end = new DateTime('2024-12-06');
$interval = $start->diff($end);
echo $interval->format('%y лет, %m месяцев, %d дней'); // "1 лет, 11 месяцев, 5 дней"Добавлять или вычитать дни, месяцы и годы можно с помощью modify():
$date = new DateTime('2024-12-06');
$date->modify('+10 days'); // Добавляем 10 дней
echo $date->format('Y-m-d'); // 2024-12-16
$date->modify('-2 months'); // Вычитаем 2 месяца
echo $date->format('Y-m-d'); // 2024-10-16Работать с разными часовыми поясами тоже легко:
$date = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date->format('Y-m-d H:i:s'); // Дата и время в Нью-ЙоркеСменить часовой пояс:
$date->setTimezone(new DateTimeZone('Asia/Tokyo'));
echo $date->format('Y-m-d H:i:s'); // Дата и время в ТокиоИспользуйте DateTime::createFromFormat(), чтобы разобрать строку:
$date = DateTime::createFromFormat('d.m.Y', '06.12.2024');
echo $date->format('Y-m-d'); // 2024-12-06PHP предлагает мощные инструменты для работы с датой и временем. Используйте их для отображения времени, расчета интервалов и поддержки разных часовых поясов.
Если хотите подробнее разобраться с календарями или локализацией даты, дайте знать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤5🌚2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1👀1
Работа с файлами в PHP: основные операции
PHP предоставляет мощные функции для работы с файлами, будь то чтение, запись или манипуляции с содержимым. Давайте разберем основные операции, которые часто встречаются в разработке
1️⃣ Открытие и закрытие файлов
Для начала работы с файлом нужно его открыть с помощью fopen():
Режимы открытия файлов:
🔹
🔹
🔹
🔹
2️⃣ Чтение содержимого файла
Для чтения содержимого файла можно использовать
🔹 Чтение всего файла:
🔹 Чтение файла построчно:
🔹 Чтение файла в массив
3️⃣ Запись в файл
Записать данные в файл можно с помощью
🔹 Запись строки в файл:
🔹 Запись данных в конец файла:
🔹 Запись массива в файл (каждый элемент на новой строке):
4️⃣ Проверка существования файла
Перед тем как работать с файлом, полезно проверить его наличие:
5️⃣ Удаление и переименование файлов
Чтобы удалить файл, используйте
🔹 Удаление файла:
🔹 Переименование файла:
6️⃣ Манипуляции с путями и директориями
🔹 Получение информации о файле:
🔹 Создание директории:
🔹 Проверка, является ли путь директорией:
✅ Итог
Работа с файлами в PHP — важная часть любого веб-приложения. С помощью встроенных функций можно эффективно читать, записывать, удалять и изменять файлы. Используйте их с осторожностью, особенно при работе с пользовательским вводом, чтобы избежать ошибок или атак.
👉 @PHPgx | #заметки
PHP предоставляет мощные функции для работы с файлами, будь то чтение, запись или манипуляции с содержимым. Давайте разберем основные операции, которые часто встречаются в разработке
Для начала работы с файлом нужно его открыть с помощью fopen():
$file = fopen('example.txt', 'r'); // Открыть файл для чтения
if ($file) {
echo "Файл открыт успешно!";
fclose($file); // Закрытие файла
} else {
echo "Не удалось открыть файл.";
}Режимы открытия файлов:
'r' — только для чтения'w' — для записи (перезаписывает файл)'a' — для записи (добавляет в конец файла)'x' — для создания файла (если файл существует, вызовет ошибку)Для чтения содержимого файла можно использовать
fread(), fgets() или file_get_contents()$content = file_get_contents('example.txt');
echo $content;$file = fopen('example.txt', 'r');
while ($line = fgets($file)) {
echo $line . "<br>";
}
fclose($file);$lines = file('example.txt');
print_r($lines); // Массив строк из файлаЗаписать данные в файл можно с помощью
fwrite() или file_put_contents()$file = fopen('example.txt', 'w');
fwrite($file, "Привет, мир!");
fclose($file);file_put_contents('example.txt', "Данные добавлены в конец\n", FILE_APPEND);$array = ["Строка 1", "Строка 2", "Строка 3"];
file_put_contents('example.txt', implode("\n", $array));
Перед тем как работать с файлом, полезно проверить его наличие:
if (file_exists('example.txt')) {
echo "Файл существует!";
} else {
echo "Файл не найден.";
}Чтобы удалить файл, используйте
unlink(), а для переименования — rename()if (unlink('example.txt')) {
echo "Файл удален.";
} else {
echo "Не удалось удалить файл.";
}if (rename('oldfile.txt', 'newfile.txt')) {
echo "Файл переименован.";
} else {
echo "Ошибка при переименовании.";
}$file_info = pathinfo('example.txt');
print_r($file_info); // Массив с деталями пути (basename, dirname, extension)mkdir('new_directory');if (is_dir('new_directory')) {
echo "Это директория.";
}Работа с файлами в PHP — важная часть любого веб-приложения. С помощью встроенных функций можно эффективно читать, записывать, удалять и изменять файлы. Используйте их с осторожностью, особенно при работе с пользовательским вводом, чтобы избежать ошибок или атак.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥6❤3
Параметризованные запросы в PHP для безопасной работы с базами данных
Что такое параметризованные запросы? Параметризованные запросы позволяют разделить код SQL-запроса и данные, которые передаются в базу. Это обеспечивает защиту от SQL-инъекций, так как данные, введенные пользователем, обрабатываются как текст, а не как часть SQL-кода.
1️⃣ Как это работает? Параметризованные запросы используют подготовленные выражения (prepared statements). Они выполняются в два этапа:
1. Запрос отправляется в базу данных для компиляции.
2. Переменные передаются и вставляются в компилированный запрос.
2️⃣ Пример использования с MySQLi
3️⃣ Пример использования с PDO
4️⃣ Преимущества параметризованных запросов
🔹 Безопасность: защита от SQL-инъекций.
🔹 Эффективность: запрос компилируется только один раз, независимо от количества выполняемых операций.
🔹 Читаемость и структура: разделение SQL-кода и переменных делает код более понятным.
👉 @PHPgx | #заметки
Что такое параметризованные запросы? Параметризованные запросы позволяют разделить код SQL-запроса и данные, которые передаются в базу. Это обеспечивает защиту от SQL-инъекций, так как данные, введенные пользователем, обрабатываются как текст, а не как часть SQL-кода.
1. Запрос отправляется в базу данных для компиляции.
2. Переменные передаются и вставляются в компилированный запрос.
<?php
// Подключение к базе данных
$mysqli = new mysqli("localhost", "username", "password", "database");
// Проверка подключения
if ($mysqli->connect_error) {
die("Ошибка подключения: " . $mysqli->connect_error);
}
// Подготовка запроса
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
if (!$stmt) {
die("Ошибка подготовки запроса: " . $mysqli->error);
}
// Привязка параметров (здесь 's' обозначает строковый тип данных)
$email = "test@example.com";
$stmt->bind_param("s", $email);
// Выполнение запроса
$stmt->execute();
// Получение результата
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo "User: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
// Закрытие запроса и соединения
$stmt->close();
$mysqli->close();
?>
<?php
try {
// Подключение к базе данных
$pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Подготовка запроса
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
// Привязка параметров
$stmt->bindParam(':email', $email);
// Передача значения переменной
$email = "test@example.com";
// Выполнение запроса
$stmt->execute();
// Получение результата
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($users as $user) {
echo "User: " . $user["name"] . " - Email: " . $user["email"] . "<br>";
}
} catch (PDOException $e) {
echo "Ошибка: " . $e->getMessage();
}
?>
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1🔥1
Хеширование паролей
➖ Задача:
Безопасно сохранить пользовательский пароль в базе данных, чтобы защитить его от утечек
➖ Решение:
Используйте встроенные функции
Пример:
🔹
🔹
➖ Проверка хеша:
С помощью функции
➖ Рекомендации:
🔹 Не храните пароли в открытом виде!
🔹 Используйте длину паролей не менее 12 символов и требуйте от пользователей включать буквы, цифры и специальные символы.
🔹 Регулярно проверяйте алгоритм хеширования и обновляйте устаревшие хеши.
➖ Пример работы с базой данных:
👉 @PHPgx | #заметки
Безопасно сохранить пользовательский пароль в базе данных, чтобы защитить его от утечек
Используйте встроенные функции
password_hash() и password_verify().Пример:
// Создание хеша пароля
$password = 'secure_password';
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// Проверка пароля
if (password_verify('secure_password', $hashedPassword)) {
echo 'Пароль верный!';
} else {
echo 'Неверный пароль!';
}
password_hash() автоматически выбирает безопасный алгоритм хеширования, например, bcrypt, и добавляет "соль".password_verify() сравнивает пользовательский ввод с хешем из базы.С помощью функции
password_needs_rehash() можно обновить хеш пароля, если алгоритм был улучшен:if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
}// Сохранение хеша
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
$stmt->execute([
'username' => 'user1',
'password' => $hashedPassword,
]);
// Проверка пароля при авторизации
$stmt = $pdo->prepare("SELECT password FROM users WHERE username = :username");
$stmt->execute(['username' => 'user1']);
$storedHash = $stmt->fetchColumn();
if (password_verify('secure_password', $storedHash)) {
echo 'Доступ разрешён!';
} else {
echo 'Неверный пароль!';
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3
Защита конфиденциальных данных с помощью шифрования и расшифровки
➖ Задача: Безопасно зашифровать данные, чтобы защитить их от несанкционированного доступа, и расшифровать их при необходимости.
➖ Решение:
Используйте расширение Sodium для симметричного шифрования данных.
1️⃣ Генерация ключа шифрования
Сначала нужно создать секретный ключ для шифрования:
2️⃣ Шифрование данных
3️⃣ Расшифровка данных
🔹 Ключ: Генерируется однократно и должен храниться безопасно (например, за пределами кода, в конфигурационных файлах или хранилище секретов).
🔹 Nonce (вектор инициализации): Должен быть уникальным для каждого сообщения, но его можно передавать в открытом виде вместе с шифротекстом.
🔹 Алгоритм: Sodium использует AES-256-GCM или подобные современные алгоритмы для безопасного шифрования.
➖ Когда использовать:
🔹 Защита конфиденциальной информации (паролей, токенов, личных данных).
🔹 Шифрование конфигурационных файлов.
🔹 Безопасное хранение данных в базе данных.
Никогда не храните ключи шифрования вместе с данными. Используйте безопасные хранилища, такие как HashiCorp Vault или AWS Secrets Manager.
👉 @PHPgx | #заметки
Используйте расширение Sodium для симметричного шифрования данных.
Сначала нужно создать секретный ключ для шифрования:
$key = sodium_crypto_secretbox_keygen(); // Генерация ключа
file_put_contents('secret.key', $key); // Сохранение ключа в файл
$message = "Конфиденциальные данные";
$key = file_get_contents('secret.key'); // Получение ключа из файла
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); // Генерация случайного вектора инициализации
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
// Сохранение зашифрованных данных
file_put_contents('data.enc', $nonce . $ciphertext);
echo "Данные успешно зашифрованы!";
$key = file_get_contents('secret.key');
$encrypted = file_get_contents('data.enc');
$nonce = mb_substr($encrypted, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
$ciphertext = mb_substr($encrypted, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');
$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
if ($decrypted === false) {
throw new Exception("Ошибка расшифровки данных!");
}
echo "Расшифрованные данные: {$decrypted}";Никогда не храните ключи шифрования вместе с данными. Используйте безопасные хранилища, такие как HashiCorp Vault или AWS Secrets Manager.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁45❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
PHP TUI
Фреймворк для создания консольных приложений на PHP с псевдографическим пользовательским интерфейсом.
https://github.com/php-tui/php-tui
👉 @PHPgx | #ресурсы
Фреймворк для создания консольных приложений на PHP с псевдографическим пользовательским интерфейсом.
https://github.com/php-tui/php-tui
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17😁4❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🤔2