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.