Passed
Push — master ( b6c858...3ff449 )
by Michael
61:14 queued 25:43
created

rcopy()   B

Complexity

Conditions 9
Paths 15

Size

Total Lines 28
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 18
nc 15
nop 3
dl 0
loc 28
rs 8.0555
c 0
b 0
f 0
1
<?php
2
3
if($_SESSION['RF']["verify"] !== "RESPONSIVEfilemanager") die('forbiden');
4
5
function deleteDir($dir) {
6
    if (!file_exists($dir)) return true;
7
    if (!is_dir($dir)) return unlink($dir);
8
    foreach (scandir($dir) as $item) {
9
        if ($item === '.' || $item === '..') continue;
10
        if (!deleteDir($dir.DIRECTORY_SEPARATOR.$item)) return false;
11
    }
12
    return rmdir($dir);
13
}
14
15
function duplicate_file($old_path,$name){
16
    if(file_exists($old_path)){
17
	$info=pathinfo($old_path);
18
	$new_path=$info['dirname']."/".$name.".".$info['extension'];
19
	if(file_exists($new_path)) return false;
20
	return copy($old_path,$new_path);
21
    }
22
}
23
24
function rename_file($old_path,$name,$transliteration){
25
    $name=fix_filename($name,$transliteration);
26
    if(file_exists($old_path)){
27
	$info=pathinfo($old_path);
28
	$new_path=$info['dirname']."/".$name.".".$info['extension'];
29
	if(file_exists($new_path)) return false;
30
	return rename($old_path,$new_path);
31
    }
32
}
33
34
function rename_folder($old_path,$name,$transliteration){
35
    $name=fix_filename($name,$transliteration);
36
    if(file_exists($old_path)){
37
	$new_path=fix_dirname($old_path)."/".$name;
38
	if(file_exists($new_path)) return false;
39
	return rename($old_path,$new_path);
40
    }
41
}
42
43
function create_img_gd($imgfile, $imgthumb, $newwidth, $newheight="") {
44
    if(image_check_memory_usage($imgfile,$newwidth,$newheight)){
45
	require_once('php_image_magician.php');
46
	$magicianObj = new imageLib($imgfile);
47
	$magicianObj -> resizeImage($newwidth, $newheight, 'crop');
48
	$magicianObj -> saveImage($imgthumb,80);
49
	return true;
50
    }
51
    return false;
52
}
53
54
function create_img($imgfile, $imgthumb, $newwidth, $newheight="") {
55
    if(image_check_memory_usage($imgfile,$newwidth,$newheight)){
56
	require_once('php_image_magician.php');
57
	$magicianObj = new imageLib($imgfile);
58
	$magicianObj -> resizeImage($newwidth, $newheight, 'auto');
59
	$magicianObj -> saveImage($imgthumb,80);
60
	return true;
61
    }else{
62
	return false;
63
    }
64
}
65
66
function makeSize($size) {
67
   $units = array('B','KB','MB','GB','TB');
68
   $u = 0;
69
   while ( (round($size / 1024) > 0) && ($u < 4) ) {
70
     $size = $size / 1024;
71
     $u++;
72
   }
73
   return (number_format($size, 0) . " " . $units[$u]);
74
}
75
76
function foldersize($path) {
77
    $total_size = 0;
78
    $files = scandir($path);
79
    $cleanPath = rtrim($path, '/'). '/';
80
81
    foreach($files as $t) {
82
        if ($t !== "." && $t !== "..") {
83
            $currentFile = $cleanPath . $t;
84
            if (is_dir($currentFile)) {
85
                $size = foldersize($currentFile);
86
                $total_size += $size;
87
            }
88
            else {
89
                $size = filesize($currentFile);
90
                $total_size += $size;
91
            }
92
        }
93
    }
94
95
    return $total_size;
96
}
97
98
function filescount($path) {
99
    $total_count = 0;
100
    $files = scandir($path);
101
    $cleanPath = rtrim($path, '/'). '/';
102
103
    foreach($files as $t) {
104
        if ($t !== "." && $t !== "..") {
105
            $currentFile = $cleanPath . $t;
106
            if (is_dir($currentFile)) {
107
                $size = filescount($currentFile);
108
                $total_count += $size;
109
            }
110
            else {
111
                $total_count += 1;
112
            }
113
        }
114
    }
115
116
    return $total_count;
117
}
118
119
function create_folder($path=false,$path_thumbs=false){
120
    $oldumask = umask(0);
121
    if ($path && !file_exists($path))
122
        mkdir($path, 0777, true); // or even 01777 so you get the sticky bit set
123
    if($path_thumbs && !file_exists($path_thumbs))
124
        mkdir($path_thumbs, 0777, true) or die("$path_thumbs cannot be found"); // or even 01777 so you get the sticky bit set
0 ignored issues
show
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
125
    umask($oldumask);
126
}
127
128
function check_files_extensions_on_path($path,$ext){
129
    if(!is_dir($path)){
130
	$fileinfo = pathinfo($path);
131
	if(!in_array(mb_strtolower($fileinfo['extension']),$ext))
132
	    unlink($path);
133
    }else{
134
	$files = scandir($path);
135
	foreach($files as $file){
136
	    check_files_extensions_on_path(trim($path,'/')."/".$file,$ext);
137
	}
138
    }
139
}
140
141
function check_files_extensions_on_phar( $phar, &$files, $basepath, $ext ) {
142
    foreach( $phar as $file )
143
    {
144
        if( $file->isFile() )
145
        {
146
            if(in_array(mb_strtolower($file->getExtension()),$ext))
147
            {
148
                $files[] = $basepath.$file->getFileName( );
149
            }
150
        }
151
        else if( $file->isDir() )
152
        {
153
            $iterator = new DirectoryIterator( $file );
154
            check_files_extensions_on_phar($iterator, $files, $basepath.$file->getFileName().'/', $ext);
155
        }
156
    }
157
}
158
159
function fix_get_params($str){
160
    return strip_tags(preg_replace( "/[^a-zA-Z0-9\.\[\]_| -]/", '', $str));
161
}
162
163
function fix_filename($str,$transliteration){
164
    if($transliteration){
165
    	if( function_exists( 'transliterator_transliterate' ) )
166
    	{
167
    	   $str = transliterator_transliterate( 'Accents-Any', $str );
168
    	}
169
    	else
170
    	{
171
    	   $str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str);
172
    	}
173
174
	$str = preg_replace( "/[^a-zA-Z0-9\.\[\]_| -]/", '', $str );
175
    }
