POWRÓT NA STRONĘ SZKOŁY

Przydatne funkcje plikowe i katalogowe

Podczas tych zajęć poznamy kilka funkcji operujących na plikach i katalogach.

Sprawdzanie czy plik istnieje za pomocą funkcji file_exists(), sprawdzanie rozmiaru pliku za pomocą funkcji filesize()

Przykłady zastosowania tych funkcji poznaliśmy podczas poprzednich zajęć. Funkcję file_exists() zastosujemy w kolejnych ćwiczeniach kilkakrotnie.

Ćwiczenie 4_3_0_1. Tworzenie nowego katalogu za pomocą funkcji mkdir()

Funkcja mkdir($sciezka,$prawa_dostepu) zwraca true w przypadku powodzenia i false w przypadku kiedy nie uda się utworzyć nowego katalogu. Drugi, opcjonalny argument jest liczbą ósemkową i domyślnie wynosi 0777. To jest katalog ogólnostępny a więc najmniej bezpieczny dla przechowywanych w nim danych.
Niektóre prawa dostępu:

  • 0600 - odczyt i zapis dla właściciela, żadnych praw dla innych;
  • 0644 - odczyt i zapis dla właściciela, odczyt dla wszystkich;
  • 0755 - wszystkie prawa dla właściciela, odczyt i wykonanie dla innych;
  • 0750 - wszystkie prawa dla właściciela, odczyt i wykonanie dla grupy właściciela.

Do nadawania uprawnień możemy zastosować funkcję chmod($sciezka,$prawa_dostepu), zwracającą true lub false

W katalogu ćwiczenia utorzymy katalog o nazwie kat1, natomiast w katalogu kat1 utworzymy katalog kat2. Zastosujemy następujący pod PHP umieszczony w pliku tworz_katalog.php:

<body>
  <form action="tworz_katalog.php" method="post">
    <input type="submit" name="submit"  value="Utwórz katalogi" />
    <input type="submit" name="clear"  value="Wyczyść" />
  </form>
  <br />
  <?php
    if (!isset($_POST['submit'])) exit;
    
    if (file_exists('kat1'))
    echo 'Katalog kat1 już istnieje';
    else   if (!mkdir('kat1')) 
    {
      echo 'Tworzenie katalogu kat1 nie powiodło się';
      exit;
    }
    else   echo 'Katalog kat1 został utworzony';
    
    if (file_exists('kat1/kat2')) 
    echo '<br />Katalog kat2 już istnieje';
    else if (!mkdir('kat1/kat2')) 
    echo '<br />Tworzenie katalogu kat2 nie powiodło się';
    else echo '<br />Katalog kat2 został utworzony';
  ?>
</body>

Jak widzimy funkcję file_exists(), stosujemy zarówno do plików jak i do katalogów. Zastosowaliśmy ją tutaj, ponieważ próba utworzenia katalogu już istniejącego zakończy się komunikatem błędu.

Zajrzyj do katalogu ćwiczenia i sprawdź, czy nowe katalogi zostały utworzone.

Ćwiczenie 4_3_0_2. Kopiowanie pliku za pomocą funkcji copy()

Funkcja copy($plik_kopiowany,$plik_docelowy) zwraca true, jeżeli operacja kopiowania przebiegła pomyślnie lub false w przypadku niepowodzenia. Jeżeli $plik_docelowy istnieje, to zostanie nadpisany.

W tym ćwiczeniu wykorzystamy strukturę katalogów i plików utworzoną w poprzednim ćwiczeniu. Należy utworzyć dodatkowo plik kopiowanie.php:

<body>
  <form action="kopiowanie.php" method="post">
    <input type="submit" name="submit"  value="Kopiuj plik tworz_katalog.php" />
    <input type="submit" name="clear"  value="Wyczyść" />
  </form>
  <br />
  <?php
    if (!isset($_POST['submit'])) exit;
    
    if (!copy('tworz_katalog.php','kat1/kat2/tworz_katalog_kopia.php'))
    echo 'Wystąpiły błędy podczas kopiowania pliku';
    else echo 'Operacja kopiowania zakończona sukcesem';
  ?>
</body>

Sprawdź, czy w katalogu kat2 znajduje się kopia pliku tworz_katalog.php.

Ćwiczenie 4_3_0_3. Uzyskiwanie informacji o ścieżce za pomocą funkcji pathinfo()

Funkcja path_info($sciezka) zwraca tablicę asocjacyjną z informacjami o ścieżce pliku lub katalogu.

W tym ćwiczeniu wykorzystamy strukturę katalogów i plików utworzoną w poprzednich ćwiczeniach. Należy utworzyć dodatkowo plik path_info.php:

