English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Código php para recorrer un directorio específico y almacenar información de atributos de todos los archivos dentro

El proyecto requiere escribir una función que pueda recorrer todos los archivos en un directorio específico, incluyendo los subdirectorios de este directorio. Imprime la información de atributos de los archivos y guárdalos.

Piensa en las necesidades, ¿no es solo un ls? -¿el comando al, para obtener las propiedades relacionadas y luego agregar un bucle para hacerlo?

Durante el proceso del proyecto, para facilitar la operación, se utilizó el formato JSON para el almacenamiento, pero también se descubrieron algunos problemas. Aquí se registran los problemas y el código para referencias futuras.

<?php
  define('INDEXFORMAT',"dir,name,size,perms,ower,group,ctime,mtime,atime,suffix") ;
  define('INDEXTXT', 'data/index.txt');
  define('INDEXJSON', 'data/index.json');
  date_default_timezone_set('Asia/Hong_Kong');
  if (file_exists(INDEXTXT)) {
    unlink(INDEXTXT);
  }
  $dir = './;
  getIndexFile($dir);
  /*
  *  get index file
  *  @filename   INDEXTXT
  *  @dir     string
  *
  */
  function getIndexFile($dir,$whitelist=''){
    $string = '';
    $dir = trim($dir);
    $dir = realpath($dir);
    $dir = $dir.";//";
    if(is_file($dir)){
      putIndexFile($dir);
    } else {
      putIndexFile($dir);
      $oDir = @opendir($dir);
      while($fileName = readdir($oDir)){
        if($fileName!='.' && $fileName!='..'){
          if(is_file($dir.$fileName)){
            putIndexFile($dir.$fileName);
          }elseif(is_dir($dir.$fileName)){
            getIndexFile($dir.$fileName);
          }
        }
      }
    }
    if (!file_exists(INDEXTXT)) {
      return false;
    }
    //$data = json_encode(getIndexFromFile());
    //file_put_contents(INDEXJSON,$data);
    return true;
  }
  /*
  *  Get Index file
  *  @filename   file.index
  *
  */
  function putIndexFile($file){
    if (!file_exists($file)) {
      return false;
    }
    $format = explode(',', INDEXFORMAT);
    $string = "";
    foreach ($format as $key => $value) {
      if($key !== 0 ){
        $string .= "\t";
      }
      $string .= getFileAttr($file,$value); 
    }
    $string .= "\n";
    file_put_contents(INDEXTXT, $string, FILE_APPEND);
  }
  /*
  *
  *  Obtener la cadena de índice desde el archivo de índice
  *  @return   Array()
  *  
  */
  function getIndexFromFile($flag=''){
    if (!file_exists(INDEXTXT)) {
      return false;
    }
    $arr = file(INDEXTXT);
    $format = explode(',', INDEXFORMAT);
    $result = array();
    if(!empty($flag)){
      $key = array_search($flag, $format);
      if ($key === false) {
        return false;
      }
      foreach ($arr as $str) {
        $tmp = explode("  ", trim($str));
        $result[$flag][] = $tmp[$key];
      }
    } else {
      foreach ($arr as $str) {
        $tmp = explode("  ", trim($str));
        foreach ($format as $key => $value) {
          $result[$value][] = $tmp[$key];//La operación ha sido probada y es bastante costosa, aproximadamente 0.7¡Ten cuidado con s, es peligroso usarlo!
        }
      }
    }
    return $result;
  }
  /*
  *  obtener atributos del archivo
  *  @var   $file
  *  @var   $flag
  *  @return String
  */
  function getFileAttr($file,$flag){
    if (!file_exists($file)) {
      return false;
    }
    switch ($flag) {
      case 'dir':
        if(is_file($file))
          return dirname($file);
        return realpath($file);
        break;
      case 'name':
        if(is_file($file))
          return basename($file);
        return '';-;
        break;
      case 'size':
        if(is_file($file))
          return filesize($file);
        return '';-;
        break;
      case 'perms':
        return substr(sprintf('%o', fileperms($file)), -4);;
        break;
      case 'ower':
        return fileowner($file);
        break;
      case 'group':
        return filegroup($file);}}
        break;
      case 'ctime':
        return filectime($file);
        break;
      case 'mtime':
        return filemtime($file);
        break;
      case 'atime':
        return fileatime($file);
        break;
      case 'suffix':
        if(is_file($file))
          return substr($file, strrpos($file, '.'),+1);
        return '';-;
        break;
      default:
        return false;
        break;
    }
  }
  /*
  *  tamaño de archivo en formato legible
  */
  function getFileSizeFormat($file){
    if(!is_file($file)){
      return '';-;
    }
    $flags = array('', 'K', 'M', 'G', 'T');
    for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
    return round($size, 2).$flags[$i];
  }

Esto es todo el contenido de este artículo, esperamos que sea útil para su aprendizaje y que todos apoyen y griten tutoriales.

Declaración: El contenido de este artículo se ha obtenido de la red, es propiedad del respectivo titular, el contenido ha sido contribuido y subido por usuarios de Internet, este sitio web no posee los derechos de propiedad, no ha sido editado por humanos y no asume responsabilidad alguna por los litigios legales. Si encuentra contenido sospechoso de violación de derechos de autor, le invitamos a enviar un correo electrónico a: notice#w, proporcionando pruebas relacionadas.3Declaración: El contenido de este artículo se ha obtenido de la red, es propiedad del respectivo titular, el contenido ha sido contribuido y subido por usuarios de Internet, este sitio web no posee los derechos de propiedad, no ha sido editado por humanos y no asume responsabilidad alguna por los litigios legales. Si encuentra contenido sospechoso de violación de derechos de autor, le invitamos a enviar un correo electrónico a: notice#w, proporcionando pruebas relacionadas.

Te gustará