PHP: перемещение и копирование файлов из одной папки в другую
В этом руководстве вы узнаете, как переместить файл в другую папку на сервере с помощью PHP, а также как скопировать файл в другую папку на сервере с помощью PHP?
PHP: переместить файл из одной папки в другую
Если вам нужно переместить файл из одной папки в другую, используя PHP-код, вы можете использовать функцию rename() в php. Она предоставляет функцию переименования для перемещения файла из одного места в другое.
Прежде всего, вам нужно посмотреть синтаксис функции rename().
Синтаксис:
Объяснение параметров функции rename():
$source: вам нужно указать путь к файлу, который вы хотите переименовать.
$destination: вам нужно указать путь к файлу для источника назначения.
$context: это необязательно, он определяет ресурс контекста, созданный с помощью функции stream_context_create().
Пример:
PHP: скопировать файл из одной папки в другую
Если вам нужно скопировать файл из одной папки в другую, используя PHP-код, вы можете использовать функцию copy() в php. Она предоставляет функцию копирования для перемещения файла из одного места в другое.
Прежде всего, вам нужно посмотреть синтаксис функции copy().
Синтаксис:
Объяснение параметров функции copy():
$source: вам нужно указать путь к файлу, который вы хотите скопировать.
$destination: вам нужно указать путь к файлу для источника назначения.
$context: это необязательно, он определяет ресурс контекста, созданный с помощью функции stream_context_create().
Php как скопировать файл из одной папки в другую
(PHP 4, PHP 5, PHP 7, PHP 8)
copy — Копирует файл
Описание
Копирует файл from в файл с именем to .
Если вы хотите переименовать файл, используйте функцию rename() .
Список параметров
Путь к исходному файлу.
Путь к целевому файлу. Если to является URL, то операция копирования может завершиться ошибкой, если обёртка URL не поддерживает перезаписывание существующих файлов.
Если целевой файл уже существует, то он будет перезаписан.
Корректный ресурс контекста, созданный функцией stream_context_create() .
Возвращаемые значения
Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.
Примеры
Пример #1 Пример использования функции copy()
<?php
$file = ‘example.txt’ ;
$newfile = ‘example.txt.bak’ ;
if (! copy ( $file , $newfile )) <
echo «не удалось скопировать $file . \n» ;
>
?>
Смотрите также
- move_uploaded_file() — Перемещает загруженный файл в новое место
- rename() — Переименовывает файл или директорию
- Раздел руководства "Загрузка файлов"
User Contributed Notes 24 notes
On Windows, php-7.4.19-Win32-vc15-x64 — copy() corrupted a 6GB zip file. Our only recourse was to write:
function file_win_copy( $src, $dst ) <
shell_exec( ‘COPY «‘.$src.'» «‘.$dst.'»‘);
return file_exists($dest);
>
Don’t forget; you can use copy on remote files, rather than doing messy fopen stuff. e.g.
<?php
if(!@ copy ( ‘http://someserver.com/somefile.zip’ , ‘./somefile.zip’ ))
<
$errors = error_get_last ();
echo «COPY ERROR: » . $errors [ ‘type’ ];
echo «<br />\n» . $errors [ ‘message’ ];
> else <
echo «File copied from remote!» ;
>
?>
Here is a simple script that I use for removing and copying non-empty directories. Very useful when you are not sure what is the type of a file.
I am using these for managing folders and zip archives for my website plugins.
// removes files and non-empty directories
function rrmdir ( $dir ) <
if ( is_dir ( $dir )) <
$files = scandir ( $dir );
foreach ( $files as $file )
if ( $file != «.» && $file != «..» ) rrmdir ( » $dir / $file » );
rmdir ( $dir );
>
else if ( file_exists ( $dir )) unlink ( $dir );
>
// copies files and non-empty directories
function rcopy ( $src , $dst ) <
if ( file_exists ( $dst )) rrmdir ( $dst );
if ( is_dir ( $src )) <
mkdir ( $dst );
$files = scandir ( $src );
foreach ( $files as $file )
if ( $file != «.» && $file != «..» ) rcopy ( » $src / $file » , » $dst / $file » );
>
else if ( file_exists ( $src )) copy ( $src , $dst );
>
?>
Cheers!
A nice simple trick if you need to make sure the folder exists first:
$srcfile = ‘C:\File\Whatever\Path\Joe.txt’ ;
$dstfile = ‘G:\Shared\Reports\Joe.txt’ ;
mkdir ( dirname ( $dstfile ), 0777 , true );
copy ( $srcfile , $dstfile );
Below a code snippet for downloading a file from a web server to a local file.
It demonstrates useful customizations of the request (such as setting a User-Agent and Referrer, often required by web sites), and how to download only files if the copy on the web site is newer than the local copy.
It further demonstrates the processing of response headers (if set by server) to determine the timestamp and file name. The file type is checked because some servers return a 200 OK return code with a textual «not found» page, instead of a proper 404 return code.
<?php
// $fURI: URL to a file located on a web server
// $target_file: Path to a local file
if ( file_exists ( $target_file ) ) <
$ifmodhdr = ‘If-Modified-Since: ‘ . date ( «r» , filemtime ( $target_file ) ). «\r\n» ;
>
else <
$ifmodhdr = » ;
>
// set request header for GET with referrer for modified files, that follows redirects
$arrRequestHeaders = array(
‘http’ =>array(
‘method’ => ‘GET’ ,
‘protocol_version’ => 1.1 ,
‘follow_location’ => 1 ,
‘header’ => «User-Agent: Anamera-Feed/1.0\r\n» .
«Referer: $source \r\n» .
$ifmodhdr
)
);
$rc = copy ( $fURI , $target_file , stream_context_create ( $arrRequestHeaders ) );
// HTTP request completed, preserve system error, if any
if( $rc ) <
if ( fclose ( $rc ) ) <
unset( $err );
>
else <
$err = error_get_last ();
>
>
else <
$err = error_get_last ();
>
// Parse HTTP Response Headers for HTTP Status, as well filename, type, date information
// Need to start from rear, to get last set of headers after possible sets of redirection headers
if ( $http_response_header ) <
for ( $i = sizeof ( $http_response_header ) — 1 ; $i >= 0 ; $i — ) <
if ( preg_match ( ‘@^http/\S+ (\S<3,>) (.+)$@i’ , $http_response_header [ $i ], $http_status ) > 0 ) <
// HTTP Status header means we have reached beginning of response headers for last request
break;
>
elseif ( preg_match ( ‘@^(\S+):\s*(.+)\s*$@’ , $http_response_header [ $i ], $arrHeader ) > 0 ) <
switch ( $arrHeader [ 1 ] ) <
case ‘Last-Modified’ :
if ( !isset( $http_content_modtime ) ) <
$http_content_modtime = strtotime ( $arrHeader [ 2 ] );
>
break;
case ‘Content-Type’ :
if ( !isset( $http_content_image_type ) ) <
if ( preg_match ( ‘@^image/(\w+)@ims’ , $arrHeader [ 2 ], $arrTokens ) > 0 ) <
if ( in_array ( strtolower ( $arrTokens [ 1 ]), $arrValidTypes )) <
$http_content_image_type = $arrTokens [ 1 ];
break;
>
>
throw new Exception ( «Error accessing file $fURI ; invalid content type: $arrHeader [ 2 ] » , 2 );
>
break;
case ‘Content-Disposition’ :
if ( !isset( $http_content_filename ) && preg_match ( ‘@filename\\s*=\\s*(?|»([^»]+)»|([\\S]+));?@ims’ , $arrHeader [ 2 ], $arrTokens ) > 0 ) <
$http_content_filename = basename ( $arrTokens [ 1 ]);
>
break;
>
>
>
>
if ( $http_status ) <
// Make sure we have good HTTP Status
switch ( $http_status [ 1 ] ) <
case ‘200’ :
// SUCCESS: HTTP Status is «200 OK»
break;
case ‘304’ :
throw new Exception ( «Remote file not newer: $fURI » , $http_status [ 1 ] );
break;
case ‘404’ :
throw new Exception ( «Remote file not found: $fURI » , $http_status [ 1 ] );
break;
default:
throw new Exception ( «HTTP Error, $http_status [ 2 ] , accessing $fURI » , $http_status [ 1 ] );
break;
>
>
elseif ( $err ) <
// Protocol / Communication error
throw new Exception ( $err [ ‘message’ ] /*.»; Remote file: $fURI»*/ , $err [ ‘type’ ] );
>
else <
// No HTTP status and no error
throw new customException ( «Unknown HTTP response accessing $fURI : $http_response_header [ 0 ] » , — 1 );
>
?>
Notes:
1. Currently copy() does NOT appropriately handle the 304 response code. Instead of NOT performing a copy (possibly setting the RC), it will overwrite the target file with an zero length file.
2. There may be a problem accessing a list of remote files when HTTP 1.1 protocol is used. If you experience time-out errors, try the default 1.0 protocol version.
copy — Копирует файл
Если вы хотите переместить файл, используйте функцию rename() .
Список параметров
Путь к исходному файлу.
Путь к целевому файлу. Если dest является URL, то операция копирования может завершиться ошибкой, если обертка URL не поддерживает перезаписывание существующих файлов.
Если целевой файл уже существует, то он будет перезаписан.
Корректный ресурс контекста, созданный функцией stream_context_create() .
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
5.3.0 | Добавлена поддержка контекста. |
4.3.0 | Оба параметра source и dest теперь могут быть URL, если включены "обертки fopen". Подробнее смотрите функцию fopen() . |
Примеры
Пример #1 Пример использования функции copy()
<?php
$file = ‘example.txt’ ;
$newfile = ‘example.txt.bak’ ;
if (! copy ( $file , $newfile )) <
echo «не удалось скопировать $file . \n» ;
>
?>
Копирование, переименование и перемещение файлов в PHP
В статье продолжается описание способов работы с файлами в PHP и применение различных функций для управления ими. Информацию по созданию и записи файлов можно найти в статье «Создание, открытие, чтение, запись, удаление и проверка наличия файла в PHP». Здесь рассматривается работа с уже существующими файлами.
Копирование файла
Для копирования файла применяется функция copy. В ней должны быть заданы директория к исходному файлу и путь к новому создаваемому файлу. Путь можно задавать абсолютным адресом, то есть с указанием всех каталогов от корня. Можно так же задавать относительный путь.
Если файл скопирован, функция вернет значение True. Если копирование не выполнено, то будет возвращено значение False.
Если файл с заданным именем в директории уже есть, старый файл будет заменен новым с тем же именем. Поэтому, при копировании, стоит проверять, не существует ли файл в новой директории. Такую проверку выполняет функция file_exists.
Переименование и перемещение файла
Переименование и перемещение файла можно выполнить одной функцией rename.
Для переименования в параметрах функции указывается имя исходного файла, а вторым параметром, задается новое имя.
При удачном выполнении функции, возвращается результат True, в противном случае False.
Для перемещения файла, задается новый путь к файлу:
Понятно, что при необходимости, и перемещение и переименование файла можно выполнить одновременно. Для этого достаточно в новом пути задать новый каталог и новое имя файла.