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