note 91256 added to function.copy
| From: | SinaSalek at osu1 dot php dot net | Date: | Tue, 02 Jun 2009 12:02:19 +0000 |
| Subject: | note 91256 added to function.copy | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-156280@lists.php.net to get a copy of this message | ||
Thanks for all the comments, i wrote this function for fully supporting file and directory copy.
As you may have noticed there are feature that didn't have time to implement , but if you have
time to implement them or even add more cool features, please notify me as well :). you can find me
here http://sina.salek.ws/en/contact
PS : It was very useful for me, hope you find it useful as well.
<?php
/**
* Copy file or folder from source to destination, it can do
* recursive copy as well and is very smart
* It recursively creates the dest file or directory path if there weren't exists
* Situtaions :
* - Src:/home/test/file.txt ,Dst:/home/test/b ,Result:/home/test/b -> If source was file copy
file.txt name with b as name to destination
* - Src:/home/test/file.txt ,Dst:/home/test/b/ ,Result:/home/test/b/file.txt -> If source was
file Creates b directory if does not exsits and copy file.txt into it
* - Src:/home/test ,Dst:/home/ ,Result:/home/test/** -> If source was directory copy test
directory and all of its content into dest
* - Src:/home/test/ ,Dst:/home/ ,Result:/home/**-> if source was direcotry copy its content to
dest
* - Src:/home/test ,Dst:/home/test2 ,Result:/home/test2/** -> if source was directoy copy it
and its content to dest with test2 as name
* - Src:/home/test/ ,Dst:/home/test2 ,Result:->/home/test2/** if source was directoy copy it
and its content to dest with test2 as name
* @todo
* - Should have rollback technique so it can undo the copy when it wasn't successful
* - Auto destination technique should be possible to turn off
* - Supporting callback function
* - May prevent some issues on shared enviroments : http://us3.php.net/umask
* @param $source //file or folder
* @param $dest ///file or folder
* @param $options //folderPermission,filePermission
* @return boolean
*/
function smartCopy($source, $dest,
$options=array('folderPermission'=>0755,'filePermission'=>0755))
{
$result=false;
if (is_file($source)) {
if ($dest[strlen($dest)-1]=='/') {
if (!file_exists($dest)) {
cmfcDirectory::makeAll($dest,$options['folderPermission'],true);
}
$__dest=$dest."/".basename($source);
} else {
$__dest=$dest;
}
$result=copy($source, $__dest);
chmod($__dest,$options['filePermission']);
} elseif(is_dir($source)) {
if ($dest[strlen($dest)-1]=='/') {
if ($source[strlen($source)-1]=='/') {
//Copy only contents
} else {
//Change parent itself and its contents
$dest=$dest.basename($source);
@mkdir($dest);
chmod($dest,$options['filePermission']);
}
} else {
if ($source[strlen($source)-1]=='/') {
//Copy parent directory with new name and all its content
@mkdir($dest,$options['folderPermission']);
chmod($dest,$options['filePermission']);
} else {
//Copy parent directory with new name and all its content
@mkdir($dest,$options['folderPermission']);
chmod($dest,$options['filePermission']);
}
}
$dirHandle=opendir($source);
while($file=readdir($dirHandle))
{
if($file!="." && $file!="..")
{
if(!is_dir($dirsource."/".$file)) {
$__dest=$dest."/".$file;
} else {
$__dest=$dest."/".$file;
}
//echo "$source/$file ||| $__dest<br />";
$result=smartCopy($source."/".$file, $__dest, $options);
}
}
closedir($dirHandle);
} else {
$result=false;
}
return $result;
}
?>
----
Server IP: 79.132.192.3
Probable Submitter: 84.47.225.66
----
Manual Page -- http://www.php.net/manual/en/function.copy.php
Edit -- https://master.php.net/note/edit/91256
Del: integrated -- https://master.php.net/note/delete/91256/integrated
Del: useless -- https://master.php.net/note/delete/91256/useless
Del: bad code -- https://master.php.net/note/delete/91256/bad+code
Del: spam -- https://master.php.net/note/delete/91256/spam
Del: non-english -- https://master.php.net/note/delete/91256/non-english
Del: in docs -- https://master.php.net/note/delete/91256/in+docs
Del: other reasons-- https://master.php.net/note/delete/91256
Reject -- https://master.php.net/note/reject/91256
Search -- https://master.php.net/manage/user-notes.php