Podsumowanie piątego rozdziału


Podsumowanie piątego rozdziału

Po zdobyciu niemałej wiedzy teoretycznej na temat obsługi plików oraz wysyłania wiadomości e-mail, zobaczmy, jak wykorzystać ją w praktyce.

Pokażę Ci, jak napisać skrypt, który otworzy daną stronę (domyślny plik indeksu strony http://dana_strona.pl/), następnie wyszuka na niej wszystkie adresy e-mail, pasujące do wzorca, po czym zapisze je w pliku na naszym serwerze. Funkcja zostanie napisana w osobnym pliku, po czym załączymy ją za pomocą instrukcji require_once().

Przegląd rozwiązania zaczniemy od pliku funkcja.php. Wyrażenie regularne, rozpoznające adres e-mail, zaczerpniemy z ostatniej lekcji rozdziału czwartego:

<?php

function zdobadz_email($strona)
{
   // formuła prawidłowego adresu e-mail 
   $sprawdz = '/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]
   {2,4}$/';

   $plik = fopen($strona,'r'); // otwarcie pliku strony
   // utworzenie naszego pliku
   $moj_plik = fopen('tymczasowy_index.txt','a');
   flock($moj_plik, 2); // blokada pliku

   // przeszukujemy plik dopóki nie znajdziemy sie na końcu
   while(!feof($plik))
   {
      $linia = fgets($plik); // pobieramy jedną linię

      // sprawdzamy, czy znajduje się tam adres e-mail
      // jeśli tak, zapisujemy do naszego pliku
      if (ereg($sprawdz, $linia, $wynik)) 
         fputs($moj_plik, $wynik);
   }
   fclose($plik); // zamykamy plik strony

   // po zapisaniu danych, wskaźnik znajduje się na końcu pliku
   // musimy go przewinąć znów na początek funkcją rewind()
   rewind($moj_plik);

   // zawartość zapisanego pliku wczytujemy do tablicy adresów
   // $adresy, z wykorzystaniem funkcji file
   $adresy = file($moj_plik);

   // procedura wysyłania maila
   $adres = "przyklad@uzycia.pl";
   $tytul = "Adresy e-mail";
   $wiadomosc = "Znalezione adresy e-mail to: $adresy";
   mail($adres, $tytul, $wiadomosc);

   // odblokowanie pliku
   flock($moj_plik, 3);

   // zamknięcie
   fclose($moj_plik);

   // usunięcie, po wysłaniu e-mailem
   unlink($moj_plik);
}

?>

Teraz jeszcze tylko index.php i zabieram się za omawianie poszczególnych kroków:

<?php

require_once("funkcja.php");

?>
<html>
<head>
   <title>Przeszukiwacz stron</title>
</head>
<body>
<?php

   zdobadz_email("http://kursphp.com");

?>
<p>Wiadomość została wysłana</p>
</body>
</html>

Przeanalizujmy teraz działanie skryptu. W pierwszej kolejności, do pliku index.php, dołączany jest plik funkcja.php, zawierający napisaną przez nas funkcję, której możemy teraz używać w indexie. Jako argument przyjmuje nazwę strony (tudzież dowolnego, innego pliku). Stronę otwieramy przy pomocy funkcji fopen() w trybie ‚r’. Zauważ, że plik nie znajduje się na naszym serwerze, więc zazwyczaj nie mamy praw do jego modyfikacji. Następnie tworzony jest plik tymczasowy, w którym będziemy przechowywać informacje o znalezionych adresach.

Teraz pare słów o blokadzie pliku (funkcja flock()). W przypadku, gdy tylko my korzystamy z pliku, funkcja jest zbędna. Sytuacja zmienia się diametralnie, gdy na naszej stronie panuje duży ruch, a plik modyfikowany jest bardzo często. Może się wtedy zdarzyć, że dwie osoby w tym samym czasie próbują nadpisać plik. Chcemy uniknąć tej sytuacji, dlatego umożliwiamy dostęp do zapisu pliku tylko jednemu użytkownikowi na czas operacji. Gdy skończymy używać pliku, odblokowujemy go.

Stronę czytamy po linijce, sprawdzając, czy znajduje się tam ciąg znaków, pasujący do wzorca adresu e-mail. Jeżeli tak, zapisujemy go do naszego pliku tymczasowego. Po skończeniu przeglądania pliku, zamykamy stronę i przewijamy wskaźnik na początek naszego pliku. Wtedy odczytujemy zapisane adresy.

Po odczytaniu, wysyłamy wiadomość e-mail, zawierającą wszystkie znalezione adresy. Następnie odblokowujemy nasz plik, zamykamy go, po czym usuwamy.

Pamiętaj, że jeżeli jakaś funkcja jest dla Ciebie niejasna, zawsze możesz odwiedzić witrynę php.net, gdzie znajdziesz dokładne specyfikacje każdej użytej przeze mnie funkcji.

Propozycje dalszych ćwiczeń

Spróbuj swoich sił w tych zadaniach:

  • Zmodyfikuj skrypt, by zamiast szukać adresów, kopiował pliki na Twój serwer. Dodam, że możesz skopiować dowolny plik, nawet filmik flash.
  • Napisz funkcję, która sprawdzi dany plik pod kątem obecności wulgaryzmów. Jeżeli jakiś znajdzie, zastąpi go łańcuchem znaków -cenzura-.
  • Napisz program do tworzenia stron www. Na podstawie formularza, wpisz tytuł strony, treść, opis, słowa kluczowe, a skrypt zapisze gotowy plik index.html.

Rozdział piąty dobiegł końca. W kolejnym zaprezentuję użycie sesji i ciasteczek. Dodatkowo nauczymy się obsługiwać wyjątki oraz obsługiwać pliki wysłane na serwer. Zapraszam serdecznie!

Spis lekcji w rozdziale piątym

Poprzednia lekcja: Zapisywanie danych do pliku Następna lekcja: Rozdział szósty

Kurs PHP i MySQL w formie wygodnego e-booka?

ZA DARMOPobieram kurs w formie e-booka