file_manager_json.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. /**
  3. * KindEditor PHP
  4. *
  5. * 本PHP程序是演示程序,建议不要直接在实际项目中使用。
  6. * 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。
  7. *
  8. */
  9. require_once 'JSON.php';
  10. $php_path = dirname(__FILE__) . '/';
  11. $php_url = dirname($_SERVER['PHP_SELF']) . '/';
  12. //根目录路径,可以指定绝对路径,比如 /var/www/attached/
  13. $root_path = $php_path . '../attached/';
  14. //根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/attached/
  15. $root_url = $php_url . '../attached/';
  16. //图片扩展名
  17. $ext_arr = array('gif', 'jpg', 'jpeg', 'png', 'bmp');
  18. //目录名
  19. $dir_name = empty($_GET['dir']) ? '' : trim($_GET['dir']);
  20. if (!in_array($dir_name, array('', 'image', 'flash', 'media', 'file'))) {
  21. echo "Invalid Directory name.";
  22. exit;
  23. }
  24. if ($dir_name !== '') {
  25. $root_path .= $dir_name . "/";
  26. $root_url .= $dir_name . "/";
  27. if (!file_exists($root_path)) {
  28. mkdir($root_path);
  29. }
  30. }
  31. //根据path参数,设置各路径和URL
  32. if (empty($_GET['path'])) {
  33. $current_path = realpath($root_path) . '/';
  34. $current_url = $root_url;
  35. $current_dir_path = '';
  36. $moveup_dir_path = '';
  37. } else {
  38. $current_path = realpath($root_path) . '/' . $_GET['path'];
  39. $current_url = $root_url . $_GET['path'];
  40. $current_dir_path = $_GET['path'];
  41. $moveup_dir_path = preg_replace('/(.*?)[^\/]+\/$/', '$1', $current_dir_path);
  42. }
  43. //echo realpath($root_path);
  44. //排序形式,name or size or type
  45. $order = empty($_GET['order']) ? 'name' : strtolower($_GET['order']);
  46. //不允许使用..移动到上一级目录
  47. if (preg_match('/\.\./', $current_path)) {
  48. echo 'Access is not allowed.';
  49. exit;
  50. }
  51. //最后一个字符不是/
  52. if (!preg_match('/\/$/', $current_path)) {
  53. echo 'Parameter is not valid.';
  54. exit;
  55. }
  56. //目录不存在或不是目录
  57. if (!file_exists($current_path) || !is_dir($current_path)) {
  58. echo 'Directory does not exist.';
  59. exit;
  60. }
  61. //遍历目录取得文件信息
  62. $file_list = array();
  63. if ($handle = opendir($current_path)) {
  64. $i = 0;
  65. while (false !== ($filename = readdir($handle))) {
  66. if ($filename{0} == '.') continue;
  67. $file = $current_path . $filename;
  68. if (is_dir($file)) {
  69. $file_list[$i]['is_dir'] = true; //是否文件夹
  70. $file_list[$i]['has_file'] = (count(scandir($file)) > 2); //文件夹是否包含文件
  71. $file_list[$i]['filesize'] = 0; //文件大小
  72. $file_list[$i]['is_photo'] = false; //是否图片
  73. $file_list[$i]['filetype'] = ''; //文件类别,用扩展名判断
  74. } else {
  75. $file_list[$i]['is_dir'] = false;
  76. $file_list[$i]['has_file'] = false;
  77. $file_list[$i]['filesize'] = filesize($file);
  78. $file_list[$i]['dir_path'] = '';
  79. $file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
  80. $file_list[$i]['is_photo'] = in_array($file_ext, $ext_arr);
  81. $file_list[$i]['filetype'] = $file_ext;
  82. }
  83. $file_list[$i]['filename'] = $filename; //文件名,包含扩展名
  84. $file_list[$i]['datetime'] = date('Y-m-d H:i:s', filemtime($file)); //文件最后修改时间
  85. $i++;
  86. }
  87. closedir($handle);
  88. }
  89. //排序
  90. function cmp_func($a, $b) {
  91. global $order;
  92. if ($a['is_dir'] && !$b['is_dir']) {
  93. return -1;
  94. } else if (!$a['is_dir'] && $b['is_dir']) {
  95. return 1;
  96. } else {
  97. if ($order == 'size') {
  98. if ($a['filesize'] > $b['filesize']) {
  99. return 1;
  100. } else if ($a['filesize'] < $b['filesize']) {
  101. return -1;
  102. } else {
  103. return 0;
  104. }
  105. } else if ($order == 'type') {
  106. return strcmp($a['filetype'], $b['filetype']);
  107. } else {
  108. return strcmp($a['filename'], $b['filename']);
  109. }
  110. }
  111. }
  112. usort($file_list, 'cmp_func');
  113. $result = array();
  114. //相对于根目录的上一级目录
  115. $result['moveup_dir_path'] = $moveup_dir_path;
  116. //相对于根目录的当前目录
  117. $result['current_dir_path'] = $current_dir_path;
  118. //当前目录的URL
  119. $result['current_url'] = $current_url;
  120. //文件数
  121. $result['total_count'] = count($file_list);
  122. //文件列表数组
  123. $result['file_list'] = $file_list;
  124. //输出JSON字符串
  125. header('Content-type: application/json; charset=UTF-8');
  126. $json = new Services_JSON();
  127. echo $json->encode($result);