免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3638 | 回复: 11

[文件] 送给大家一个php写的xcopy....希望大家喜欢... [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2005-06-28 15:45 |显示全部楼层
送给大家一个php写的xcopy....

  1. <?php
  2. //xcopy: dir2dir, file2file, file2dir, for windows... by zyme
  3. function xcopy($source, $dest)
  4. {
  5.         if ( !file_exists($source) )
  6.         {
  7.                 return "error: $source is not exist!";
  8.         }
  9.         if ( is_dir($source) )
  10.         {
  11.                 if ( file_exists($dest) AND !is_dir($dest) )
  12.                 {
  13.                         return "error: $dest is not a dir!";
  14.                 }
  15.                 if ( !file_exists($dest) )
  16.                 {
  17.                         mkdir($dest);
  18.                 }
  19.                 $od = opendir($source);
  20.                 while ( $one = readdir($od) )
  21.                 {
  22.                         if ( $one=="." OR $one==".." )
  23.                         {
  24.                                 continue;
  25.                         }
  26.                         $result = xcopy($source."\\".$one, $dest."\\".$one, $oncemore=true);
  27.                         if ( $result !== true )
  28.                         {
  29.                                 return $result;
  30.                         }
  31.                 }
  32.                 closedir($od);
  33.         }
  34.         else
  35.         {
  36.                 if ( file_exists($dest) AND is_dir($dest) )
  37.                 {
  38.                         if ( func_num_args()>;2 AND $oncemore===true )
  39.                         {
  40.                                 return "error: $dest is a dir!";
  41.                         }
  42.                         $result = xcopy($source, $dest."\\".basename($source), $oncemore=true);
  43.                         if ( $result !== true )
  44.                         {
  45.                                 return $result;
  46.                         }
  47.                 }
  48.                 else
  49.                 {
  50.                         copy($source, $dest); touch($dest, filemtime($source));
  51.                 }
  52.         }
  53.         return true;
  54. }
  55. ?>;
复制代码

[ 本帖最后由 HonestQiao 于 2006-6-7 21:55 编辑 ]

论坛徽章:
0
发表于 2005-06-28 15:49 |显示全部楼层

送给大家一个php写的xcopy....希望大家喜欢...

我好喜欢
但是请教搂猪

$result = xcopy($source."\\".$one, $dest."\\".$one, $oncemore=true);
这段里面,$oncemore这第三个bool的值的参数怎么来的?
还有递归调用自己是怎么回事?

谢谢大大

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2005-06-28 15:51 |显示全部楼层

送给大家一个php写的xcopy....希望大家喜欢...

大家还可以扩展些功能,比如像console下的打印copy的细节呀,加开关吧...
UNIX下就不用它了,用unix命令更好.....

论坛徽章:
0
发表于 2005-06-28 16:07 |显示全部楼层

送给大家一个php写的xcopy....希望大家喜欢...

Xcopy
复制文件和目录,包括子目录。

xcopy source [destination] [/w]

[/c] [/v] [/q] [/f] [/l] [/d[]] [/s [/e]] [/t] [/k] [/r] [/h] [/a|/m] [/n] [/exclude] [/y | /-y] [/z]

参数

source

指定要复制的文件的位置和名称。该参数必须包含驱动器或路径。

destination

指定要复制的文件的目标。该参数可以包含驱动器盘符和冒号、目录名、文件名或者组合。

/w

在开始复制文件之前将显示以下消息并等待您的响应:

Press any key to begin copying file(s)

/p

提示您确认是否要创建每个目标文件。

/c

忽略错误。

/v

在写入目标文件时验证每个文件,以确保目标文件与源文件完全相同。因为该功能是 Windows 2000 操作系统固有的,所以将忽略该开关。接受该开关只是为了与以前版本的 MS-DOS 兼容性。

/q

禁止显示 xcopy 消息。

/f

复制时显示源文件名和目标文件名。

/l

不复制文件,仅显示(列出)要复制的文件。

/d[]

只复制那些在指定日期或指定日期之后更改过的源文件。如果 date 值丢失,xcopy 将复制所有比现存 destination 文件时间新的 source 文件。该选项使您可以只更新更改过的文件。如果指定了日期,请使用连字符 (-) 作为分隔符而不是使用正斜杠 (/),以便日期不会解释为另一个参数。

/u

只从 source 复制(更新) destination 中已有的文件。

/i

如果 source 是目录或包含通配符,并且不存在 destination,xcopy 将假定 destination 指定目录名并创建新目录,然后将所有指定的文件复制到新目录中。默认情况下,xcopy 将提示您指定 destination 是文件还是目录。

/s

复制非空的目录和子目录。如果省略此开关,xcopy 将在一个目录中工作。

/e

复制所有子目录,包括空目录。与 /s 和 /t 开关一起使用。

/t

只复制子目录结构(树),而不复制文件。要复制空目录,必须包含 /e 开关。

/k

复制文件,如果源文件具有只读属性,则在目标文件中保留该属性。默认情况下,删除只读属性。

/r

复制时跳过只读文件。

/h

复制具有隐藏和系统文件属性的文件。xcopy 命令在默认情况下不复制隐藏文件或系统文件。

/a

只复制那些具有存档文件属性设置的源文件。该开关不修改源文件的存档文件属性。有关如何设置存档文件属性的信息,请查看 attrib 命令。

/m

复制具有存档文件属性设置的源文件。与 /a 开关不同,/m 开关关闭源中指定的文件的存档文件属性。有关如何设置存档文件属性的信息,请单击“相关主题”列表 [JG1] 中的 attrib 。

/n

使用 NTFS 短文件或目录名复制。当将文件或路径从 NTFS 卷复制到 FAT 卷或者当目标卷需要 FAT 文件系统命名约定 (8.3) 时,必需该开关。目标文件系统可以是 FAT 或 NTFS。

/exclude:filename

排除对指定文件中列出的文件进行复制操作。排除的文件可以拥有排除样式列表(每行一个,不支持通配符)。如果文件中某个排除样式与主题文件路径的任何部分匹配,将不复制该文件。

/y

禁止提示您确认要覆盖现存目标文件。

/y 开关可以在 COPYCMD 环境变量中预置。该开关可以由命令行上的 /-y 替代。默认为在覆盖时提示,除非 copy 命令从批处理脚本内部执行。

要附加文件,请指定单个目标文件,多个源文件(使用通配符或文件 1 + 文件 2 + 文件 3 格式)。

/-y

提示您确认是否要替代现存的目标文件。

/z

以可重启模式中通过网络复制。如果在复制阶段连接丢失(例如,如果服务器脱机切断连接),将在重新建立连接后继续复制。使用该命令开关还会显示每个文件完成的复制操作的百分比。

论坛徽章:
0
发表于 2005-06-28 16:21 |显示全部楼层

送给大家一个php写的xcopy....希望大家喜欢...

<?php
/**
* Copy a file, or recursively copy a folder and its contents
*
* @author      Aidan Lister <aidan@php.net>;
* @version     1.0.1
* @param       string   $source    Source path
* @param       string   $dest      Destination path
* @return      bool     Returns TRUE on success, FALSE on failure
*/
function copyr($source, $dest)
{
    // Simple copy for a file
    if (is_file($source)) {
        return copy($source, $dest);
    }

    // Make destination directory
    if (!is_dir($dest)) {
        mkdir($dest);
    }

    // Loop through the folder
    $dir = dir($source);
    while (false !== $entry = $dir->;read()) {
        // Skip pointers
        if ($entry == '.' || $entry == '..') {
            continue;
        }

        // Deep copy directories
        if ($dest !== "$source/$entry" {
            copyr("$source/$entry", "$dest/$entry";
        }
    }

    // Clean up
    $dir->;close();
    return true;
}

?>;

论坛徽章:
0
发表于 2005-06-28 16:22 |显示全部楼层

送给大家一个php写的xcopy....希望大家喜欢...

php自己人写的,url在此:
http://aidan.dotgeek.org/lib/?file=function.copyr.php

论坛徽章:
0
发表于 2005-06-28 17:01 |显示全部楼层

送给大家一个php写的xcopy....希望大家喜欢...

shhit,这个人的代码有问题
如果file folder的name和file的name一样的时候
就会判断出错
所以说还是楼猪的代码好啊。
虽然看不懂bool值

论坛徽章:
0
发表于 2005-06-28 17:04 |显示全部楼层

送给大家一个php写的xcopy....希望大家喜欢...

here is another version, with recursion check and status inheritance:
function deep_copy($source,$dest){
if(!file_exists($source))return FALSE;
if(!is_dir($source))return copy($source,$dest);
else{
if(strpos(realpath($dest),realpath($source))===0)return FALSE;
if(!(file_exists($dest)&&is_dir($dest))&&!mkdir($dest))return FALSE;
$b=TRUE;
if ($handle = opendir($source)) {
while (false !== ($file = readdir($handle))){
if($file!="."&&$file!=".."$b=$b&&deep_copy("$source/$file","$dest/$file";
}
closedir($handle);
}
else return FALSE;
return $b;
}
}

论坛徽章:
0
发表于 2005-07-03 14:12 |显示全部楼层

送给大家一个php写的xcopy....希望大家喜欢...

用楼主写的我PHP直接执行是执行了,但是拷贝有问题! 里面一层文件夹里的文件没拷进去! 用reffo推荐的deep_copy就成功了, 楼主还是检查检查函数吧.......

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2006-06-07 10:36 |显示全部楼层
我写的xcopy能用的,安全的,注意从论坛上copy出来的代码,要把“大于符号 加 分号”换成“大于符号”,这是论坛的BUG吧...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP