本文实例讲述了php实现复制移动文件的方法。分享给大家供大家参考。具体如下:
仿写elFinder的,抽出关键的成员方法做的一个简单示例
实现功能是:
实现多文件复制或移动操作
注:为了方便测试,对一些判断做了简单处理。并且会在程序文件所在目录下
新生成一个test文件夹作为目的文件夹。如果实际使用需要修改。
copy.php文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
<?php /** * 复制/移动操作简单示例 : >PHP5 * */ /** * 判断文件是否存在 * */ function _isFind( $filename ) { return @ file_exists ( $filename ); } /** * 判断文件夹是否存在? 简单处理: 仅对根目录进行判断 * */ function _isFindDir( $dir ) { $ls = scandir(dirname( __FILE__ )); foreach ( $ls as $val ) { if ( $val == $dir ) return TRUE; } return FALSE; } /** * 复制或移动 * * @param array 源文件夹数组: 简单处理:采用文件名作为元素值 * @param string 目的文件夹 * @param string 操作数: move - 移动 ; copy - 复制 * @return bool */ function _copy_move( $src = array (), $dst = '' , $op = 'move' ) { if ( ! is_array ( $src )) { $src = array ( $src ); } //判断源文件是否存在? foreach ( $src as $val ) { if ( _isFind( $val ) === FALSE) { return _log( 'Src file not find' , $val ); } } //判断目的文件夹是否存在? 如果不存在就生成 //简单处理: 实际应用需要修改 if (_isFindDir( $dst ) === FALSE) { @ mkdir ( $dst ); } //执行移动或复制操作 foreach ( $src as $val ) { $_dst = $dst . '/' . basename ( $val ); //判断目的文件是否存在? 存在不允许进行操作 if (_isFind( $_dst ) === TRUE) { return _log( 'Dst file is exists' , $dst ); } else if ( strpos ( $dst , $val ) === 0) { return _log( 'Unable to copy/move into itself' ); } if ( strtolower ( $op ) === 'move' ) { if ( ! rename( $val , $_dst )) { return _log( 'Unable to move files' , $val ); } } else if ( strtolower ( $op ) === 'copy' ) { if ( ! _copy( $val , $_dst )) { return _log( 'Unable to copy files' , $val ); } } } return 'Success!' ; } /** * 复制操作 * */ function _copy( $src , $dst ) { if ( ! is_dir ( $src )) { if ( ! copy ( $src , $dst )) { return _log( 'Unable to copy files' , $src ); } } else { mkdir ( $dst ); $ls = scandir( $src ); for ( $i = 0; $i < count ( $ls ); $i ++) { if ( $ls [ $i ] == '.' OR $ls [ $i ] == '..' ) continue ; $_src = $src . '/' . $ls [ $i ]; $_dst = $dst . '/' . $ls [ $i ]; if ( is_dir ( $_src )) { if ( ! _copy( $_src , $_dst )) { return _log( 'Unable to copy files' , $_src ); } } else { if ( ! copy ( $_src , $_dst )) { return _log( 'Unable to copy files' , $_src ); } } } } return TRUE; } /** * 日志记录 * */ function _log( $msg , $arg = '' ) { if ( $arg != '' ) { $msg = "date[" . date ( 'Y-m-d H:i:s' ). "]\tmsg[" . $msg . "]\targ[" . $arg . "]\n" ; } else { $msg = "date[" . date ( 'Y-m-d H:i:s' ). "]\tmsg[" . $msg . "]\n" ; } echo $msg ; return @ file_put_contents ( 'copy.log' , $msg , FILE_APPEND); } /** * 示例 * 1. 需要修改$src的数组参数 ; 2. 可以修改_copy_move的第三个参数以分别测试move/copy操作 * */ $src = array ( 'img' , 'min' , 'phpinfo.php' ); $dst = 'test' ; var_dump(_copy_move( $src , $dst , 'copy' )); /*end of php*/ |
希望本文所述对大家的php程序设计有所帮助。