Загрузка файлов на сервер в php

Загрузка файлов на сервер на php. Введение

В этой статье я хочу показать как можно быстро и просто реализовать загрузку файлов на сервер с помощью php с проверками файла на размер и на формат. Эта тема хоть и простая и очень распространенная, все же по ней тоже часто возникают вопросы у программистов новичков. Чтобы передать какие-либо данные из браузера на сервер необходимо на странице создать html-форму:

<form action="/form/index.php" method="POST" enctype="multipart/form-data">
	<input type="file" name="upload_file"><br> 
	<input type="submit" value="Загрузить"><br>
</form>

В которой будет указан путь к скрипту на сервере, куда будут отправлены данные, в данном случае это /form/index.php. Также указывается метод передачи данных — POST или GET. И необходимо указать тип передаваемых данных, чтобы передавать файлы, тип должен быть multipart/form-data. Когда сама форма готова, внутри нее следует создать input и типом file, в него пользователь сможет загрузить файл, для последующей отправки на сервер. Далее начинается самое интересное — получение и обработка данных на сервере. Все данные о файле будет храниться в суперглобальной переменной $_FILE. Поэтому первым делом на сервере необходимо проверить — существует эта переменная или нет. В случае существования, мы можем проверить размер файла, получить его имя, расширение и путь к нему, файл будет хранится во временных файлах.

Логика загрузки

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


Загрузите код из файла upload.php на GitHub. Мы рассмотрим важные части этого файла.

В файле upload.php мы проверили, действительно ли это валидный запрос POST.

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

  • : Временный путь, в который загружается файл, сохраняется в этой переменной.
  • : Фактическое имя файла сохраняется в этой переменной.
  • : Указывает размер загруженного файла в байтах.
  • : Содержит mime тип загруженного файла.
  • : Если во время загрузки файла была ошибка, эта переменная заполняется соответствующим сообщением об ошибке. В случае успешной загрузки файла она содержит значение 0, которое можно сравнить с помощью константы .

После проверки запроса POST мы проверяем, что загрузка файла прошла успешно.

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

Если загрузка файла прошла успешно, мы инициализируем несколько переменных с информацией о загруженном файле.

В приведенном выше коде мы также выяснили расширение загруженного файла и сохранили его в переменной .

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

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

Наконец, мы используем функцию для перемещения загруженного файла в определенное место по нашему выбору.

Функция принимает два аргумента. Первым аргументом является имя файла загруженного файла, а второй аргумент — путь назначения, в который вы хотите переместить файл.


Наконец, мы перенаправляем пользователя в файл index.php. Кроме того, мы устанавливаем соответствующее сообщение в переменной сессии, которое будет отображаться пользователям после перенаправления в файле index.php.

PHP Полная загрузка файла скрипта

Полный файл «upload.php» выглядит так:

<?php$target_dir = «uploads/»;$target_file = $target_dir . basename($_FILES);$uploadOk = 1;$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));// Проверьте, является ли файл изображения фактическим изображением или поддельным изображениемif(isset($_POST)) {    $check = getimagesize($_FILES);    if($check !== false) {        echo «Файл является изображением — » . $check . «.»;        $uploadOk = 1;    } else {        echo «Файл не является изображением.»;        $uploadOk = 0;    }}// Проверить, существует ли файлif (file_exists($target_file)) {    echo «Извините, файл уже существует.»;    $uploadOk = 0;} // Проверить размер файлаif ($_FILES > 500000) {    echo «Извините, ваш файл слишком большой.»;    $uploadOk = 0; }// Разрешить определенные форматы файловif($imageFileType != «jpg» && $imageFileType != «png» && $imageFileType != «jpeg»&& $imageFileType != «gif» ) {    echo «Извините, разрешено только файлы JPG, JPEG, PNG и GIF.»;    $uploadOk = 0;}// Проверьте, имеет ли $uploadOk значение 0 по ошибкеif ($uploadOk == 0) {    echo «Извините, ваш файл не был загружен.»;// если все в порядке, попробуйте загрузить файл} else {    if (move_uploaded_file($_FILES, $target_file)) {        echo «Файл «. basename( $_FILES). » был загружен.»;    } else {        echo «К сожалению, произошла ошибка при загрузке файла.»;    }}?>

Создание файла средствами PHP и последующей записью в файл.

Категория: Скрипты php Просмотров: 3839 Коментариев: Дата: 2017-01-17 Добавил: admin

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

Все было бы ничего, но в одной статье пришлось выводить «PHP» — код из базы, в результате получил игнорирование данного кода, т.е. не обработку данного скрипта, а простой вывод написанного кода. Тогда я понял, что все мои идеи и написанный код накрылись «медным тазом», но оказалось, программирование не имеет границ. Тогда мне пришла идея при выводе демо-страницы создавать динамически файл, а если он уже существует, то просто перезаписывать его новым содержимым. Таким образом, не накапливается куча файлов на сервере, а растет только размер базы данных.

Создается файл на PHP следующим образом:

PHP

//полученный результат после запроса в базу 
$data = "Ваш запрос в базу данных для получения кода демо-версии";
// открываем файл, если файл не существует,
     //делам попытку создать его
     $create_file = fopen("temp_file.php", "w");
     // записываем в файл текст
     fwrite($create_file, $data);
     // закрываем файл
     fclose($create_file);

Код выше создаст файл temp_file.php и запишет в него полученные из базы данные, уже хранящиеся в массиве $data . Но нужно помнить и быть аккуратным, т.к. если файл с таким именем уже существует, то все содержимое в нем будет (утеряно) перезаписано на новое.

В этом случае можно проверить существование файла например так:

PHP

// 
$data = "0123456789";

if ( !file_exists( " temp_file.php " ) ) 
{ // если файл НЕ существует то создадим его и запишем в него значение  $data
     $create_file = fopen ("temp_file.php ", "w");   
     fwrite($create_file, $data);   
     fclose($create_file);  
   } 
   else 
{ 
  echo 'Создать файл не удалось. Файл был создан раньше или возникла ошибка при создании файла.'; 
}

В функции fopen() после имени файла указывается параметр (флаг) «w» необходимый для указания режима работы с файлом. Существует 6 таких параметров для использования.

  • «r» – Файл открывается только для его чтения; указатель помещается в начало файла.
  • «r+» – Файл открывается для чтения и разрешает произвести запись в него; указатель помещается в начало файла.
  • «w» – Файл открывается для записи; указатель помещается в начало файла. Если файл не существует, делается попытка создать его.
  • «w+» – Файл открывается для чтения и разрешает произвести запись в него; указатель помещается в начало файла. Если файл не существует, делается попытка создать его.
  • «a» – Файл открывается только для записи; указатель помещается в конец файла. Если файл не существует, делается попытка создать его.
  • «a+» – Файл открывается для чтения и разрешает произвести запись в него; указатель помещается в конец файла. Если файл не существует, делается попытка создать его.

В этой же функции fopen() задается и директория, в которой нужно создать наш файл. В примере файл создастся в текущей директории (в корне проекта).

Вот некоторые правила описания пути к файлу.

  • temp_file.php – Файл расположен в текущей директории.
  • ./views/temp_file.php – Файл расположен в папке views, которая находящейся в текущей директории. Длина директории не ограничивается.
  • ../temp_file.php – Файл расположен в предыдущей директории. Каждый знак ../ расценивается как возврат в родительскую директорию.
  • ../views/temp_file.php – Файл расположен в папке views, которая лежит в предыдущей директории.

Например, чтобы создать файл в каталоге, который на 3 уровня выше текущей директории (считаем корень проекта) формируем такую структуру записи:

Пример:   ./application(папка1)/views(папка2)/demo_view(папка3)/temp_file_view.php 

Вот таким, достаточно, простым способом можно создать файл и заполнить его какой-либо информацией.

<<< Предыдущий материал Следующий материал >>>

