file_listing.lib.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * Functions for listing directories
  5. *
  6. * @package PhpMyAdmin
  7. */
  8. if (! defined('PHPMYADMIN')) {
  9. exit;
  10. }
  11. /**
  12. * Returns array of filtered file names
  13. *
  14. * @param string $dir directory to list
  15. * @param string $expression regular expression to match files
  16. *
  17. * @return array sorted file list on success, false on failure
  18. */
  19. function PMA_getDirContent($dir, $expression = '')
  20. {
  21. if (file_exists($dir) && $handle = @opendir($dir)) {
  22. $result = array();
  23. if (substr($dir, -1) != '/') {
  24. $dir .= '/';
  25. }
  26. while ($file = @readdir($handle)) {
  27. // for PHP < 5.2.4, is_file() gives a warning when using open_basedir
  28. // and verifying '..' or '.'
  29. if ('.' != $file
  30. && '..' != $file
  31. && is_file($dir . $file)
  32. && ! is_link($dir . $file)
  33. && ($expression == '' || preg_match($expression, $file))
  34. ) {
  35. $result[] = $file;
  36. }
  37. }
  38. @closedir($handle);
  39. asort($result);
  40. return $result;
  41. } else {
  42. return false;
  43. }
  44. }
  45. /**
  46. * Returns options of filtered file names
  47. *
  48. * @param string $dir directory to list
  49. * @param string $extensions regullar expression to match files
  50. * @param string $active currently active choice
  51. *
  52. * @return array sorted file list on success, false on failure
  53. */
  54. function PMA_getFileSelectOptions($dir, $extensions = '', $active = '')
  55. {
  56. $list = PMA_getDirContent($dir, $extensions);
  57. if ($list === false) {
  58. return false;
  59. }
  60. $result = '';
  61. foreach ($list as $val) {
  62. $result .= '<option value="'. htmlspecialchars($val) . '"';
  63. if ($val == $active) {
  64. $result .= ' selected="selected"';
  65. }
  66. $result .= '>' . htmlspecialchars($val) . '</option>' . "\n";
  67. }
  68. return $result;
  69. }
  70. /**
  71. * Get currently supported decompressions.
  72. *
  73. * @return string | separated list of extensions usable in PMA_getDirContent
  74. */
  75. function PMA_supportedDecompressions()
  76. {
  77. global $cfg;
  78. $compressions = '';
  79. if ($cfg['GZipDump'] && @function_exists('gzopen')) {
  80. if (!empty($compressions)) {
  81. $compressions .= '|';
  82. }
  83. $compressions .= 'gz';
  84. }
  85. if ($cfg['BZipDump'] && @function_exists('bzopen')) {
  86. if (!empty($compressions)) {
  87. $compressions .= '|';
  88. }
  89. $compressions .= 'bz2';
  90. }
  91. if ($cfg['ZipDump'] && @function_exists('gzinflate')) {
  92. if (!empty($compressions)) {
  93. $compressions .= '|';
  94. }
  95. $compressions .= 'zip';
  96. }
  97. return $compressions;
  98. }