Содержание
- 1 Загрузка файлов на сервер на php. Введение
- 2 Логика загрузки
- 3 PHP Полная загрузка файла скрипта
- 4 Создание файла средствами PHP и последующей записью в файл.
- 5 Create The HTML Form
- 6 Создание скрипта загрузки файла PHP
- 7 Как это все работает вместе
- 8 Complete Upload File PHP Script
- 9 PHP Создание файла для загрузки скрипта
- 10 Table of Contents
Загрузка файлов на сервер на 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
С этим читают