Как загрузить файл из формы и сохранить его в папке с именем "img"?

Каким образом можно извлечь файл из формы и сохранить его в папку с названием "img"?
  • 24 сентября 2024 г. 12:13
Ответы на вопрос 1
Чтобы загрузить файл из формы и сохранить его в папке с именем "img" на сервере, вам нужно использовать HTML-форму для загрузки файла и язык серверного программирования, такой как PHP, для обработки загрузки. Вот пример того, как это можно сделать.

### Шаг 1: Создаем HTML-форму

Создайте файл с именем `upload.html` и добавьте следующий код:

```html
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Загрузка изображения</title>
</head>
<body>
    <h2>Форма для загрузки изображения</h2>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <label for="file">Выберите файл для загрузки:</label>
        <input type="file" name="file" id="file" required>
        <br><br>
        <input type="submit" value="Загрузить">
    </form>
</body>
</html>
```

### Шаг 2: Обрабатываем загруженный файл на сервере

Создайте файл с именем `upload.php` и добавьте следующий код:

```php
<?php
// Папка для сохранения загруженных файлов
$target_dir = "img/";

// Создаем папку, если она не существует
if (!is_dir($target_dir)) {
    mkdir($target_dir, 0755, true);
}

// Получаем информацию о загружаемом файле
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// Проверяем, является ли файл изображением
if (isset($_POST["submit"])) {
    $check = getimagesize($_FILES["file"]["tmp_name"]);
    if ($check !== false) {
        echo "Файл является изображением - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "Файл не является изображением.";
        $uploadOk = 0;
    }
}

// Проверяем, существует ли файл
if (file_exists($target_file)) {
    echo "Извините, файл уже существует.";
    $uploadOk = 0;
}

// Ограничение по размеру файла (например, 5 МБ)
if ($_FILES["file"]["size"] > 5000000) {
    echo "Извините, файл слишком велик.";
    $uploadOk = 0;
}

// Разрешенные форматы файлов
if (!in_array($imageFileType, ['jpg', 'png', 'jpeg', 'gif'])) {
    echo "Извините, только JPG, JPEG, PNG и GIF файлы разрешены.";
    $uploadOk = 0;
}

// Если $uploadOk равен 0, значит, произошла ошибка, в противном случае загружаем файл
if ($uploadOk == 0) {
    echo "Извините, файл не был загружен.";
} else {
    if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
        echo "Файл ". htmlspecialchars(basename($_FILES["file"]["name"])) . " был загружен.";
    } else {
        echo "Произошла ошибка при загрузке файла.";
    }
}
?>
```

### Объяснение кода

1. **HTML-форма**: Создается форма для загрузки файла с методом POST и атрибутом `enctype='multipart/form-data'`, который необходим для загрузки файлов.

2. **PHP-скрипт**: 
   - Определяет директорию для сохранения загруженных файлов (`img/`).
   - Проверяет, существует ли директория, и создает её, если нет.
   - Проверяет, является ли загружаемый файл изображением и не превышает ли он допустимый размер.
   - Проверяет, существует ли файл с таким же именем на сервере.
   - Если проверки пройдены, файл загружается в указанную директорию.

### Запуск

1. Разместите оба файла (`upload.html` и `upload.php`) на вашем сервере.
2. Откройте `upload.html` в браузере и выберите изображение для загрузки.
3. Нажмите кнопку "Загрузить" и убедитесь, что файл успешно загружается в папку `img`. 

Не забудьте проверить настройки вашего сервера и убедитесь, что у вас есть права на запись в папку `img`.
Похожие вопросы