fa
Feedback
PHP Portal | Программирование

PHP Portal | Программирование

رفتن به کانال در Telegram

Присоединяйтесь к нашему каналу и погрузитесь в мир для PHP-разработчика Связь: @devmangx

نمایش بیشتر
4 821
مشترکین
-1124 ساعت
-247 روز
-8630 روز
آرشیو پست ها
👉 @PHPgx | #memes
👉 @PHPgx | #memes

🎁Осталась одна неделя на то что бы стать программистом в 2024 В телеграмм появился канал в котором бесплатно слили весь топо
🎁Осталась одна неделя на то что бы стать программистом в 2024 В телеграмм появился канал в котором бесплатно слили весь топовый контент о программировании! Любой материал, всё разбито по хэш-тэгу в закрепе: 📱 Frontend 👩‍💻 C++ 📱 Python 🤔 Hacking 📱 Java 👩‍💻 Golang 📱 C# 👩‍💻 Linux 👩‍💻 Lua 👩‍💻 php 👩‍💻 Kotlin 👩‍💻 Git 👩‍💻 Assembler 👩‍💻 Swift 🖥 SQL 👩‍💻 Mob. Develop 👣 Backend 🐞 Qa Automation 🖥 Arduino 🖥 Desing Успей подписаться❗️ @CodHub_tg

Защита чувствительных данных в PHP sensitive_parameter — это атрибут, позволяющий пометить параметры функций и методов как чувствительные, чтобы исключить их из логов и трейсбеков. Как работает sensitive_parameter: При использовании этого атрибута, PHP скрывает значение параметра в сообщениях об ошибках и логах, заменяя его на ***. Это помогает предотвратить утечки конфиденциальной информации, такой как пароли или токены. Пример использования:
class UserAuthenticator {
    public function authenticate(
        #[\SensitiveParameter] string $password
    ) {
        // Логика аутентификации
        if ($password !== 'secret') {
            throw new \Exception("Authentication failed");
        }
    }
}

try {
    (new UserAuthenticator())->authenticate('wrong_password');
} catch (\Exception $e) {
    error_log($e->getMessage());
    error_log($e->getTraceAsString());
}
В этом примере, если аутентификация не удастся, в логе вместо фактического значения пароля будет отображено ***. 👉 @PHPgx | #заметки

Профилирование PHP (Laravel) приложений с xhprof. Учимся искать ботлнеки В статье приводится пример использования инструменто
Профилирование PHP (Laravel) приложений с xhprof. Учимся искать ботлнеки В статье приводится пример использования инструментов профилирования, таких как xhprof и Buggregator, которые позволяют анализировать производительность и выявлять проблемные зоны. 👉 Читать ➡️ @PHPgx | #cтатья

Отомстил Binance Буба работал управляющим в Binance в России. Площадка — всё, и теперь он создал свой канал. ❗️Перед уходом B
Отомстил Binance Буба работал управляющим в Binance в России. Площадка — всё, и теперь он создал свой канал. ❗️Перед уходом Binance украл у него 200.000$ Теперь он помогает подписчикам выбирать правильные биржи и когда ждать биткоин по 120.000$. Этой информации нет в интернете — только тут: 📈 Топ-3 проверенных биржи 🪙 Альты, на которых вы сделаете +500% за декабрь 💬 Чат на 6.000+ инвесторов Буба рассказывает обо всех секретах торговли на крипторынке. Трейдерский опыт и знания, которых нет нигде: t.me/+TT9qMUF_Q1Q3MDYy

💡 Совет по Laravel Передавайте большие файлы без задержек, используя потоки 👉 @PHPgx | #tips
💡 Совет по Laravel Передавайте большие файлы без задержек, используя потоки 👉 @PHPgx | #tips

PHP TUI Фреймворк для создания консольных приложений на PHP с псевдографическим пользовательским интерфейсом. https://github.com/php-tui/php-tui 👉 @PHPgx | #ресурсы

👉 @PHPgx | #memes
👉 @PHPgx | #memes

🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и автономных агентов, разбирает гайды, редкую литературу и код топовых моделей машинного обучения и искусственного интеллекта. В 2025 году ИИ выйдет на совершенно новый уровень тот, кто не успеет за прогрессом - отстанет, а кто разберется - сорвет куш. Стоит подписаться: t.me/ai_machinelearning_big_data

