utorok, 22 júl 2014 10:38 Written by 64340 times
Rate this item
(2 votes)

PHP - funkcie pre prácu s adresármi

Ukážeme si niekoľko funkcií na prácu s adresármi.

 Takéto funkcie nie su priamo súčasťou PHP knižníc, preto som sa rozhodol ich naprogramovať a zverejniť. Funkcie som ladil vo verzii PHP 5.2.5.
Predpokladám u programátora základné znalosti PHP.

Funkcia Search_directory prehľadá adresár $dir (napr.: d:\mojedata\) a uloží do premennej $files obsah všetkých nájdených súborov.

 

  function Search_directory($dir, &$files) 
  { 
    clearstatcache();
    if (is_dir($dir)) 
    { 
      if ($openDir = opendir($dir))
      { 
        while (false !== ($file = readdir($openDir)))
        { 
          if (!in_array($file, array('.','..'))) 
          { 
            $f = strtolower($dir.$file);
            if (is_dir($f))
            {   
              $f = $f.'\\\\';
              $files[] = $f;
              Search_directory($f, $files);
            }
            else
              $files[] = $f;  
          } 
        } 
        closedir($openDir);
      }   
    }
  }

 

Funkcia Remove_directory vymaže celý adresár $dir aj so súbormi.

 

  function Remove_directory($dir) 
  { 
    clearstatcache();
    if(is_dir($dir)) 
    { 
      $dir = substr($dir, -1) != "/" ? $dir."/" : $dir; 
      $openDir = opendir($dir); 
      while (false !== ($file = readdir($openDir)))
      { 
        if (!in_array($file, array('.','..'))) 
        { 
          if (is_dir($dir.$file)) 
            Remove_directory($dir.$file);
          else
            @unlink($dir.$file);             
        } 
      } 
      closedir($openDir); 
      @rmdir($dir);
      return true; 
    }
    else
      return false;
  } 

 

Funkcia Copy_directory prekopíruje celý adresár $source aj so súbormi do adresára $destination.

 

function Copy_directory($source, $destination)
  {
    clearstatcache();
    if (is_dir($source))
    {
      @mkdir($destination);
      $directory = dir($source);
          while (false !== ($readdirectory = $directory->read()))
      {
        if ($readdirectory != '.' && $readdirectory != '..')
        {
                $pathdir = $source.'/'.$readdirectory;
                if (is_dir($pathdir))
                    Copy_directory($pathdir, $destination.'/'.$readdirectory);
                else
                  copy($pathdir, $destination.'/'.$readdirectory);
              }  
          }
           $directory->close();
      }
    else
          copy($source, $destination);
  }

 

V prípade OS Linux (/) versus Windows (\) treba zmeniť lomítko v adresároch podľa potreby. Ako ste si iste všimli, využívam vo všetkých funkciách tzv. rekurzívne volanie tej iste funkcie v tele. V tomto prípade je táto metóda obzvlášť vhodná, kedže potrebujeme prehľadávať v tzv. stromových štruktúrach adresáre a súbory.

s pozdravom. 

 

Last modified on štvrtok, 24 júl 2014 07:30
Alojz Benďák

Autor je administrátor webu a venuje sa programovaniu takmer 23 rokov.

  • prvý kontakt s počítačmi na strednej škole - PMD 1,2,3, PP06, Atari, Sinclair (programovanie v jazyku: strojový kód, basic a pascal):  2 roky
  • na VŠ - jazyky Turbo pascal a Turbo C: 1rok
  • programovanie databázového ekonomického širokoškálneho software v Delphi a C++ Borland (databázy Paradox): 8 rokov v Codex s.r.o. Nitra
  • programovanie webových aplikácií na databázach MySQL a MS SQL server: 1 roky na živnosť (firmy: Hermes Nitra, Schindler v Bratislave)
  • pracoval ako DBA v Homecredit Brno a vo VÚB Bratislava ako vyvojár + optimalizácie v SQL a PL/SQL na Oracle 11g (firma Accenture)
  • programoval programy pre súkromné firmy pre HW na skenovanie povrchov nádrží pre skladovanie tekutých palív (pristroj Leica)
  • momentálne pracuje ako DBA pod Oracle 11g a ako vyvojár vnútropodnikových databázových aplikacií v PHP, SQL, C++, C# a interface v PL/SQL: 11 rokov
  • ďalej programuje s HTML, CSS, Ajax, Javascript, VBA, MS visual C++ a C# malé podporné aplikácie
  • certifikát SQL expert for Oracle 11g   
  • spolupracuje a aktívne učí pre počítačové firmy: Lapis, IVIT v Nitre

More in this category: « PHP - čítanie dát z Excelu