|
 |
copy (PHP 3, PHP 4, PHP 5) copy -- Копирует файл Описаниеbool copy ( string source, string dest )
Создает копию файла, чье имя передано в параметре source,
в файле с именем dest. Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Пример 1. Пример использования функции copy()
<?php
$file = 'example.txt';
$newfile = 'example.txt.bak';
if (!copy($file, $newfile)) {
echo "не удалось скопировать $file...\n";
}
?>
|
|
Если вы хотите переместить файл, воспользуйтесь функцией rename().
Замечание:
Начиная с PHP версии 4.3.0, оба параметра, source и
dest, могут быть URL'ами, если были
включены "упаковщики fopen". За более подробной информацией
обратитесь к описанию функции fopen().
Если параметр dest является URL, выполнение
функции может завершиться ошибкой, если упаковщик не поддерживает
перезапись существующих файлов.
Внимание |
Если файл-назначение существует, он будет перезаписан.
|
Замечание:
Замечание отностильно совместимости Windows: Если вы копируете пустой файл,
copy() вернёт FALSE, но файл будет нормально
скопирован.
См.также описание функций move_uploaded_file(),
rename(), а также главу руководства
Обработка загрузки файлов.
copy
emielm at hotmail dot com
08-Jul-2006 12:49
I have been puzzling for hours with the copy() function. I got a "no such file or directory" error message all the time (for the source file). In the end my mistake was that there were some spaces at the end of de source filename...
So, if you get file not found errors and you are sure that the file does exists, use the trim() function to get rid of the spaces.
cooper at asu dot ntu-kpi dot kiev dot ua
09-Mar-2006 04:32
It take me a long time to find out what the problem is when i've got an error on copy(). It DOESN'T create any directories. It only copies to existing path. So create directories before. Hope i'll help,
bobbfwed at comcast dot net
02-Feb-2006 11:06
I have programmed a really nice program that remotely lets you manage files as if you have direct access to them (http://sourceforge.net/projects/filemanage/). I have a bunch of really handy functions to do just about anything to files or directories.
I know there are others like it, but here is the function I made for this program to copy directories; it will likely need tweaking to work as a standalone script, since it relies of variables set by my program (eg: loc1 -- which dynamically changes in my program):
<?PHP
define('loc1', 'C:/Program Files/Apache Group/Apache/htdocs', true);
function dircpy($source, $dest, $overwrite = false){
if($handle = opendir(loc1 . $source)){ while(false !== ($file = readdir($handle))){ if($file != '.' && $file != '..'){
$path = $source . '/' . $file;
if(is_file(loc1 . $path)){
if(!is_file(loc1 . $dest . '/' . $file) || $overwrite)
if(!@copy(loc1 . $path, loc1 . $dest . '/' . $file)){
echo '<font color="red">File ('.$path.') could not be copied, likely a permissions problem.</font>';
}
} elseif(is_dir(loc1 . $path)){
if(!is_dir(loc1 . $dest . '/' . $file))
mkdir(loc1 . $dest . '/' . $file); dircpy($path, $dest . '/' . $file, $overwrite); }
}
}
closedir($handle);
}
} ?>
This new function will be in 0.9.7 (the current release of File Manage) which has just been released 2/2/06.
Hope this helps some people.
makarenkoa at ukrpost dot net
26-Jul-2005 04:58
A function that copies contents of source directory to destination directory and sets up file modes.
It may be handy to install the whole site on hosting.
<?php
function copydirr($fromDir,$toDir,$chmod=0757,$verbose=false)
{
$errors=array();
$messages=array();
if (!is_writable($toDir))
$errors[]='target '.$toDir.' is not writable';
if (!is_dir($toDir))
$errors[]='target '.$toDir.' is not a directory';
if (!is_dir($fromDir))
$errors[]='source '.$fromDir.' is not a directory';
if (!empty($errors))
{
if ($verbose)
foreach($errors as $err)
echo '<strong>Error</strong>: '.$err.'<br />';
return false;
}
$exceptions=array('.','..');
$handle=opendir($fromDir);
while (false!==($item=readdir($handle)))
if (!in_array($item,$exceptions))
{
$from=str_replace('//','/',$fromDir.'/'.$item);
$to=str_replace('//','/',$toDir.'/'.$item);
if (is_file($from))
{
if (@copy($from,$to))
{
chmod($to,$chmod);
touch($to,filemtime($from)); $messages[]='File copied from '.$from.' to '.$to;
}
else
$errors[]='cannot copy file from '.$from.' to '.$to;
}
if (is_dir($from))
{
if (@mkdir($to))
{
chmod($to,$chmod);
$messages[]='Directory created: '.$to;
}
else
$errors[]='cannot create directory '.$to;
copydirr($from,$to,$chmod,$verbose);
}
}
closedir($handle);
if ($verbose)
{
foreach($errors as $err)
echo '<strong>Error</strong>: '.$err.'<br />';
foreach($messages as $msg)
echo $msg.'<br />';
}
return true;
}
?>
Andrzej Nadziejko (andrzej at vao . pl)
27-Jun-2005 12:52
These functions are to copy and remove big directories:
/*
source files are in source directory
*/
function SetupFolder($dir_name)
{
mkdir($dir_name,'0777');
$folder = opendir('source');
while($file = readdir($folder))
{
if ($file == '.' || $file == '..') {
continue;
}
if(is_dir('source/'.$file))
{
mkdir($dir_name.'/'.$file,0777);
CopyFiles('source/'.$file,$dir_name.'/'.$file);
}
else
{
copy('source/'.$file,$dir_name.'/'.$file);
}
}
closedir($folder);
return 1;
}
//copy many files
function CopyFiles($source,$dest)
{
$folder = opendir($source);
while($file = readdir($folder))
{
if ($file == '.' || $file == '..') {
continue;
}
if(is_dir($source.'/'.$file))
{
mkdir($dest.'/'.$file,0777);
CopySourceFiles($source.'/'.$file,$dest.'/'.$file);
}
else
{
copy($source.'/'.$file,$dest.'/'.$file);
}
}
closedir($folder);
return 1;
}
//remove file, directories, subdirectories
function RemoveFiles($source)
{
$folder = opendir($source);
while($file = readdir($folder))
{
if ($file == '.' || $file == '..') {
continue;
}
if(is_dir($source.'/'.$file))
{
RemoveFiles($source.'/'.$file);
}
else
{
unlink($source.'/'.$file);
}
}
closedir($folder);
rmdir($source);
return 1;
}
info at sameprecision dot org
28-Jan-2005 03:54
When using copy on win32 (don't know about anywhere else), copy sets the 'last modified time' of the the new copy to the current time instead of that of the source (win32 copy preserves last modified time). If you are tracking backups by last modified time, use:
<?php
copy($src, $dest); touch($dest, filemtime($src));
?>
20-Jan-2005 04:34
Heres a quick function I wrote to backup whole websites.
I haven't actually tested it out yet. I will later on =P
<?
function backup($extension) {
$counter = 0;
foreach(glob(* . $extension) as $file) {
if ($extension{0} != .) {
$extension = . . $extension;
}
$file2 = ./backup/ . $file;
$counter++;
copy($file, $file2);
}
if ($counter == 0) {
return false;
} else {
return true;
}
}
$extension_array = array(.jpg, .gif, .png, .bmp);
foreach($extension_array as $key => $value) {
backup($extension);
}
?>
simonr_at_orangutan_dot_co_dot_uk
03-Sep-2004 01:54
Having spent hours tacking down a copy() error: Permission denied , (and duly worrying about chmod on winXP) , its worth pointing out that the 'destination' needs to contain the actual file name ! --- NOT just the path to the folder you wish to copy into.......
DOH !
hope this saves somebody hours of fruitless debugging
kadnan at yahoo dot com
29-Aug-2004 10:30
you can also try xcopy command by using Shell to move/copy files/folders from one place to another
here is the code:
<?php
exec('xcopy c:\\myfolder d:\\myfolder /e/i', $a, $a1);
?>
by executing this command, it will move folder along with all contents to destination.
-adnan
| |