Защита конфиденциальных данных с помощью шифрования и расшифровкиЗадача: Безопасно зашифровать данные, чтобы защитить их от несанкционированного доступа, и расшифровать их при необходимости. ➖ Решение: Используйте расширение Sodium для симметричного шифрования данных. 1️⃣ Генерация ключа шифрования Сначала нужно создать секретный ключ для шифрования:
$key = sodium_crypto_secretbox_keygen(); // Генерация ключа
file_put_contents('secret.key', $key);  // Сохранение ключа в файл
2️⃣ Шифрование данных
$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 "Данные успешно зашифрованы!";
3️⃣ Расшифровка данных
$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}";
🔹Ключ: Генерируется однократно и должен храниться безопасно (например, за пределами кода, в конфигурационных файлах или хранилище секретов). 🔹Nonce (вектор инициализации): Должен быть уникальным для каждого сообщения, но его можно передавать в открытом виде вместе с шифротекстом. 🔹Алгоритм: Sodium использует AES-256-GCM или подобные современные алгоритмы для безопасного шифрования. Когда использовать: 🔹Защита конфиденциальной информации (паролей, токенов, личных данных). 🔹Шифрование конфигурационных файлов. 🔹Безопасное хранение данных в базе данных. Никогда не храните ключи шифрования вместе с данными. Используйте безопасные хранилища, такие как HashiCorp Vault или AWS Secrets Manager. 👉 @PHPgx | #заметки

💡 Совет по Laravel Преобразуйте свои массивы в коллекции, чтобы получить доступ ко всем полезным функциям для работы с вашим
💡 Совет по Laravel Преобразуйте свои массивы в коллекции, чтобы получить доступ ко всем полезным функциям для работы с вашими данными. 👉 @PHPgx | #tips

Давайте будем честны, вы же стремитесь в IT ради денег? И те из вас кто отсидят за гайдами и книжками 3-4 года и пробьются через 100500 собеседований наконец-то начнут сутками сидеть за монитором ради 100-200 тыс. рублей в месяц. А в тоже время в России живёт обычная девушка Диана Маркина, которая заработала 3,5 млн. за 2023 год уделяя работе 3-4 часа в неделю. Такого результата легко можно добиться в трейдинге, используя всего 3 инструмента на Мосбирже: газ, нефть и MOEX. Для тех, кто мыслит как IT-шник можно выйти на доход от 100 000 рублей💰 уже в первый месяц. Вам нужно взять алгоритм Дианы, отработать его на специальном тренажёре и повторить на Мосбирже. Скоро у Дианы стартует бесплатный курс, где она будет бесплатно обучать трейдингу всех желающих, раскроет свой алгоритм торговли и организует практику. ➡️ ЗАПИСЫВАЙТЕСЬ БЕСПЛАТНО Реклама. ИП Маркина Д. Д., ИНН: 165809314498

Хеширование паролейЗадача: Безопасно сохранить пользовательский пароль в базе данных, чтобы защитить его от утечек ➖ Решение: Используйте встроенные функции 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);
}
Рекомендации: 🔹Не храните пароли в открытом виде! 🔹Используйте длину паролей не менее 12 символов и требуйте от пользователей включать буквы, цифры и специальные символы. 🔹Регулярно проверяйте алгоритм хеширования и обновляйте устаревшие хеши. Пример работы с базой данных:
// Сохранение хеша
$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 'Неверный пароль!';
}
👉 @PHPgx | #заметки

Руководство по SQL 🔥 Это руководство охватывает различные аспекты, начиная с основ SQL и до более сложных тем. Материал дополнен практическими примерами, которые способствуют лучшему усвоению информации. 👉 @PHPgx | #ресурсы

💡 Совет по Laravel Легко обновляйте столбцы JSON с помощью синтаксиса стрелок Laravel! Используйте -> для указания конкретны
💡 Совет по Laravel Легко обновляйте столбцы JSON с помощью синтаксиса стрелок Laravel! Используйте -> для указания конкретных ключей в ваших JSON-данных. Работает с MariaDB 10.3+, MySQL 5.7+ и PostgreSQL 9.5+ 👉 @PHPgx | #tips

✅️ GitHub теперь в Telegram! Подписывайтесь: @GitHub
✅️ GitHub теперь в Telegram! Подписывайтесь: @GitHub

Параметризованные запросы в PHP для безопасной работы с базами данных Что такое параметризованные запросы? Параметризованные запросы позволяют разделить код SQL-запроса и данные, которые передаются в базу. Это обеспечивает защиту от SQL-инъекций, так как данные, введенные пользователем, обрабатываются как текст, а не как часть SQL-кода. 1️⃣ Как это работает? Параметризованные запросы используют подготовленные выражения (prepared statements). Они выполняются в два этапа: 1. Запрос отправляется в базу данных для компиляции. 2. Переменные передаются и вставляются в компилированный запрос. 2️⃣ Пример использования с MySQLi
<?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();
?>
3️⃣ Пример использования с PDO
<?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();
}
?>
4️⃣ Преимущества параметризованных запросов 🔹Безопасность: защита от SQL-инъекций. 🔹Эффективность: запрос компилируется только один раз, независимо от количества выполняемых операций. 🔹Читаемость и структура: разделение SQL-кода и переменных делает код более понятным. 👉 @PHPgx | #заметки

Работа с файлами в PHP: основные операции PHP предоставляет мощные функции для работы с файлами, будь то чтение, запись или манипуляции с содержимым. Давайте разберем основные операции, которые часто встречаются в разработке 1️⃣ Открытие и закрытие файлов Для начала работы с файлом нужно его открыть с помощью fopen():
$file = fopen('example.txt', 'r'); // Открыть файл для чтения
if ($file) {
    echo "Файл открыт успешно!";
    fclose($file); // Закрытие файла
} else {
    echo "Не удалось открыть файл.";
}
Режимы открытия файлов: 🔹'r' — только для чтения 🔹'w' — для записи (перезаписывает файл) 🔹'a' — для записи (добавляет в конец файла) 🔹'x' — для создания файла (если файл существует, вызовет ошибку) 2️⃣ Чтение содержимого файла Для чтения содержимого файла можно использовать 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); // Массив строк из файла
3️⃣ Запись в файл Записать данные в файл можно с помощью 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));
4️⃣ Проверка существования файла Перед тем как работать с файлом, полезно проверить его наличие:
if (file_exists('example.txt')) {
    echo "Файл существует!";
} else {
    echo "Файл не найден.";
}
5️⃣ Удаление и переименование файлов Чтобы удалить файл, используйте unlink(), а для переименования — rename() 🔹Удаление файла:
if (unlink('example.txt')) {
    echo "Файл удален.";
} else {
    echo "Не удалось удалить файл.";
}
🔹Переименование файла:
if (rename('oldfile.txt', 'newfile.txt')) {
    echo "Файл переименован.";
} else {
    echo "Ошибка при переименовании.";
}
6️⃣ Манипуляции с путями и директориями 🔹Получение информации о файле:
$file_info = pathinfo('example.txt');
print_r($file_info); // Массив с деталями пути (basename, dirname, extension)
🔹Создание директории:
mkdir('new_directory');
🔹Проверка, является ли путь директорией:
if (is_dir('new_directory')) {
    echo "Это директория.";
}
Итог Работа с файлами в PHP — важная часть любого веб-приложения. С помощью встроенных функций можно эффективно читать, записывать, удалять и изменять файлы. Используйте их с осторожностью, особенно при работе с пользовательским вводом, чтобы избежать ошибок или атак. 👉 @PHPgx | #заметки

Начинать путь в мобильной разработке непросто даже тем, кто уже работает в IT. В своём канале Илья, android-разработчик с 10-
Начинать путь в мобильной разработке непросто даже тем, кто уже работает в IT. В своём канале Илья, android-разработчик с 10-летним стажем, даёт ценные советы о том, как быстрее получить минимальный набор знаний, чтобы устроиться на работу. Android-разработка на kotlin привлекает множеством вакансий и возможностью освоить за месяц язык, который пригодится даже в бэкенде. А процессы разработки сайтов и приложений во многом похожи. Подписывайтесь на канал Ильи и получите пошаговый план развития с нуля до Junior. Также в канале вас ждут лучшие практики, лайфхаки, советы по созданию портфолио и поиску работы.