本文实例讲述了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程序设计有所帮助。