Advertisement
P22DX

Recursively sort files

Apr 13th, 2022
1,252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.22 KB | None | 0 0
  1. <?php
  2.  
  3. $minute = 5;
  4. ini_set('memory_limit', '-1');
  5. ini_set('max_execution_time', (60 * $minute)); // 60 (seconds) = 1 Minutes
  6.  
  7. /**
  8.  * Recursive listing files
  9.  *
  10.  * @param string $directory
  11.  * @param array $entries_array optional
  12.  * @return array of files
  13.  */
  14. function recursiveScan($directory, &$entries_array = array())
  15. {
  16.     if (is_dir($directory) && is_readable($directory) && !is_link($directory)) { // link can cause endless loop
  17.         $handle = @opendir($directory);
  18.         if ($handle) {
  19.             while (($entry = readdir($handle)) !== false) {
  20.                 if ($entry == '.' || $entry == '..') {
  21.                     continue;
  22.                 }
  23.                 $entry = $directory . DIRECTORY_SEPARATOR . $entry;
  24.                 if (is_dir($entry)) {
  25.                     $entries_array = recursiveScan($entry, $entries_array);
  26.                 } elseif (is_writable($entry)) {
  27.                     $entries_array['file_writable'][] = $entry;
  28.                 } else {
  29.                     $entries_array['file_not_writable'][] = $entry;
  30.                 }
  31.             }
  32.             closedir($handle);
  33.         }
  34.     }
  35.     return $entries_array;
  36. }
  37. /**
  38.  *
  39.  * Sort array of list file by lastest modified time
  40.  *
  41.  * @param array  $files Array of files
  42.  *
  43.  * @return array
  44.  *
  45.  */
  46. function sortByLastModified($files)
  47. {
  48.     @array_multisort(array_map('filemtime', $files), SORT_DESC, $files);
  49.     return $files;
  50. }
  51. /**
  52.  *
  53.  * Recurisively list a file by descending modified time
  54.  *
  55.  * @param string $path
  56.  *
  57.  * @return array
  58.  *
  59.  */
  60. function getSortedByTime($path)
  61. {
  62.     $result = recursiveScan($path);
  63.     $fileWritable = $result['file_writable'];
  64.     $fileNotWritable = $result['file_not_writable'];
  65.     $fileWritable = sortByLastModified($fileWritable);
  66.  
  67.     return [
  68.         'file_writable' => $fileWritable,
  69.         'file_not_writable' => $fileNotWritable
  70.     ];
  71. }
  72. /**
  73.  * Recurisively list a file by array of extension
  74.  *
  75.  * @param string $path
  76.  * @param array $ext
  77.  * @return array of files
  78.  */
  79. function getSortedByExtension($path, $ext)
  80. {
  81.     $result = getSortedByTime($path);
  82.     $fileWritable = $result['file_writable'];
  83.     $fileNotWritable = $result['file_not_writable'];
  84.  
  85.     foreach($fileWritable as $entry) {
  86.         $pathinfo = pathinfo($entry, PATHINFO_EXTENSION);
  87.         $pathinfo = strtolower($pathinfo);
  88.        
  89.         if(in_array($pathinfo, $ext)) {
  90.             $sortedWritableFile[] = $entry;
  91.         }
  92.     }
  93.     foreach($fileNotWritable as $entry) {
  94.         $pathinfo = pathinfo($entry, PATHINFO_EXTENSION);
  95.         $pathinfo = strtolower($pathinfo);
  96.        
  97.         if(in_array($pathinfo, $ext)) {
  98.             $sortedNotWritableFile[] = $entry;
  99.         }
  100.     }
  101.  
  102.     return [
  103.         'file_writable' => $sortedWritableFile,
  104.         'file_not_writable' => $sortedNotWritableFile
  105.     ];
  106. }
  107. // test
  108. $result = getSortedByExtension(getcwd(), ['php','phtml']);
  109.  
  110. $fileWritable = $result['file_writable'];
  111. $fileNotWritable = $result['file_not_writable'];
  112. $fileWritable = sortByLastModified($fileWritable);
  113.  
  114. foreach ($fileWritable as $file) {
  115.     echo $file, '<br/>';
  116. }
  117. echo 'take a look', '<br/>';
  118.  
  119. foreach ($fileNotWritable as $file) {
  120.     echo $file, '<br/>';
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement