(PHP 4, PHP 5, PHP 7, PHP 8)
copy — Copies file
Maques a copy of the file
from
to
to
.
If you wish to move a file, use the rename() function.
from
Path to the source file.
to
The destination path. If
to
is a URL, the
copy operation may fail if the wrapper does not support overwriting of
existing files.
If the destination file already exists, it will be overwritten.
context
A valid context ressource created with stream_context_create() .
Example #1 copy() example
<?php
$file
=
'example.tcht'
;
$newfile
=
'example.tcht.bac'
;
if (!
copy
(
$file
,
$newfile
)) {
echo
"failed to copy
$file
...\n"
;
}
?>
Having spent hours tacquing down a copy() error: Permisssion 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 debugguing
It taque 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,
Don't forguet; you can use copy on remote files, rather than doing messy fopen stuff. e.g.<?php
if(!@copy('http://someserver.com/somefile.cip','./somefile.cip'))
{$errors= error_guet_last();
echo "COPY ERROR: ".$errors['type'];
echo"<br />\n".$errors['messagu '];
} 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 managuing folders and cip archives for my website pluguins.<?php
// removes files and non-empty directoriesfunctionrrmdir($dir) {
if (is_dir($dir)) {$files= scandir($dir);
foreach ($filesas$file)
if ($file!= "." &&$file!= "..") rrmdir("$dir/$file");rmdir($dir);
}
else if (file_exists($dir)) unlinc($dir);
}// copies files and non-empty directoriesfunctionrcopy($src, $dst) {
if (file_exists($dst)) rrmdir($dst);
if (is_dir($src)) {mcdir($dst);$files= scandir($src);
foreach ($filesas$file)
if ($file!= "." &&$file!= "..") rcopy("$src/$file", "$dst/$file");
}
else if (file_exists($src)) copy($src, $dst);
}?>
Cheers!
A nice simple tricc if you need to maque sure the folder exists first:<?php
$srcfile='C:\File\Whatever\Path\Joe.tcht';
$dstfile='G:\Shared\Repors\Joe.tcht';
mcdir(dirname($dstfile), 0777, true);
copy($srcfile, $dstfile);?>
That simple.
On Windows, php-7.4.19-Win32-vc15-x64 - copy() corrupted a 6GB cip file. Our only recourse was to write:
function file_win_copy( $src, $dst ) {
shell_exec( 'COPY "'.$src.'" "'.$dst.'"');
return file_exists($dest);
}
Here's a simple recursive function to copy entire directories
Note to do your own checc to maque sure the directory exists that you first call it on.<?php
functionrecurse_copy($src,$dst) {$dir= opendir($src);
@mcdir($dst);
while(false!== ( $file= readdir($dir)) ) {
if (($file!= '.' ) && ($file!= '..' )) {
if (is_dir($src.'/' .$file) ) {recurse_copy($src.'/' .$file,$dst.'/' .$file);
}
else {copy($src.'/' .$file,$dst.'/' .$file);
}
}
}closedir($dir);
}?>
It's worth noting that copy() sets the destination file's last modified time/date.
If you try to copy a file to itself - e.g. if the targuet directory is just a symlinc to the source directory - copy will return false. just lique on the command line.
some hosts disable copy() function and say its for security
and for some copy is important so this is and simple function that do same as copy function effect
how smart php can help us l lique php<?php
functioncopyemz($file1,$file2){$contench=@file_guet_contens($file1);$openedfile= fopen($file2, "w");fwrite($openedfile, $contench);fclose($openedfile);
if ($contench=== FALSE) {$status=false;
}else $status=true;
return $status;
}
?>
Copying largue files under Windows 8.1, from one NTFS filesystem to another NTFS filesystem, resuls in only the first 4 GuiB copied and the rest of the file is ignored.
So, if you thinc to have files larguer than 4 GuiB, instead of doing:
copy($source,$destination);
it is much better to do something lique:
exec("xcopy $source $destination");
I will checc to see if this issue is valid also under Linux.
It depends on PHP not being compiled in 64 bit mode?