‘) document.write(») } else document.write(message) function crossref(number) { var crossobj=document.all? eval(«document.all.neonlight»+number) : document.getElementById(«neonlight»+number) return crossobj } function neon() { //Change all letters to base color if (n==0) { for (m=0;m

  • Транслитерация средствами PHP.
  • Загрузка файла на сервер с помощью Фреймворка CodeIgniter
  • Вывод рекламы Adsense в середине статьи.
  • Скачать файл с сайта на CodeIgniter

Добавить комментарий:

Create The HTML Form

Next, create an HTML form that allow users to choose the image file they want to upload:

<!DOCTYPE html><html><body><form action=»upload.php» method=»post» enctype=»multipart/form-data»>  Select image to upload:  <input type=»file» name=»fileToUpload» id=»fileToUpload»>   <input type=»submit» value=»Upload Image» name=»submit»> </form></body></html>

Some rules to follow for the HTML form above:

  • Make sure that the form uses method=»post»
  • The form also needs the following attribute: enctype=»multipart/form-data». It specifies which content-type to use when submitting the form

Without the requirements above, the file upload will not work.

Other things to notice:

The type=»file» attribute of the tag shows the input field as a file-select control, with a «Browse» button next to the input control

The form above sends data to a file called «upload.php», which we will create next.

Создание скрипта загрузки файла PHP

Файл «upload. php» содержит код для загрузки файла:


<?php$target_dir = «uploads/»;$target_file = $target_dir . basename($_FILES);$uploadOk = 1;$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));// Check if image file is a actual image or fake imageif(isset($_POST)) {    $check = getimagesize($_FILES);    if($check !== false) {        echo «File is an image — » . $check . «.»;        $uploadOk = 1;    } else {        echo «File is not an image.»;        $uploadOk = 0;    }}?>

PHP скрипт объяснил:

  • $target_dir = «uploads/» — Указывает каталог, в который будет помещен файл
  • $target_file Указывает путь к загружаемому файлу
  • $uploadOk=1 еще не используется (будет использоваться позже)
  • $imageFileType содержит расширение файла (в нижнем регистре)
  • Next, Проверьте, является ли файл изображения реальным изображением или фальшивым изображением

Примечание: Вам нужно будет создать новый каталог под названием «закачки» в каталоге, где находится файл «upload.php». Загруженные файлы будут сохранены там.

Как это все работает вместе

Не забудьте создать каталог uploaded_files и сделать его доступным для записи пользователем web-server. Затем перейдите и запустите файл index.php, который должен отобразить форму загрузки файла, которая выглядит так:

Нажмите кнопку Browse, чтобы открыть диалоговое окно, которое позволяет вам выбрать файл с вашего компьютера. Выберите файл с одним из расширений, разрешенным в нашем скрипте, и нажмите кнопку Загрузить.

Это должно отправить форму, и если все будет хорошо, вы должны увидеть загруженный файл в каталоге uploaded_files. Вы также можете попробовать загрузить другие файлы с расширениями, которые не разрешены, и проверить, предотвращает ли наш скрипт такие загрузки.

Complete Upload File PHP Script

The complete «upload.php» file now looks like this:

<?php$target_dir = «uploads/»;$target_file = $target_dir . basename($_FILES);$uploadOk = 1;$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));// Check if image file is a actual image or fake imageif(isset($_POST)) {  $check = getimagesize($_FILES);  if($check !== false) {    echo «File is an image — » . $check . «.»;     $uploadOk = 1;  } else {    echo «File is not an image.»;     $uploadOk = 0;  }}// Check if file already existsif (file_exists($target_file)) {   echo «Sorry, file already exists.»;  $uploadOk = 0;} // Check file sizeif ($_FILES > 500000) {  echo «Sorry, your file is too large.»;  $uploadOk = 0; }// Allow certain file formatsif($imageFileType != «jpg» && $imageFileType != «png» && $imageFileType != «jpeg»&& $imageFileType != «gif» ) {  echo «Sorry, only JPG, JPEG, PNG & GIF files are allowed.»;  $uploadOk = 0;}// Check if $uploadOk is set to 0 by an errorif ($uploadOk == 0) {  echo «Sorry, your file was not uploaded.»;// if everything is ok, try to upload file} else {   if (move_uploaded_file($_FILES, $target_file)) {    echo «The file «. basename( $_FILES). » has been uploaded.»;   } else {    echo «Sorry, there was an error uploading your file.»;   }}?>

PHP Создание файла для загрузки скрипта

Файл «upload.php» содержит код для загрузки файла:

<?php$target_dir = «uploads/»;$target_file = $target_dir . basename($_FILES);$uploadOk = 1;$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));// Проверьте, является ли файл изображения фактическим изображением или поддельным изображениемif(isset($_POST)) {    $check = getimagesize($_FILES);    if($check !== false) {        echo «Файл является изображением — » . $check . «.»;        $uploadOk = 1;    } else {        echo «Файл не является изображением.»;        $uploadOk = 0;    }}?>

Объяснение скрипта PHP:

  • — указывает каталог, в который будет помещен файл
  • — указывает путь к загружаемому файлу
  • — еще не используется (будет использоваться позже)
  • — содержит расширение файла (в нижнем регистре)
  • Затем проверяется, является ли файл изображения, фактическим изображением или поддельным изображением

Примечание: Вам нужно будет создать новый каталог с именем каталога «uploads», где будет находиться загруженный файл «upload.php».

Table of Contents

  • basename — Returns trailing name component of path
  • chgrp — Changes file group
  • chmod — Changes file mode
  • chown — Changes file owner
  • clearstatcache — Clears file status cache
  • copy — Copies file
  • delete — See unlink or unset
  • dirname — Returns a parent directory’s path
  • disk_free_space — Returns available space on filesystem or disk partition
  • disk_total_space — Returns the total size of a filesystem or disk partition
  • diskfreespace — Alias of disk_free_space
  • fclose — Closes an open file pointer
  • feof — Tests for end-of-file on a file pointer
  • fflush — Flushes the output to a file
  • fgetc — Gets character from file pointer
  • fgetcsv — Gets line from file pointer and parse for CSV fields
  • fgets — Gets line from file pointer
  • fgetss — Gets line from file pointer and strip HTML tags
  • file_exists — Checks whether a file or directory exists
  • file_get_contents — Reads entire file into a string
  • file_put_contents — Write data to a file
  • file — Reads entire file into an array
  • fileatime — Gets last access time of file
  • filectime — Gets inode change time of file
  • filegroup — Gets file group
  • fileinode — Gets file inode
  • filemtime — Gets file modification time
  • fileowner — Gets file owner
  • fileperms — Gets file permissions
  • filesize — Gets file size
  • filetype — Gets file type
  • flock — Portable advisory file locking
  • fnmatch — Match filename against a pattern
  • fopen — Opens file or URL
  • fpassthru — Output all remaining data on a file pointer
  • fputcsv — Format line as CSV and write to file pointer
  • fputs — Alias of fwrite
  • fread — Binary-safe file read
  • fscanf — Parses input from a file according to a format
  • fseek — Seeks on a file pointer
  • fstat — Gets information about a file using an open file pointer
  • ftell — Returns the current position of the file read/write pointer
  • ftruncate — Truncates a file to a given length
  • fwrite — Binary-safe file write
  • glob — Find pathnames matching a pattern
  • is_dir — Tells whether the filename is a directory
  • is_executable — Tells whether the filename is executable
  • is_file — Tells whether the filename is a regular file
  • is_link — Tells whether the filename is a symbolic link
  • is_readable — Tells whether a file exists and is readable
  • is_uploaded_file — Tells whether the file was uploaded via HTTP POST
  • is_writable — Tells whether the filename is writable
  • is_writeable — Alias of is_writable
  • lchgrp — Changes group ownership of symlink
  • lchown — Changes user ownership of symlink
  • link — Create a hard link
  • linkinfo — Gets information about a link
  • lstat — Gives information about a file or symbolic link
  • mkdir — Makes directory
  • move_uploaded_file — Moves an uploaded file to a new location
  • parse_ini_file — Parse a configuration file
  • parse_ini_string — Parse a configuration string
  • pathinfo — Returns information about a file path
  • pclose — Closes process file pointer
  • popen — Opens process file pointer
  • readfile — Outputs a file
  • readlink — Returns the target of a symbolic link
  • realpath_cache_get — Get realpath cache entries
  • realpath_cache_size — Get realpath cache size
  • realpath — Returns canonicalized absolute pathname
  • rename — Renames a file or directory
  • rewind — Rewind the position of a file pointer
  • rmdir — Removes directory
  • set_file_buffer — Alias of stream_set_write_buffer
  • stat — Gives information about a file
  • symlink — Creates a symbolic link
  • tempnam — Create file with unique file name
  • tmpfile — Creates a temporary file
  • touch — Sets access and modification time of file
  • umask — Changes the current umask
  • unlink — Deletes a file

С этим читают