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

Code PHP pour parcourir un répertoire spécifique et stocker les informations des attributs de tous les fichiers dans le répertoire

Le projet nécessite d'écrire une fonction qui puisse parcourir tous les fichiers dans un répertoire spécifié, ainsi que les sous-répertoires de ce répertoire. Affichez les informations sur les attributs des fichiers et stockez-les.

Penser à la demande, n'est-ce pas simplement un ls -Comment puis-je utiliser la commande al pour obtenir les attributs pertinents ? Ajoutez simplement une boucle et c'est fait.

Pendant le processus du projet, pour faciliter l'opération, le format JSON a été utilisé pour le stockage, mais des problèmes ont également été découverts. Voici un enregistrement des problèmes et du code pour une référence facile.

<?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);
  }
  /*
  *
  *  Get index string from index file
  *  @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];//经测试这个操作比较耗时,大概0.7s的样子,慎用!
        }
      }
    }
    return $result;
  }
  /*
  *  get file attributes
  *  @var   $file
  *  @var   $flag
  *  @return String
  */
  function getFileAttr($file,$flag){
    if (!file_exists($file)) {
      return false;
    }
    switch ($flag) {
      cas 'dir':
        if(is_file($file))
          return dirname($file);
        return realpath($file);
        break;
      cas 'name':
        if(is_file($file))
          return basename($file);
        return '';-;
        break;
      cas 'size':
        if(is_file($file))
          return filesize($file);
        return '';-;
        break;
      cas 'perms':
        return substr(sprintf('%o', fileperms($file)), -4);;
        break;
      cas 'ower':
        return fileowner($file);
        break;
      cas '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;
    }
  }
  /*
  *  get file size human readable
  */
  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];
  }

Voici la totalité du contenu de cet article, j'espère qu'il vous aidera dans vos études, et j'espère que vous soutiendrez également le tutoriel Nécessité de crier.

Déclaration : le contenu de cet article est issu du réseau, propriété de l'auteur original, apporté par les utilisateurs d'Internet et téléversé spontanément. Ce site n'est pas propriétaire des droits d'auteur, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique connexe. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.

Vous pourriez aussi aimer