<body>
  <form action="path_info.php" method="post">
    <input type="submit" name="submit"  value="Pokaż informacje o ścieżce" />
    <input type="submit" name="clear"  value="Wyczyść" />
  </form>
  <br />
  <?php
    if (!isset($_POST['submit'])) exit;
    if (!file_exists('kat1/kat2/tworz_katalog_kopia.php'))
    echo 'plik nie istnieje!';
    else
    {
      $pathinfo=pathinfo('kat1/kat2/tworz_katalog_kopia.php');
      echo 'Nazwa pliku: '.$pathinfo['filename'].'<br />';
      echo 'Rozszerzenie: '.$pathinfo['extension'].'<br />';
      echo 'Katalog pliku: '.$pathinfo['dirname'];
    }
  ?>
</body>

Ten kod informuje nas o ścieżce pliku kat1/kat2/tworz_katalog_kopia.php. Wyświetla nazwę pliku, rozszerzenie pliku oraz katalog w którym plik się znajduje.

Ćwiczenie 4_3_0_4. Usuwanie pliku za pomocą funkcji unlink()

Funkcja unlink($sciezka_pliku) zwraca true, jeżeli operacja przebiegła pomyślnie lub false w przypadku niepowodzenia.

W tym ćwiczeniu wykorzystamy strukturę katalogów i plików utworzoną w poprzednich ćwiczeniach. Należy utworzyć dodatkowo plik usun_plik.php:

<body>
  <form action="usun_plik.php" method="post">
    <input type="submit" name="submit"  value="Usuń plik tworz_katalog_kopia.php" />
    <input type="submit" name="clear"  value="Wyczyść" />
  </form>
  <br />
  <?php
    if (!isset($_POST['submit'])) exit;
    if (!file_exists('kat1/kat2/tworz_katalog_kopia.php'))
    echo 'plik nie istnieje!';
    else if (!unlink('kat1/kat2/tworz_katalog_kopia.php'))
    echo 'Wystąpiły błędy podczas usuwania pliku';
    else echo 'Plik został usunięty';
  ?>
</body>

Ten kod powinien usunać plik kat1/kat2/tworz_katalog_kopia.php.

Sprawdź, czy w katalogu kat2 znajduje się nadal plik tworz_katalog_kopia.php.

Ćwiczenie 4_3_0_5. Usuwanie katalogu za pomocą funkcji rmdir()

Funkcja rmdir($sciezka) zwraca true, jeżeli operacja przebiegła pomyślnie lub false w przypadku niepowodzenia. Można usunąć tylko pusty katalog.

W tym ćwiczeniu wykorzystamy strukturę katalogów i plików utworzoną w poprzednich ćwiczeniach. Należy usunąć katalog kat2, za pomocą skryptu znajdującego się w pliku usun_kat.php:

<body>
  <form action="usun_kat.php" method="post">
    <input type="submit" name="submit"  value="Usuń katalog" />
    <input type="submit" name="clear"  value="Wyczyść" />
  </form>
  <br />
  <?php
    if (!isset($_POST['submit'])) exit;
    if (!file_exists('kat1/kat2'))
    echo 'Katalog nie istnieje!';
    else if (!rmdir('kat1/kat2'))
    echo 'Wystąpiły błędy podczas usuwania katalogu';
    else echo 'Katalog został usunięty';
  ?>
</body>

Ten kod powinien usunąć katalog kat2.

Sprawdź, czy katalog kat2 został usunięty.

Ćwiczenie 4_3_0_6. Lista plików i katalogów otrzymana za pomocą funkcji scandir()

Funkcja scandir($sciezka_katalogu) zwraca tablicę plików i katalogów znajdujących się w danym katalogu lub false w przypadku niepowodzenia.

W tym ćwiczeniu wykorzystamy strukturę katalogów i plików utworzoną w poprzednich ćwiczeniach. Należy utworzyć dodatkowo plik lista.php:

<body>
  <form action="lista.php" method="post">
    <input type="submit" name="submit"  value="Pokaż pliki" />
    <input type="submit" name="clear"  value="Wyczyść" />
  </form>
  <br />
  <?php
    if (!isset($_POST['submit'])) exit;
    @$pliki=scandir(getcwd());
    if (!$pliki) echo 'Wystąpiły błędy';
    else if (count($pliki)===0) echo 'Brak plików';
    else
    {
      foreach($pliki as $plik)  
      if($plik != '.' && $plik != '..' )
      echo $plik.'<br />';
    }
  ?>
</body>

Ten kod powinien wyświetlić listę plików i katalogów znajdujących się w katalogu ćwiczenia.

Funkcja getcwd() zwraca aktualny katalog lub false, w przypadku niepowodzenia.