Несколько методов загрузки файлов в PHP: подробное руководство

Вот базовый код для загрузки файлов на PHP:

Метод 1: использование базовой HTML-формы и суперглобальной переменной $_FILES

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload File" name="submit">
</form>
<?php
if(isset($_POST["submit"])){
    $targetDir = "uploads/";
    $targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($targetFile,PATHINFO_EXTENSION));
    // Check if file already exists
    if (file_exists($targetFile)) {
        echo "File already exists.";
        $uploadOk = 0;
    }
// Check file size
    if ($_FILES["fileToUpload"]["size"] > 500000) {
        echo "File is too large.";
        $uploadOk = 0;
    }
// Allow only certain file formats
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) {
        echo "Only JPG, JPEG, PNG & GIF files are allowed.";
        $uploadOk = 0;
    }
// Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
        echo "File was not uploaded.";
    } else {
        // Move the file to the specified directory
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
            echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
        } else {
            echo "There was an error uploading the file.";
        }
    }
}
?>

Этот метод использует HTML-форму с полем типа файла ввода. Код PHP проверяет различные условия, такие как размер файла, формат файла и наличие файла, прежде чем перемещать его в указанный каталог.

Метод 2: использование библиотеки PHP – Symfony HttpFoundation (требуется установка внешней библиотеки)

<?php
require_once 'vendor/autoload.php';
use Symfony\Component\HttpFoundation\File\UploadedFile;
if(isset($_POST["submit"])){
    $uploadedFile = new UploadedFile($_FILES['fileToUpload']['tmp_name'], $_FILES['fileToUpload']['name']);
    // Specify the target directory
    $targetDir = 'uploads/';
    $targetFile = $targetDir . $uploadedFile->getClientOriginalName();
    // Move the file to the specified directory
    $uploadedFile->move($targetDir, $targetFile);
    echo 'The file ' . $uploadedFile->getClientOriginalName() . ' has been uploaded.';
}
?>

Этот метод использует библиотеку Symfony HttpFoundation для обработки загрузки файлов. Класс UploadedFile используется для создания объекта, представляющего загруженный файл, а затем вызывается метод move() для перемещения файла в нужный каталог.