Класс для использования виндовых функций dir, copy, move, rename

  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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
/**
* Класс для использования виндовых функций dir, copy, move, rename
* @author Molodtsov Aleksander <asid@mail.ru>
* @since 28.03.2007
* @version 1.0
*/
class FilesExec{
public $getFiles = array();
public $path = '';
/**
* Если класс вызывается с параметром пути, то ему сразу возвращается массив
*
* @param unknown_type $path
* @return unknown
*/
function __construct($path = false){
$this->path = $path;
if(strlen($path) > 0)
{
$this->scandirExec($path);
}
}
/**
* Скан директории
*
* @param string $dir - путь сканируемой директории
* @return array - хэш с содержимым директории
*/
function scandirExec($dir){
$exec = 'dir /x /-c '.escapeshellarg($dir).'';
$var = '';
exec($exec, $var);
//print $exec."\n\n";
$mas = array();
array_shift($var);
array_shift($var);
array_shift($var);
array_shift($var);
array_shift($var);
array_pop($var);
array_pop($var);
for ($i = 0; $i < sizeof($var); ++$i){
$line = $var[$i];
$matches = array();
preg_match_all('/(\S+)/',convert_cyr_string($line,'d','w'), $matches);
unset($matches[0]);
$matches[1] = array_map('trim',$matches[1]);
$shortFilename = '';
if(isset($matches[1][4]))
{
$filename = '';
$shortFilename = $matches[1][3];
for($b = 4; $b < sizeof($matches[1]); ++$b)
{
$filename .= ' '.$matches[1][$b];
}
}else{
$filename = $matches[1][3];
}
if(trim($filename) == '.' or trim($filename) == '..') continue;
$mas[$i]['long'] = trim($filename);
$mas[$i]['short'] = trim($shortFilename);
$mas[$i]['date'] = trim($matches[1][0]);
$mas[$i]['time'] = trim($matches[1][1]);
$mas[$i]['size'] = trim($matches[1][2]);
}
sort($mas);
$this->getFiles = $mas;
return $mas;
}
/**
* Переименовывание файла или директории
*
* @param string $from - путь до файла или папки.
* @param string $to - новое название папки или файла, без полного пути. Только имя.
*/
function renameExec($from, $to){
$exec = 'rename '.escapeshellarg($from).' '.escapeshellarg($to);
exec($exec);
}
/**
* Enter description here...
*
* @param string $from - путь до файла.
* @param string $to - новый путь файла.
*/
function copyExec($from, $to){
$exec = 'copy /N /Y "'.escapeshellarg($from).' '.escapeshellarg($to);
exec($exec);
}
/**
* Enter description here...
*
* @param string $from - путь до файла.
* @param string $to - новый пусть файла.
*/
function moveExec($from, $to){
$exec = 'move /Y "'.escapeshellarg($from).' '.escapeshellarg($to);
exec($exec);
}
/**
* Обходим получившийся массив по длинному именя файла и получаем сводку по нему
*
* @param unknown_type $name
* @return unknown
*/
function getHashByLong($name){
if(count($this->getFiles) > 0)
{
foreach ($this->getFiles as $arr){
if($arr['long'] == $name) return $arr;
}
}
return false;
}
}
/*
$SNF = new FilesExec(dirname(__FILE__));
print_r($SNF->getFiles);
$SNF->scandirExec(dirname(__FILE__).'/..');
print_r($SNF->getFiles);
print_r($SNF->getHashByLong('debug'));
*/
?>