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():
Читайте также: