Php переместить файл в другую папку

Обновлено: 06.07.2024

Функции move_uploaded_file () и rename () используются для перемещения файла в другую папку на сервере. В этом случае у нас уже есть файл, загруженный во временный каталог сервера, откуда новый каталог назначается методом. Файл temp полностью перемещен в новое место. Move_uploaded_file () обеспечивает безопасность этой операции, позволяя перемещать только те файлы, загруженные через PHP. Таким образом, для перемещения уже загруженного файла мы используем метод rename ().

Синтаксис:

Пример: этот пример представляет собой код, который загружает файл в каталог с именами Uploads, а затем меняет свой путь на другой каталог с именем New.

Upload.html

Move a file into a different

folder on the server

< form action = "upfile.php" method = "post"

< input type = "file" name = "file" id = "file" >

< input type = "submit" name = "submit" value = "Submit" >

upfile.php


// Целевой каталог загрузки - это загрузки

$target_file = $target_dir . basename ( $_FILES [ "file" ][ "name" ]);

if (isset( $_POST [ "submit" ]))

// Проверяем, существует ли файл

if ( file_exists ( $target_file ))

echo "file already exists.<br>" ;

// Проверяем, установлен ли $ uOk на 0

echo "Your file was not uploaded.<br>" ;

// если uOk = 1, попробуйте загрузить файл

// $ _FILES ["file"] ["tmp_name"] подразумевает путь к хранилищу

// в каталоге tmp, который перемещается в загрузки

// каталог с использованием метода move_uploaded_file ()

if (move_uploaded_file( $_FILES [ "file" ][ "tmp_name" ],

echo "The file " . basename ( $_FILES [ "file" ][ "name" ])

. " has been uploaded.<br>" ;

// Перемещение файла в новый каталог

if (rename( $target_file , "New/" .

basename ( $_FILES [ "file" ][ "name" ])))

echo "File moving operation success<br>" ;

echo "File moving operation failed..<br>" ;

echo "Sorry, there was an error uploading your file.<br>" ;

Примечание. Каталоги Uploads и New уже существуют один раз, поэтому вам придется создавать их, если они недоступны на сервере.


Код работает:

Код выполняется с использованием метода переименования (переход на новый)

Функция rename позволяет переименовывать файлы. Первым параметром указываем старое имя файла, вторым - новое имя файла:

Пусть в корне вашего сайта лежит файл old.txt . Переименуйте его на new.txt .

Перемещение

Функция rename позволяет также перемещать файлы. Для этого вторым параметром функции нужно указать новый путь к файлу. Давайте для примера перенесем наш файл в папку dir , одновременно переименовав его на new.txt :

Можно сделать только перемещение, а сам файл не переименовывать:

Пусть в корне вашего сайта лежит файл file.txt . Пусть также в корне вашего сайта лежит папка dir . Переместите файл в эту папку.

Пусть в корне вашего сайта лежит папка dir1 , а в ней файл file.txt . Пусть также в корне вашего сайта лежит папка dir2 . Переместите файл в эту папку.

Копирование

Функция copy позволяет копировать файл. Первым параметром она принимает путь к файлу, который хотим копировать, вторым - новый путь файла, куда хотим положить копию. Мы можем сделать копию и положить ее рядом, или положить ее в другую папку. Сделаем просто копию:

Давайте для примера сделаем копию файла, разместив ее в папке с исходным файлом:

А теперь давайте поместим нашу копию в папку dir :

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

Удаление

Для удаления файлов используется функция unlink . Параметром она принимает путь к удаляемому файлу:

Пусть в корне вашего сайта лежат файлы 1.txt , 2.txt и 3.txt . Вручную сделайте массив с именами этих файлов. Переберите его циклом и удалите все эти файлы.

Размер файла

Функция filesize позволяет находить размеры файла в байтах. Пример:

Размер в байтах легко можно перевести в килобайты:

А теперь давайте переведем в мегабайты:

Пусть в корне вашего сайта лежит файл. Узнайте его размер, выведите на экран.

Модифицируйте предыдущую задачу так, чтобы размер файла выводился в килобайтах.

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

Положите в корень вашего сайта какой-нибудь фильм размером более гигабайта. Узнайте размер этого файла и переведите его в гигабайты.

Проверка существования

Функция file_exists проверяет существует ли файл, путь к которому передан параметром. Пример:

Как правило, эта функция используется для того, чтобы проверить наличие файла перед выполнением операции над ним. Например, так:

С помощью функции file_get_contents() можно получить содержимое файла:

Также мы можем получить html-код какой-либо страницы в интернете:

Но работает это далеко не для всех сайтов, у многих есть защита от такого примитивного парсинга.

Чтение файла: file()

Функция file() позволяет получить содержимое файла в виде массива. Разделителем элементов является символ переноса строки.

Создадим в корне сайта файл data.txt со следующим содержимым:

Теперь запустим скрипт index.php со следующим кодом:

При запуске этого скрипта мы получим в браузере:

Заметили, что у первых двух строк длина 7 символов вместо пяти? Это из-за того, что каждая строка содержит в конце символы переноса строки.

Чаще всего они нам не нужны, поэтому их можно убрать, передав вторым параметром константу FILE_IGNORE_NEW_LINES :

Теперь у всех строк будет по 5 символов.

Если нам необходимо получить только заполненные строки в файле и пропустить пустые, можно передать вторым параметром константу FILE_SKIP_EMPTY_LINES :

Разумеется, мы можем передать сразу две константы:

Создание файла и запись в файл: file_put_contents()

Функция file_put_contents() позволяет создать файл и заполнить его данными.

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

Если файла не существует - он будет создан. Если существует - данные в файле будут перезаписаны.

Чтобы не перезаписывать данные, а добавить их в конец файла, нужно передать третьим параметром константу FILE_APPEND :

Также вторым параметром можно передать массив:

Но этот вариант не очень удобен, поскольку все элементы массива запишутся подряд, без каких-либо разделителей. Чтобы их добавить, можно использовать функцию implode:

Создание папки или структуры папок

Создать папку можно с помощью функции mkdir() (make directory):

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

Кроме этого, второй параметр может игнорироваться при заданной umask (пользовательская маска (user mask), которая нужна для определения конечных прав доступа). В этом случае принудительно сменить права можно функцией chmod() :

Также мы можем создать структуру папок рекурсивно, для этого нужно третьим параметром передать true :

Но в этом случае права доступа будут заданы только для конечной папки. Для изменения прав у каждой из папок придётся указывать права вручную:

Права доступа - это отдельная объёмная тема, поэтому сейчас мы её пока рассматривать не будем.

Проверка существования файла или папки

Проверить существование папки или файла можно с помощью функции file_exists() :

Если вы хотите проверить существование только папки или только файла, для этого есть специальные функции is_dir() и is_file() :

Проверка прав доступа

Функции is_readable() и is_writable() проверяют, есть ли у пользователя, от имени которого запущен PHP, права на чтение и запись файла или папки:

Копирование, перенос и удаление файла

Для удаления файлов используется функция unlink() :

Чтобы скопировать файл, используем функцию copy() :

Для переименования и переноса файла в другую папку используется функция rename() :

Работа с файлами с помощью fopen()

Функций file() , file_get_contents() и file_put_contents() достаточно для решения большинства задач, связанных с управлением файлами.

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

Итак, открыть (или создать и открыть) файл можно с помощью функции fopen() :

Функция fopen() возвращает так называемый лескриптор. Это ссылка, указатель на файл, его мы будем передавать в другие функции. Кстати, тип данных этого дескриптора - resource .

Первым параметром мы передаём путь к файлу, вторым - модификатор доступа к файлу. Ниже перечислены наиболее популярные модификаторы:

  • r - открытие для чтения, указатель переходит в начало файла.
  • r+ - открытие для чтения и записи, указатель переходит в начало файла.
  • w - открытие для записи, указатель переходит в начало файла. Если файла нет - создаётся, если есть - очищается от данных.
  • w+ - открытие для чтения и записи, в остальном аналогичен w .
  • a - открытие для записи, указатель переходит в конец файла. Если файла нет - создаётся.
  • a+ - открытие для чтения и записи, в остальном аналогичен a .
  • x - создание и открытие для записи, указатель переходит в начало файла. Если файл существует - PHP покажет ошибку.
  • x+ - создание и открытие для чтения и записи, в остальном аналогичен x .

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

Для записи данных в файл существует функция fwrite() . Давайте попробуем создать файл и записать в него какие-нибудь данные:

Заметьте, из-за модификатора w при каждом запуске скрипта данные в файле стираются и добавляются заново. Если модификатор заменить на a , данные будут не перезаписываться, а добавляться в конец файла.

Для построчного чтения файла используется функция fgets() :

При каждом запуске fgets получает следующую строку и возвращает её в $line . Вторым параметром передаётся максимальная длина строки. Это означает, что если строка слишком длинная, она будет обрезана.

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

Если с полным путём возникнут проблемы, то можно воспользоваться адресом корневой папки сайта, который находится в переменной $_SERVER['DOCUMENT_ROOT'].

Тогда путь к файлу можно прописать как:
$_SERVER['DOCUMENT_ROOT'] . '/mouse.txt'

Запись файла

С помощью функции file_put_contents можно записывать данные в файл. Приведём пример её использования: В результате выполнения этого примера, в файл 'mouse.txt', который находится в корневой папке сайта, будет записана строка 'Тише, мыши, кот на крыше'. Если файла не существует, то он будет создан. Если файл уже существовал, то его содержимое будет перезаписано.

  • FILE_APPEND - заставляет функцию записывать передаваемые данные в конец файла. Используется часто для создания файлов с логами (историей каких-либо действий)
  • LOCK_EX - блокирует файл во время записи так, что никто не может прочитать или изменить его
  • FILE_USE_INCLUDE_PATH - ищет файл в подключаемых дерикториях. Этот флаг используется крайне редко

Проверка существования файла

Функция file_exists делает проверку существования файла. Принимает единственный параметр - полный путь к файлу. Часто используется внутри условия if( ), потому что выдает true, если файл существует, и false, если файл не существует. Потому что существует

Удаление файла

Для удаления файлов в PHP используется функция unlink. Ей, как и все предыдущим функциям, передаётся абсолютный путь к файлу в системе. Приведём пример удаления файла с её помощью, но перед удалением сделаем проверку существует ли вообще файл, который собираемся удалить: Из-за особенностей работы UNIX систем, при удалении файла функцией unlink файл будет существовать до тех пор, пока существует хотя бы одна символическая или жёсткая ссылка не него. Функция unlink возвращает true в случае успешного завершения удаления.

Переименование и перемещение файла

Функция rename в PHP умеет переименовывать файл или директорию. На вход она принимает два параметра: путь к файлу, который надо переименовать, и путь к файлу, который получится в результате переименовывания. Необходимо задавать полный путь: В результате выполнения этой функции файл 'mouse.txt', который находится в корневой папке сайта, будет переименован в '/cat.txt'. Если файл '/cat.txt' уже существовал. то он обязательно будет перезаписан.

Как можно догадаться, эта функция умеет не только переименовывать файлы и папки, но и перемещать их в другие директори. Для этого в новом названии надо указать новый путь. К примеру: При выполнении такого кода файл 'mouse.txt' будет перемещён папку '/home/'. Функция rename возвращает true в случае успешного завершения переименования.

Копирование файла

Копирование файла в PHP выполняется с помощью функции copy. Которая похожа на функцию переименовывания. Она тоже принимает два параметра. Приведём пример использования: В результате выполнения этой функции файл 'mouse1.txt', который находится в корневой папке сайта, будет скопирован в '/mouse2.txt'. Если '/mouse2.txt' уже существовал, то он будет перезаписан. Функция copy возвращает true в случае успешного завершения копирования.

Определение размера файла

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


Сортировка массивов по возрастанию и убыванию в PHP

Звезды блога ТОП 3

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

Функции манипуляции файлами:

copy($source, $destination) - копирует файл с именем $source в файл с именем $destination.В случае успешного копирования функция возвращает TRUE,в противном случае возвращает FALSE.

unlink($filename) - удаляет файл с именем $filename.В случае успешного удаления функция возвращает TRUE,в противном случае возвращает FALSE.

rename($oldname, $newname) - переименовывает файл с именем $oldname,назначая ему новое имя $newname.В случае успешного переименования функция возвращает TRUE,в противном случае возвращает FALSE.

Ниже приводится пример использования функции copy(),которая копирует /myfolder/myfile.txt в текущий каталог.Если на момент копирования файл myfile.txt существовал в текущем каталоге,он будет перезаписан без предупреждений.

Использование функции copy():

Если файл необходимо переместить,то его можно удалить из точки копирования при помощи функции unlink().

Перемещение файла:

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

Использование функции rename():

Функции copy() и rename() могут копировать не только локальные файлы,но и сетевые.

Копирование файла из сети:

Загруженный файл из сети не будет содержать исходных PHP-кодов,лишь HTML-представление(даже если скрипт и копируемый файл находятся на одном сервере).

Это связано с тем,что обращение идет к Web-серверу,а не к файловой системе.По этой же причине при помощи функции copy() или любой другой функции невозможно загрузить файл на сервер.

Для загрузки файлов на сервер используется HTML-форма и элемент управления типа file.Сервер помещет загруженный файл во временный каталог(путь к файлу во временном каталоге можно получить при помощи элемента $_FILES['filename']['tmp_name']),из которого скрипт может его скопировать в любое другое место.Для проверки факта загрузки файла на сервер и перемещения его предназначены специальные функции,описание которых представлено ниже:

if_upload_file($filename) - возвращает TRUE,если файл был загружен на сервер,и FALSE в противном случае.В качестве аргумента функция принимает элемент массива $_FILES['filename']['tmp_name'],содержащий загруженный файл во временном каталоге.

move_uploaded_file($filename, $destination) - перемещает файл из временного каталога в каталог назначения.В качестве первого аргумента $filename зачастую используется элемент $_FILES['filename']['tmp_name'],второй аргумент может быть произвольным.Если необходимо сохранить исходное имя файла,можно воспользоваться элементом $_FILES['filename']['name'].В отличие от функции copy() функция move_uploaded_file() оперирует лишь загруженными файлами.

Использование функции is_uploaded_file() и move_uploaded_file():

Читайте также: