WordPress как на ладони
wordpress jino

Как в PHP залить файл из поля «type=file» в определенную директорию (является субдиректорией от той, где лежит файл с кодом)?

Есть html форма

<form method="POST">
<input type="file" name="miny_file">
<input type="submit">
</form>

Как мне залить файл из поля miny_file в определенную директорию? (Она является субдиректорией от той, где лежит файл с кодом).

0
Гость 2 года назад
  • 0
    Kama4697

    Во-первых

    В форме нужно указать тип кодирования данных как enctype="multipart/form-data". Это чтобы форма не только POST данные передавала но и FILES.

    ``
    <form enctype="multipart/form-data" method="POST" action="">
    <!-- MAX_FILE_SIZE должно быть до type="file" -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000">
    <input type="file" name="miny_file">

    <input type="submit" value="Загрузить">
    </form>

    > Скрытое поле MAX_FILE_SIZE (значение необходимо указывать в байтах) должно предшествовать полю для выбора файла, и его значение является максимально допустимым размером принимаемого файла в PHP. Рекомендуется всегда использовать эту переменную, так как она предотвращает тревожное ожидание пользователей при передаче огромных файлов, только для того, чтобы узнать, что файл слишком большой и передача фактически не состоялась. Помните, обойти это ограничение на стороне браузера достаточно просто, следовательно, вы не должны полагаться на то, что все файлы большего размера будут блокированы при помощи этой возможности. 
    
    #### Далее
    
    Мы не указали `action=""`, а значит примем запрос на той же странице, что и html код формы. Запрос будет содержать глобальный массив `$_FILES`, который содержит всю информацию о загруженных файлах.
    
    ``
    $miny_file = $_FILES['miny_file'];
    
    // Оригинальное имя файла на компьютере клиента.
    $miny_file['name']
    
    // Mime-тип файла, в случае, если браузер предоставил такую информацию.
    // Пример: "image/gif". Этот mime-тип не проверяется в PHP,
    // так что не полагайтесь на его значение без проверки.
    $miny_file['type']
    
    // Размер в байтах принятого файла.
    $miny_file['size']
    
    // Временное имя, с которым принятый файл был сохранен на сервере.
    $miny_file['tmp_name']
    
    // Код ошибки, которая может возникнуть при загрузке файла.
    $miny_file['error']

    По умолчанию принятые файлы сохраняются на сервере в стандартной временной папке до тех пор, пока не будет задана другая директория при помощи директивы upload_tmp_dir конфигурационного файла php.ini.

    # Пример

    Следующий пример принимает и обрабатывает загруженный при помощи формы файл.

    ``
    // папка назначения
    $upload_dir = __DIR__ .'/subfolder/';
    $upload_file = $uploaddir . basename( $_FILES['userfile']['name'] );

    // перемещаем файл из временной директории
    if ( move_uploaded_file( $_FILES['userfile']['tmp_name'], $uploadfile ) ) {
    echo "Файл корректен и был успешно загружен.n";
    }
    else {
    echo "Возможная атака с помощью файловой загрузки!n";
    }

    echo 'Отладочная информация:';
    echo '<pre>'. print_r( $_FILES, 1 ) .'</pre>';

    > PHP-скрипт, принимающий загруженный файл, должен реализовывать логику, необходимую для определения дальнейших действий над принятым файлом. Например, вы можете проверить переменную $_FILES['userfile']['size'], чтобы отсечь слишком большие или слишком маленькие файлы. Также вы можете использовать переменную $_FILES['userfile']['type'] для исключения файлов, которые не удовлетворяют критерию касательно типа файла, однако, принимайте во внимание, что это поле полностью контролируется клиентом, используйте его только в качестве первой из серии проверок. Также вы можете использовать $_FILES['userfile']['error'] и коды ошибок при реализации вашей логики. Независимо от того, какую модель поведения вы выбрали, вы должны удалить файл из временной папки или переместить его в другую директорию.
    
    > В случае, если при отправке формы файл выбран не был, PHP установит переменную $_FILES['userfile']['size'] значением 0, а переменную $_FILES['userfile']['tmp_name'] - пустой строкой. none.
    
    > По окончанию работы скрипта, в случае, если принятый файл не был переименован или перемещен, он будет автоматически удален из временной папки.
    
    #### # Пример загрузки массива файлов
    
    Форма:
    ``
    <form action="" method="post" enctype="multipart/form-data">
    	<input type="file" name="pictures[]">
    	<input type="file" name="pictures[]">
    	<input type="file" name="pictures[]">
    
    	<input type="submit" value="Загрузить">
    </form>

    Обрабатываем:
    ``
    foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
    $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
    $name = $_FILES["pictures"]["name"][$key];
    move_uploaded_file($tmp_name, "data/$name");
    }
    }

    		
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.