176
177
    $str=str_replace(array('"',"'","/","\\"),"",$str);
178
    $str=strip_tags($str);
179
180
    // Empty or incorrectly transliterated filename.
181
    // Here is a point: a good file UNKNOWN_LANGUAGE.jpg could become .jpg in previous code.
182
    // So we add that default 'file' name to fix that issue.
183
    if( strpos( $str, '.' ) === 0 )
184
    {
185
       $str = 'file'.$str;
186
    }
187
188
    return trim( $str );
189
}
190
191
function fix_dirname($str){
192
    return str_replace('~',' ',dirname(str_replace(' ','~',$str)));
193
}
194
195
function fix_strtoupper($str){
196
    if( function_exists( 'mb_strtoupper' ) )
197
	return mb_strtoupper($str);
198
    else
199
	return strtoupper($str);
200
}
201
202
203
function fix_strtolower($str){
204
    if( function_exists( 'mb_strtoupper' ) )
205
	return mb_strtolower($str);
206
    else
207
	return strtolower($str);
208
}
209
210
function fix_path($path,$transliteration){
211
    $info=pathinfo($path);
212
    $tmp_path = $info['dirname'];
213
	$str=fix_filename($info['filename'],$transliteration);
214
    if($tmp_path!="")
215
		return $tmp_path.DIRECTORY_SEPARATOR.$str;
216
    else
217
		return $str;
218
}
219
220
function base_url(){
221
  return sprintf(
222
    "%s://%s",
223
    isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http',
224
    $_SERVER['HTTP_HOST']
225
  );
226
}
227
228
function config_loading($current_path,$fld){
229
    if(file_exists($current_path.$fld.".config")){
230
	require_once($current_path.$fld.".config");
231
	return true;
232
    }
233
    echo "!!!!".$parent=fix_dirname($fld);
234
    if($parent!=="." && !empty($parent)){
235
	config_loading($current_path,$parent);
236
    }
237
238
    return false;
239
}
240
241
242
function image_check_memory_usage($img, $max_breedte, $max_hoogte){
243
    if(file_exists($img)){
244
	$K64 = 65536;    // number of bytes in 64K
245
	$memory_usage = memory_get_usage();
246
	$memory_limit = abs((int)(str_replace('M','',ini_get('memory_limit'))*1024*1024));
247
	$image_properties = getimagesize($img);
248
	$image_width = $image_properties[0];
249
	$image_height = $image_properties[1];
250
	$image_bits = $image_properties['bits'];
251
	$image_memory_usage = $K64 + ($image_width * $image_height * ($image_bits )  * 2);
252
	$thumb_memory_usage = $K64 + ($max_breedte * $max_hoogte * ($image_bits ) * 2);
253
	$memory_needed = (int)($memory_usage + $image_memory_usage + $thumb_memory_usage);
254
255
        if($memory_needed > $memory_limit){
256
                ini_set('memory_limit',((int)($memory_needed/1024/1024)+5) . 'M');
257
                if(ini_get('memory_limit') == ((int)($memory_needed/1024/1024)+5) . 'M'){
258
                return true;
259
            }else{
260
                return false;
261
            }
262
        }else{
263
            return true;
264
        }
265
	    }else{
266
	    return false;
267
    }
268
}
269
270
function endsWith($haystack, $needle)
271
{
272
    return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
273
}
274
275
function new_thumbnails_creation($targetPath,$targetFile,$name,$current_path,$relative_image_creation,$relative_path_from_current_pos,$relative_image_creation_name_to_prepend,$relative_image_creation_name_to_append,$relative_image_creation_width,$relative_image_creation_height,$fixed_image_creation,$fixed_path_from_filemanager,$fixed_image_creation_name_to_prepend,$fixed_image_creation_to_append,$fixed_image_creation_width,$fixed_image_creation_height){
276
    //create relative thumbs
277
    $all_ok=true;
278
    if($relative_image_creation){
279
	foreach($relative_path_from_current_pos as $k=>$path){
280
	    if($path!="" && $path[strlen($path)-1]!="/") $path.="/";
281
	    if (!file_exists($targetPath.$path)) create_folder($targetPath.$path,false);
282
	    $info=pathinfo($name);
283
	    if(!endsWith($targetPath,$path))
284
		if(!create_img($targetFile, $targetPath.$path.$relative_image_creation_name_to_prepend[$k].$info['filename'].$relative_image_creation_name_to_append[$k].".".$info['extension'], $relative_image_creation_width[$k], $relative_image_creation_height[$k]))
285
		    $all_ok=false;
286
	}
287
    }
288
289
    //create fixed thumbs
290
    if($fixed_image_creation){
291
	foreach($fixed_path_from_filemanager as $k=>$path){
292
	    if($path!="" && $path[strlen($path)-1]!="/") $path.="/";
293
	    $base_dir=$path.substr_replace($targetPath, '', 0, strlen($current_path));
0 ignored issues
show
Bug introduced by
Are you sure substr_replace($targetPa... strlen($current_path)) of type array|string can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

293
	    $base_dir=$path./** @scrutinizer ignore-type */ substr_replace($targetPath, '', 0, strlen($current_path));
Loading history...
294
	    if (!file_exists($base_dir)) create_folder($base_dir,false);
295
	    $info=pathinfo($name);
296
	    if(!create_img($targetFile, $base_dir.$fixed_image_creation_name_to_prepend[$k].$info['filename'].$fixed_image_creation_to_append[$k].".".$info['extension'], $fixed_image_creation_width[$k], $fixed_image_creation_height[$k]))
297
		$all_ok=false;
298
	}
299
    }
300
    return $all_ok;
301
}
302
303
304
// Get a remote file, using whichever mechanism is enabled
305
function get_file_by_url($url) {
306
    if (ini_get('allow_url_fopen')) {
307
        return file_get_contents($url);
308
    }
309
    if (!function_exists('curl_version')) {
310
        return false;
311
    }
312
313
    $ch = curl_init();
314
315
    curl_setopt($ch, CURLOPT_HEADER, 0);
316
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
317
    curl_setopt($ch, CURLOPT_URL, $url);
318
319
    $data = curl_exec($ch);
320
    curl_close($ch);
321
322
    return $data;
323
}
324
325
// test for dir/file writability properly
326
function is_really_writable($dir){
327
    $dir = rtrim($dir, '/');
328
    // linux, safe off
329
    if (DIRECTORY_SEPARATOR === '/' && @ini_get("safe_mode") == FALSE){
0 ignored issues
show
Bug introduced by
It seems like you are loosely comparing @ini_get('safe_mode') of type false|string against false; this is ambiguous if the string can be empty. Consider using a strict comparison === instead.
Loading history...
330
        return is_writable($dir);
331
    }
332
333
    // Windows, safe ON. (have to write a file :S)
334
    if (is_dir($dir)){
335
        $dir = $dir.'/'.md5(mt_rand(1,1000).mt_rand(1,1000));
336
337
        if (($fp = @fopen($dir, 'ab')) === FALSE){
338
            return FALSE;
339
        }
340
341
        fclose($fp);
342
        @chmod($dir, 0777);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition for chmod(). This can introduce security issues, and is generally not recommended. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unhandled  annotation

342
        /** @scrutinizer ignore-unhandled */ @chmod($dir, 0777);

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
343
        @unlink($dir);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition for unlink(). This can introduce security issues, and is generally not recommended. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unhandled  annotation

343
        /** @scrutinizer ignore-unhandled */ @unlink($dir);

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
344
        return TRUE;
345
    }
346
    elseif ( ! is_file($dir) || ($fp = @fopen($dir, 'ab')) === FALSE){
347
        return FALSE;
348
    }
349
350
    fclose($fp);
351
    return TRUE;
352
}
353
354
/**
355
 * Check if a function is callable.
356
 * Some servers disable copy,rename etc.
357
 *
358
 * Returns TRUE if callable and everything is OK
359
 * Otherwise returns FALSE
360
 */
