Лучшие методы загрузки файлов с помощью PHP и MySQL

В веб-разработке включение загрузки файлов является распространенным требованием. При работе с PHP и MySQL у вас есть несколько способов беспрепятственной загрузки файлов. В этой статье мы рассмотрим различные методы и предоставим примеры кода, которые помогут вам интегрировать загрузку файлов в ваши приложения PHP и MySQL.

Метод 1: прямая ссылка на файл
Самый простой метод – предоставить прямую ссылку для скачивания файла. Вот пример фрагмента кода:

<?php
$file_path = '/path/to/file.pdf';
$file_name = 'file.pdf';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $file_name . '"');
readfile($file_path);
?>

Метод 2: потоковая передача файлов
Потоковая передача файлов может быть полезна при больших загрузках или когда вы хотите добавить дополнительные меры безопасности. Вот пример использования функции fpassthru:

<?php
$file_path = '/path/to/file.pdf';
$file_name = 'file.pdf';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $file_name . '"');
header('Content-Length: ' . filesize($file_path));
$handle = fopen($file_path, 'rb');
fpassthru($handle);
fclose($handle);
?>

Метод 3: Извлечение из базы данных
Если вы храните данные файлов в базе данных MySQL, вы можете извлекать и загружать файлы с помощью запросов. Вот пример:

<?php
$file_id = 1;
// Connect to MySQL database
$query = "SELECT file_name, file_data FROM files WHERE id = $file_id";
$result = mysqli_query($connection, $query);
if ($result && mysqli_num_rows($result) > 0) {
    $row = mysqli_fetch_assoc($result);
    $file_name = $row['file_name'];
    $file_data = $row['file_data'];
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . $file_name . '"');
    echo $file_data; // Output the file data
}
mysqli_close($connection);
?>

Метод 4: сжатие файлов
Если вам нужно предложить для загрузки несколько файлов, вы можете на лету сжать их в ZIP-файл и предоставить ссылку для скачивания. Вот пример использования класса ZipArchive:

<?php
$zip = new ZipArchive();
$zip_name = 'files.zip';
if ($zip->open($zip_name, ZipArchive::CREATE) === true) {
    $file_paths = [
        '/path/to/file1.pdf',
        '/path/to/file2.pdf',
        '/path/to/file3.pdf'
    ];
    foreach ($file_paths as $path) {
        $file_name = basename($path);
        $zip->addFile($path, $file_name);
    }
    $zip->close();
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . $zip_name . '"');
    header('Content-Length: ' . filesize($zip_name));
    readfile($zip_name);
}
?>

В этой статье мы рассмотрели различные методы реализации загрузки файлов с помощью PHP и MySQL. Охватываемые методы включают прямые ссылки на файлы, потоковую передачу файлов, извлечение из базы данных и сжатие файлов. Понимая эти методы и используя предоставленные примеры кода, вы сможете улучшить свои веб-приложения с помощью надежных функций загрузки файлов.