Squiz Matrix  4.12.2
 All Data Structures Namespaces Functions Variables Pages
file_system.inc
1 <?php
40 function get_file_type($filename)
41 {
42  if (is_string($filename)) {
43  return strtolower( substr( strrchr($filename,'.') , 1) );
44  } else {
45  return '';
46  }
47 
48 }//end get_file_type()
49 
50 
59 function is_image($filename)
60 {
61 
62  switch (get_file_type($filename)) {
63  case 'jpg' :
64  case 'jpeg' :
65  case 'gif' :
66  case 'png' :
67  return TRUE;
68  default :
69  return FALSE;
70  } //end switch
71 
72 }//end is_image()
73 
74 
83 function file_to_string($filename)
84 {
85  if (!is_readable($filename)) return FALSE;
86  return file_get_contents($filename);
87 
88 }//end file_to_string()
89 
90 
100 function string_to_file($string, $filename)
101 {
102  if (!is_string($filename) || empty($filename)) {
103  return FALSE;
104  }
105 
106  // this function writes into the files only in the existing directories
107  // if directory doe snot exist then it returns false
108 
109  if (!is_dir(dirname($filename))) return FALSE;
110 
111  $tmp_filename = tempnam(dirname($filename), __FUNCTION__);
112  if (!$f = fopen($tmp_filename, 'wb')) {
113  trigger_error('Unable to open temporary file ('.$tmp_filename.') for writing, unable to write '.$filename, E_USER_WARNING);
114  return FALSE;
115  }
116  $s = fputs($f, $string);
117  fclose($f);
118  if ($s === FALSE) {
119  trigger_error('Unable to write '.$filename, E_USER_WARNING);
120  unlink($tmp_filename);
121  return FALSE;
122  }
123 
124  $om = umask(0000);
125  chmod($tmp_filename, 0664);
126  umask($om);
127 
128  // if the file being renamed to exists, have to delete it because winnt doesn't overwrite on
129  // rename
130  if ((strtolower(PHP_OS) == 'winnt') || (strtolower(PHP_OS) == 'win32')) {
131  // make sure we're using the latest info
132  clearstatcache();
133 
134  if (file_exists($filename)) unlink($filename);
135  }
136 
137  if (rename($tmp_filename, $filename)) {
138  return TRUE;
139  } else {
140  unlink($tmp_filename);
141  return FALSE;
142  }
143 
144 }//end string_to_file()
145 
146 
158 function array_to_file($value, $var_name, $filename)
159 {
160  if (!is_array($value)) return FALSE;
161  $string = '<?php $'.$var_name.' = '.var_export($value, TRUE).'; ?>';
162  return string_to_file($string, $filename);
163 
164 }//end array_to_file()
165 
166 
175 function easy_filesize($size)
176 {
177  if ($size < 1024) {
178  return $size.' Bytes';
179  } else if ($size < 1048576) {
180  return sprintf('%.1f KB', $size/1024.0);
181  } else if ($size < 1073741824) {
182  return sprintf('%.1f MB',($size/1024.0)/1024.0);
183  } else {
184  return sprintf('%.1f GB',(($size/1024.0)/1024.0)/1024.0);
185  }
186 
187 }//end easy_filesize()
188 
189 
200 function increment_filename($name,$spacer='')
201 {
202  require_once dirname(__FILE__).'/../general/general.inc';
203  if (strpos($name,'.') !== FALSE) {
204  $ext = get_file_type($name);
205  return increment_name(substr($name,0,-strlen($ext)-1),$spacer).'.'.$ext;
206  } else {
207  return increment_name($name, $spacer);
208  }
209 
210 }//end increment_filename()
211 
212 
224 function list_files($dir, $fullpath=FALSE)
225 {
226  if (!$dir) return FALSE;
227  if (is_dir($dir)) {
228  $restrict = FALSE;
229  } else {
230  $restrict = basename(str_replace('*','',$dir)); // if we pass in *.inc, check for .inc
231  $dir = dirname($dir);
232  }
233 
234  if (!is_dir($dir)) return Array();
235 
236  $files = Array();
237  if ($handle = opendir($dir)) {
238  while (($file = readdir($handle)) !== FALSE) {
239  if ($file == '.' || $file == '..') {
240  continue;
241  }
242  if (is_file($dir.'/'.$file)) {
243  if ($restrict && (preg_match("%$restrict%", $file))) {
244  $files[] = ($fullpath) ? $dir.'/'.$file : $file;
245  }
246  if (!$restrict) {
247  $files[] = ($fullpath) ? $dir.'/'.$file : $file;
248  }
249  }
250  }
251  closedir($handle);
252  }
253  return $files;
254 
255 }//end list_files()
256 
257 
269 function list_dirs($dir, $fullpath=FALSE, $ignore_list=Array(), $recursive=FALSE)
270 {
271  if (!is_dir($dir)) return Array();
272 
273  // if recursive we will be using fullpath
274  if ($recursive) $fullpath = TRUE;
275 
276  array_push($ignore_list, '.', '..');
277 
278  $dirs = Array();
279  if ($handle = opendir($dir)) {
280  while (($subdir = readdir($handle)) !== FALSE) {
281  if (!is_dir($dir.'/'.$subdir) || in_array($subdir, $ignore_list)) {
282  continue;
283  }
284  $dirs[] = ($fullpath) ? $dir.'/'.$subdir : $subdir;
285  if ($recursive) {
286  $dirs = array_merge($dirs, list_dirs($dir.'/'.$subdir, $fullpath, $ignore_list, TRUE));
287  }
288  }
289  closedir($handle);
290  }
291  return $dirs;
292 
293 }//end list_dirs()
294 
295 
306 function create_directory($path)
307 {
308  if ((!is_string($path) &&(!is_int($path))) || empty($path)) {
309  return FALSE;
310  }
311  if (is_dir($path)) return TRUE;
312 
313  $old_umask = umask(0);
314  if (!mkdir($path, 0775, TRUE)) {
315  trigger_error('Unable to create directory: '.$path, E_USER_WARNING);
316  clearstatcache();
317  return FALSE;
318  }
319 
320  umask($old_umask);
321  clearstatcache();
322  return TRUE;
323 
324 }//end create_directory()
325 
326 
335 function delete_directory($path)
336 {
337  $path = rtrim($path, '/');
338  if (!is_dir($path)) {
339  trigger_error($path.' is not a directory (for deletion).', E_USER_WARNING);
340  clearstatcache();
341  return FALSE;
342  }
343  if (clear_directory($path)) {
344  if (rmdir($path)) {
345  clearstatcache();
346  return TRUE;
347  } else {
348  trigger_error('Unable to delete dir: '.$path, E_USER_WARNING);
349  clearstatcache();
350  return FALSE;
351  }
352  }
353  clearstatcache();
354  return FALSE;
355 
356 }//end delete_directory()
357 
358 
368 function clear_directory($path, $file_excl = Array())
369 {
370  $path = rtrim($path, '/');
371  if (!is_dir($path)) {
372  trigger_error($path.' is not a directory (for clearing).');
373  clearstatcache();
374  return FALSE;
375  }
376  $dir = opendir($path);
377  while (FALSE !== ($filename = readdir($dir))) {
378  if ($filename == '.' || $filename == '..' || in_array($filename, $file_excl)) {
379  continue;
380  }
381  $filename = $path.'/'.$filename;
382  if (is_dir($filename)) {
383  delete_directory($filename);
384  } else {
385  if (!unlink($filename)) {
386  trigger_error('Unable to delete: '.$filename, E_USER_WARNING);
387  clearstatcache();
388  return FALSE;
389  }
390  }
391  }
392  closedir($dir);
393  clearstatcache();
394  return TRUE;
395 
396 }//end clear_directory()
397 
398 
408 function copy_directory($path, $new_path)
409 {
410  $path = rtrim($path, '/');
411  $new_path = rtrim($new_path, '/');
412  if (!is_dir($path)) {
413  trigger_error($path.' is not a directory (for copying.)');
414  clearstatcache();
415  return FALSE;
416  }
417  if (file_exists($new_path)) {
418  if (!is_dir($new_path)) {
419  trigger_error($new_path.' exists but is not a directory (for copying into).');
420  clearstatcache();
421  return FALSE;
422  }
423  } else {
424  if (!create_directory($new_path)) {
425  clearstatcache();
426  return FALSE;
427  }
428  }
429  // Copy the contents
430  $dir = opendir($path);
431  while (FALSE !== ($filename = readdir($dir))) {
432  if ($filename == '.' || $filename == '..') {
433  continue;
434  }
435  $full_filename = $path.'/'.$filename;
436  if (is_dir($full_filename)) {
437  if (!copy_directory($full_filename, $new_path.'/'.$filename)) {
438  clearstatcache();
439  return FALSE;
440  }
441  } else {
442  if (!copy($full_filename, $new_path.'/'.$filename)) {
443  trigger_error('Unable to copy: '.$full_filename.' --> '.$new_path.'/'.$filename);
444  clearstatcache();
445  return FALSE;
446  }
447  }
448  }
449  closedir($dir);
450  clearstatcache();
451  return TRUE;
452 
453 }//end copy_directory()
454 
455 
465 function copy_file($from, $to)
466 {
467  if (!create_directory(dirname($to))) return FALSE;
468 
469  if (!copy($from, $to)) return FALSE;
470  return TRUE;
471 
472 }//end copy_file()
473 
474 
484 function move_file($from, $to)
485 {
486  if (!copy_file($from, $to)) return FALSE;
487  if (!unlink($from)) return FALSE;
488  return TRUE;
489 
490 }//end move_file()
491 
492 
501 function truncate_file($file)
502 {
503  $fp = fopen($file, 'r+');
504  if ($fp) {
505  if (!ftruncate($fp, 0)) return FALSE;
506  fclose($fp);
507  return TRUE;
508  }//end if
509  return FALSE;
510 
511 }//end truncate_file()
512 
513 
527 function get_last_lines_from_file($filepath, $max_lines=10, $line_ending="\n")
528 {
529  // type verification
530  if (!is_string($filepath) || !is_int($max_lines) || !is_string($line_ending)) {
531  return Array();
532  }
533 
534  $result = Array();
535  $max_lines = is_int($max_lines) ? $max_lines : 10;
536 
537  if (!file_exists($filepath) || !is_readable($filepath)) {
538  return FALSE;
539  }
540 
541  if (!$handle = fopen($filepath, 'r')) return FALSE;
542 
543  // move pointer before the last character
544  fseek($handle, -1, SEEK_END);
545  $pos = ftell($handle);
546  if ($pos === FALSE) return FALSE;
547 
548  $chars = 0;
549  $current_word = NULL;
550  $lines = Array();
551  $line_count = 0;
552  $ok = TRUE;
553 
554  do {
555  $char = fgetc($handle);
556  if (0 != fseek($handle, -2, SEEK_CUR)) $ok = FALSE;
557 
558  if ($char == $line_ending) {
559  if (is_null($current_word)) {
560  continue;
561  } else {
562  array_unshift($lines, $current_word);
563  $line_count++;
564  $current_word = NULL;
565  }
566 
567  } else if ($char === FALSE) {
568  $ok = FALSE;
569  continue;
570 
571  } else {
572  $current_word = $char.$current_word;
573  }
574 
575  $chars++;
576  } while ($max_lines > $line_count && $ok);
577 
578  if (!is_null($current_word) && $max_lines > $line_count) {
579  array_unshift($lines, $current_word);
580  }
581 
582  fclose($handle);
583 
584  return $lines;
585 
586 }//end get_last_lines_from_file()
587 
588 
589 ?>