XOOPS  2.6.0
utils.php
Go to the documentation of this file.
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){
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){
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
125  umask($oldumask);
126 }
127 
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 
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 
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 
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)){
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(intval(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 = intval($memory_usage + $image_memory_usage + $thumb_memory_usage);
254 
255  if($memory_needed > $memory_limit){
256  ini_set('memory_limit',(intval($memory_needed/1024/1024)+5) . 'M');
257  if(ini_get('memory_limit') == (intval($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 
276  //create relative thumbs
277  $all_ok=true;
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
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));
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
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
327  $dir = rtrim($dir, '/');
328  // linux, safe off
329  if (DIRECTORY_SEPARATOR == '/' && @ini_get("safe_mode") == FALSE){
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);
343  @unlink($dir);
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 
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 = FALSE){
457  ob_start();
458 
459  echo "<br>----- DEBUG DUMP -----";
460  echo "<pre>";
461  var_dump($input);
462  echo "</pre>";
463 
464  if ($trace){
465  $debug = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
466 
467  echo "<br>-----STACK TRACE-----";
468  echo "<pre>";
469  var_dump($debug);
470  echo "</pre>";
471  }
472 
473  echo "</pre>";
474  echo "---------------------------<br>";
475 
476  $ret = ob_get_contents();
477  ob_end_clean();
478 
479  echo $ret;
480 
481  if ($halt == TRUE){
482  exit();
483  }
484 }
485 
486 ?>
$current_path
Definition: config.php:3
$fixed_image_creation_height
Definition: config.php:220
$relative_image_creation_name_to_prepend
Definition: config.php:229
$path
Definition: execute.php:31
$_SESSION['RF']["verify"]
Definition: dialog.php:4
$relative_image_creation_height
Definition: config.php:232
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)
Definition: utils.php:275
image_check_memory_usage($img, $max_breedte, $max_hoogte)
Definition: utils.php:242
if(!isset($xoops->paths[$path_type])) if($path_type== 'var') $file
Definition: browse.php:55
create_img_gd($imgfile, $imgthumb, $newwidth, $newheight="")
Definition: utils.php:43
rename_file($old_path, $name, $transliteration)
Definition: utils.php:24
$_SERVER['REQUEST_URI']
fix_get_params($str)
Definition: utils.php:159
config_loading($current_path, $fld)
Definition: utils.php:228
rcopy($source, $destination, $is_rec=FALSE)
Definition: utils.php:368
foldersize($path)
Definition: utils.php:76
endsWith($haystack, $needle)
Definition: utils.php:270
$relative_path_from_current_pos
Definition: config.php:228
if(is_object($xoops->user)) $all_ok
Definition: menu.php:29
is_really_writable($dir)
Definition: utils.php:326
$files
Definition: index.php:35
exit
Definition: browse.php:104
rrename($source, $destination, $is_rec=FALSE)
Definition: utils.php:404
defined('DS') or define('DS' DIRECTORY_SEPARATOR
Definition: common.php:41
is_function_callable($name)
Definition: utils.php:361
$fixed_image_creation
Definition: config.php:215
fix_strtolower($str)
Definition: utils.php:203
create_folder($path=false, $path_thumbs=false)
Definition: utils.php:119
filescount($path)
Definition: utils.php:98
rename_folder($old_path, $name, $transliteration)
Definition: utils.php:34
makeSize($size)
Definition: utils.php:66
$relative_image_creation_name_to_append
Definition: config.php:230
$fixed_image_creation_name_to_prepend
Definition: config.php:217
$fixed_image_creation_to_append
Definition: config.php:218
if(isset($_POST['name'])) $info
Definition: execute.php:57
check_files_extensions_on_path($path, $ext)
Definition: utils.php:128
$ext
Definition: browse.php:87
$parent
Definition: dialog.php:63
$relative_image_creation_width
Definition: config.php:231
$relative_image_creation
Definition: config.php:227
fix_filename($str, $transliteration)
Definition: utils.php:163
fix_strtoupper($str)
Definition: utils.php:195
fix_dirname($str)
Definition: utils.php:191
$url
Definition: register.php:72
$fixed_path_from_filemanager
Definition: config.php:216
$transliteration
Definition: config.php:84
duplicate_file($old_path, $name)
Definition: utils.php:15
fix_path($path, $transliteration)
Definition: utils.php:210
check_files_extensions_on_phar($phar, &$files, $basepath, $ext)
Definition: utils.php:141
$fixed_image_creation_width
Definition: config.php:219
get_file_by_url($url)
Definition: utils.php:305
debugger($input, $trace=FALSE, $halt=FALSE)
Definition: utils.php:456
$dir
Definition: browse.php:56
base_url()
Definition: utils.php:220
deleteDir($dir)
Definition: utils.php:5
rrename_after_cleaner($source)
Definition: utils.php:439
create_img($imgfile, $imgthumb, $newwidth, $newheight="")
Definition: utils.php:54