361
function is_function_callable($name){
362
    if (function_exists($name) === FALSE) return FALSE;
363
    $disabled = explode(',', ini_get('disable_functions'));
364
    return !in_array($name, $disabled);
365
}
366
367
// recursivly copies everything
368
function rcopy($source, $destination, $is_rec = FALSE) {
369
    if (is_dir($source)) {
370
        if ($is_rec === FALSE){
371
            $pinfo = pathinfo($source);
372
            $destination = rtrim($destination, '/').DIRECTORY_SEPARATOR.$pinfo['basename'];
373
        }
374
        if (is_dir($destination) === FALSE){
375
            mkdir($destination, 0777, true);
376
        }
377
378
        $files = scandir($source);
379
        foreach ($files as $file){
380
            if ($file !== "." && $file !== "..") {
381
                rcopy($source.DIRECTORY_SEPARATOR.$file, rtrim($destination, '/').DIRECTORY_SEPARATOR.$file, TRUE);
382
            }
383
        }
384
    }
385
    else {
386
        if (file_exists($source)){
387
            if (is_dir($destination) === TRUE){
388
                $pinfo = pathinfo($source);
389
                $dest2 = rtrim($destination, '/').DIRECTORY_SEPARATOR.$pinfo['basename'];
390
            }
391
            else {
392
                $dest2 = $destination;
393
            }
394
395
            copy($source, $dest2);
396
        }
397
    }
398
}
399
400
// recursivly renames everything
401
// I know copy and rename could be done with just one function
402
// but i split the 2 because sometimes rename fails on windows
403
// Need more feedback from users and refactor if needed
404
function rrename($source, $destination, $is_rec = FALSE) {
405
    if (is_dir($source)) {
406
        if ($is_rec === FALSE){
407
            $pinfo = pathinfo($source);
408
            $destination = rtrim($destination, '/').DIRECTORY_SEPARATOR.$pinfo['basename'];
409
        }
410
        if (is_dir($destination) === FALSE){
411
            mkdir($destination, 0777, true);
412
        }
413
414
        $files = scandir($source);
415
        foreach ($files as $file){
416
            if ($file !== "." && $file !== "..") {
417
                rrename($source.DIRECTORY_SEPARATOR.$file, rtrim($destination, '/').DIRECTORY_SEPARATOR.$file, TRUE);
418
            }
419
        }
420
    }
421
    else {
422
        if (file_exists($source)){
423
            if (is_dir($destination) === TRUE){
424
                $pinfo = pathinfo($source);
425
                $dest2 = rtrim($destination, '/').DIRECTORY_SEPARATOR.$pinfo['basename'];
426
            }
427
            else {
428
                $dest2 = $destination;
429
            }
430
431
            rename($source, $dest2);
432
        }
433
    }
434
}
435
436
// On windows rename leaves folders sometime
437
// This will clear leftover folders
438
// After more feedback will merge it with rrename
439
function rrename_after_cleaner($source) {
440
    $files = scandir($source);
441
442
    foreach ($files as $file) {
443
        if ($file !== "." && $file !== "..") {
444
            if (is_dir($source.DIRECTORY_SEPARATOR.$file)){
445
                rrename_after_cleaner($source.DIRECTORY_SEPARATOR.$file);
446
            }
447
            else {
448
                unlink($source.DIRECTORY_SEPARATOR.$file);
449
            }
450
        }
451
    }
452
453
    return rmdir($source);
454
}
455
456
function debugger($input, $trace = false, $halt = fale){
0 ignored issues
show
Bug introduced by
The constant fale was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
457
    \Xmf\Debug::dump($input);
458
    if ($trace){
459
         \Xmf\Debug::backtrace();
460
    }
461
    if ($halt){
462
        exit();
0 ignored issues
show
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
463
    }
464
}
465