Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00466 009790 10446807 na godz. na dobę w sumie
PHP. Receptury - książka
PHP. Receptury - książka
Autor: , Liczba stron: 648
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-117-7 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).
PHP to prosty ale jednocześnie bardzo użyteczny język skryptowy dostępny na zasadach open source. W ostatnich latach stał się jednym z ważniejszych narzędzi programistycznych w Internecie. Ponad milion witryn, od stron wielkich korporacji po strony prywatne, wykorzystuje PHP do dynamicznego generowania zawartości stron WWW. PHP zawiera zbiór bardzo przydatnych funkcji, ma prostą składnię, obsługuje wielu różnych systemów operacyjnych oraz usług sieciowych, co czyni go idealnym narzędziem do szybkiego tworzenia dynamicznych stron WWW.

Książka zawiera unikalny zbiór przykładów i rozwiązań problemów spotykanych na co dzień w trakcie programowania w języku PHP. Dla każdego problemu zostało przedstawione wyczerpujące rozwiązanie lub 'receptura' -- krótki fragment kodu, który od zaraz można zastosować w aplikacjach. Jednak ta książka to nie tylko gotowy do wykorzystania kod, znajdziesz tu także wyjaśnienie, jak i dlaczego przedstawiony kod działa, a to ułatwi dostosowanie go do rozwiązania podobnych, a nie tylko identycznych problemów.

Receptury z niniejszej książki rozwiązują nie tylko proste problemy, jak wysyłanie zapytania do bazy danych lub przetwarzanie adresów URL, ale także całe programy wykonujące złożone zadania, na przykład wyświetlanie tabel HTML lub generowanie wykresów słupkowych.

Książka zawiera ponad 250 receptur obejmujących między innymi:

Książka zawiera wiele kodu użytecznego dla wszystkich programistów PHP, od nowicjuszy po weteranów. Zamiast śledzić listy dyskusyjne, dokumentację dostępną w Internecie oraz inne źródła, wystarczy zajrzeć do 'PHP. Receptury', by znaleźć rozwiązania typowych problemów.
Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI PHP. Receptury KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG Autorzy: David Sklar, Adam Trachtenberg T³umaczenie: Tomasz Jarzêbowicz ISBN: 83-7361-117-7 Tytu³ orygina³u: PHP Cookbook Format: B5, stron: 648 TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl PHP to prosty ale jednoczeġnie bardzo u¿yteczny jêzyk skryptowy dostêpny na zasadach open source. W ostatnich latach sta³ siê jednym z wa¿niejszych narzêdzi programistycznych w Internecie. Ponad milion witryn, od stron wielkich korporacji po strony prywatne, wykorzystuje PHP do dynamicznego generowania zawartoġci stron WWW. PHP zawiera zbiór bardzo przydatnych funkcji, ma prost¹ sk³adniê, obs³uguje wielu ró¿nych systemów operacyjnych oraz us³ug sieciowych, co czyni go idealnym narzêdziem do szybkiego tworzenia dynamicznych stron WWW. Ksi¹¿ka zawiera unikalny zbiór przyk³adów i rozwi¹zañ problemów spotykanych na co dzieñ w trakcie programowania w jêzyku PHP. Dla ka¿dego problemu zosta³o przedstawione wyczerpuj¹ce rozwi¹zanie lub „receptura” — krótki fragment kodu, który od zaraz mo¿na zastosowaæ w aplikacjach. Jednak ta ksi¹¿ka to nie tylko gotowy do wykorzystania kod, znajdziesz tu tak¿e wyjaġnienie, jak i dlaczego przedstawiony kod dzia³a, a to u³atwi dostosowanie go do rozwi¹zania podobnych, a nie tylko identycznych problemów. Receptury z niniejszej ksi¹¿ki rozwi¹zuj¹ nie tylko proste problemy, jak wysy³anie zapytania do bazy danych lub przetwarzanie adresów URL, ale tak¿e ca³e programy wykonuj¹ce z³o¿one zadania, na przyk³ad wyġwietlanie tabel HTML lub generowanie wykresów s³upkowych. Ksi¹¿ka zawiera ponad 250 receptur obejmuj¹cych miêdzy innymi: • pracê z prostymi typami danych: tekstami, liczbami, datami, czasem i tablicami, • bloki tworzenia programów w PHP: zmienne, funkcje, klasy i obiekty, • programowanie sieciowe, czyli tworzenie formularzy, dostêp do baz danych i XML, • u¿yteczne funkcje jak: wyra¿enia regularne, szyfrowanie i bezpieczeñstwo, grafika, internacjonalizacja i lokalizacja a tak¿e us³ugi sieciowe, • pracê z plikami i katalogami, • wiersz poleceñ PHP i PHP-GTK, • PEAR (PHP Extension and Application Repository) Ksi¹¿ka zawiera wiele kodu u¿ytecznego dla wszystkich programistów PHP, od nowicjuszy po weteranów. Zamiast ġledziæ listy dyskusyjne, dokumentacjê dostêpn¹ w Internecie oraz inne ĥród³a, wystarczy zajrzeæ do „PHP. Receptury”, by znaleĥæ rozwi¹zania typowych problemów. Spis treści Wstęp...................................................o...................................................o.................... ......13 Rozdział 1. Łańcuchy znaków...................................................o..................................21 1.0. Wprowadzenie...................................................a...................................................a........ ..................21 1.1. Uzyskiwanie dostępu do podłańcuchów znaków ...................................................a.................24 1.2. Zastępowanie podłańcuchów znaków...................................................a.....................................25 1.3. Przetwarzanie łańcucha znaków znak po znaku ...................................................a...................26 1.4. Odwracanie kolejności słów lub znaków w łańcuchu znaków ..............................................28 1.5. Poszerzanie i zwężanie tabulatorów ...................................................a........................................29 1.6. Kontrolowanie wielkości liter...................................................a....................................................31 1.7. Umieszczanie funkcji i wyrażeń wewnątrz łańcuchów znaków ............................................32 1.8. Odcinanie od łańcuchów znaków znaków niewidocznych ...................................................a.33 1.9. Parsowanie danych oddzielanych przecinkami ...................................................a.....................35 1.10. Parsowanie danych o stałej szerokości ...................................................a..................................36 1.11. Dzielenie łańcuchów znaków ...................................................a..................................................38 1.12. Łamanie tekstu do określonej długości linii...................................................a..........................41 1.13. Przechowywanie danych binarnych w łańcuchach znaków.................................................42 Rozdział 2. Liczby ...................................................o...................................................o...45 ..................45 2.0. Wprowadzenie...................................................a...................................................a........ 2.1. Sprawdzanie, czy łańcuch znaków zawiera poprawną liczbę ................................................46 2.2. Porównywanie liczb zmiennopozycyjnych...................................................a.............................47 2.3. Zaokrąglanie liczb zmiennopozycyjnych ...................................................a................................48 4 Spis treści 2.4. Wykonywanie operacji na seriach liczb całkowitych ...................................................a............49 2.5. Generowanie liczb losowych z danego przedziału...................................................a................50 2.6. Generowanie ważonych liczb losowych...................................................a..................................52 2.7. Obliczanie logarytmów...................................................a...............................................................53 ...................54 2.8. Obliczanie potęg ...................................................a...................................................a.... 2.9. Formatowanie liczb ...................................................a...................................................a.. ................55 2.10. Wyświetlanie słów w liczbie mnogiej ...................................................a....................................56 2.11. Obliczanie wartości funkcji trygonometrycznych...................................................a................57 2.12. Obliczanie funkcji trygonometrycznych w stopniach, a nie w radianach ..........................58 2.13. Obsługa bardzo dużych lub bardzo małych liczb...................................................a................59 2.14. Przekształcanie liczb z jednego systemu liczbowego na inny ..............................................61 2.15. Wykonywanie obliczeń na liczbach systemów innych niż dziesiętny ................................62 Rozdział 3. Daty i czas ...................................................o.............................................65 3.0. Wprowadzenie...................................................a...................................................a........ ..................65 3.1. Sprawdzanie aktualnej daty i czasu ...................................................a.........................................67 3.2. Przekształcanie elementów daty i czasu w znaczniki czasu epoki ........................................69 3.3. Przekształcanie znacznika czasu epoki w elementy czasu i daty...........................................71 3.4. Wyświetlanie daty lub czasu w określonym formacie...................................................a..........71 3.5. Obliczanie różnicy między dwiema datami...................................................a............................77 3.6. Obliczanie różnicy między dwiema datami...................................................a............................79 3.7. Znajdowanie dnia tygodnia, miesiąca lub roku oraz numeru tygodnia w roku .................80 3.8. Weryfikacja poprawności daty...................................................a..................................................82 3.9. Parsowanie dat i czasu z łańcuchów znaków...................................................a.........................84 3.10. Dodawanie lub odejmowanie czasu od daty ...................................................a........................86 3.11. Wyznaczanie czasu w strefach czasowych...................................................a............................88 3.12. Uwzględnianie czasu zimowego...................................................a.............................................92 3.13. Generowanie czasu o wysokiej precyzji ...................................................a................................94 3.14. Generowanie przedziałów czasowych...................................................a...................................95 3.15. Stosowanie kalendarzy innych niż gregoriański...................................................a..................96 3.16. Program Calendar ...................................................a...................................................a... ...............98 Rozdział 4. Tablice ...................................................o...................................................o101 4.0. Wprowadzenie...................................................a...................................................a........ ................101 4.1. Tworzenie tablicy zaczynającej się od indeksu różnego od 0 ...............................................104 4.2. Przechowywanie w tablicy wielu elementów pod jednym kluczem...................................105 4.3. Inicjowanie tablicy liczbami całkowitymi z określonego przedziału...................................106 4.4. Iterowanie przez kolejne elementy tablicy ...................................................a............................107 Spis treści 5 4.5. Usuwanie elementów z tablicy...................................................a................................................110 4.6. Zmienianie rozmiaru tablicy...................................................a....................................................112 4.7. Łączenie tablic ...................................................a...................................................a..... ....................114 4.8. Przekształcanie tablicy w łańcuch znaków ...................................................a...........................116 4.9. Wyświetlanie zawartości tablicy z przecinkami...................................................a...................117 4.10. Sprawdzanie, czy klucz jest w tablicy...................................................a..................................119 4.11. Sprawdzanie, czy element jest w tablicy ...................................................a.............................119 4.12. Znajdowanie pozycji elementu w tablicy ...................................................a............................121 4.13. Znajdowanie elementów, które spełniają odpowiednie warunki ......................................122 4.14. Znajdowanie elementu tablicy o największej lub najmniejszej wartości...........................123 4.15. Odwracanie tablicy...................................................a...................................................a. ..............124 4.16. Sortowanie tablicy ...................................................a...................................................a. ...............125 4.17. Sortowanie tablicy na podstawie porównywalnych pól...................................................a...127 4.18. Sortowanie wielu tablic ...................................................a..........................................................129 4.19. Sortowanie tablicy przy użyciu metody, a nie funkcji ...................................................a......131 4.20. Ustawianie elementów tablicy w kolejności losowej...................................................a.........132 4.21. Tasowanie talii kart ...................................................a.................................................................133 4.22. Usuwanie z tablicy powtarzających się elementów...................................................a...........134 4.23. Wyznaczanie sumy, przecięcia lub różnicy między dwiema tablicami ............................135 4.24. Wyznaczanie wszystkich kombinacji elementów tablicy ...................................................a.137 4.25. Znajdowanie wszystkich permutacji tablicy ...................................................a.......................139 4.26. Program — wyświetlanie tablicy w tabeli HTML z kolumnami ułożonymi w poziomie.... 142 Rozdział 5. Zmienne ...................................................o.................................................145 5.0. Wprowadzenie...................................................a...................................................a........ ................145 5.1. Unikanie pomyłek między operatorami == i = ...................................................a....................146 5.2. Ustalanie wartości domyślnej...................................................a..................................................147 5.3. Wymiana wartości bez używania zmiennych tymczasowych..............................................148 5.4. Tworzenie dynamicznej nazwy zmiennej ...................................................a.............................149 5.5. Stosowanie zmiennych statycznych ...................................................a.......................................150 5.6. Współdzielenie zmiennych pomiędzy procesami...................................................a................152 5.7. Enkapsulacja złożonych typów danych do postaci łańcucha znaków ................................154 5.8. Wyświetlanie zawartości zmiennej w postaci łańcuchów znaków......................................155 Rozdział 6. Funkcje ...................................................o..................................................159 6.0. Wprowadzenie...................................................a...................................................a........ ................159 6.1. Uzyskiwanie dostępu do parametrów funkcji...................................................a......................160 6.2. Ustawianie domyślnych wartości parametrów funkcji...................................................a.......161 6 Spis treści 6.3. Przekazywanie wartości przez odwołanie ...................................................a............................163 6.4. Stosowanie parametrów nazwanych...................................................a......................................164 6.5. Tworzenie funkcji pobierających zmienną liczbę argumentów............................................166 6.6. Zwracanie wartości przez referencję ...................................................a......................................168 6.7. Zwracanie więcej niż jednej wartości ...................................................a.....................................169 6.8. Pomijanie wybranych wartości zwracanych...................................................a.........................170 6.9. Zwracanie błędu ...................................................a...................................................a..... ................172 6.10. Wywoływanie funkcji zależnie od wartości zmiennych...................................................a...173 6.11. Dostęp do zmiennej globalnej wewnątrz funkcji ...................................................a...............174 6.12. Tworzenie funkcji dynamicznych...................................................a.........................................176 Rozdział 7. Klasy i obiekty ...................................................o....................................177 7.0. Wprowadzenie...................................................a...................................................a........ ................177 7.1. Tworzenie egzemplarzy obiektów...................................................a..........................................181 7.2. Definiowanie konstruktorów obiektów ...................................................a.................................182 ...............183 7.3. Usuwanie obiektu...................................................a...................................................a.... 7.4. Klonowanie obiektów ...................................................a...................................................a. ...........184 7.5. Przypisywanie odwołań do obiektów...................................................a....................................185 7.6. Wywoływanie metod obiektu zwracanego przez inną metodę............................................186 7.7. Dostęp do metod przesłoniętych ...................................................a............................................186 7.8. Przeciążanie właściwości...................................................a..........................................................188 7.9. Wykorzystanie wielopostaciowości metod ...................................................a...........................190 7.10. Sprawdzanie metod i właściwości obiektów ...................................................a......................192 7.11. Dodawanie właściwości do obiektu podstawowego...................................................a.........194 7.12. Dynamiczne tworzenie klas...................................................a...................................................195 7.13. Dynamiczne tworzenie egzemplarzy obiektów ...................................................a.................196 Rozdział 8. Podstawy programowania na potrzeby WWW ...............................199 8.0. Wprowadzenie...................................................a...................................................a........ ................199 8.1. Zapisywanie danych cookie...................................................a.....................................................201 8.2. Odczytywanie danych cookie...................................................a..................................................202 8.3. Usuwanie danych cookie...................................................a..........................................................203 8.4. Odsyłanie do innej strony ...................................................a........................................................204 8.5. Śledzenie przebiegu sesji...................................................a..........................................................205 8.6. Zapis sesji w bazie danych...................................................a.......................................................206 8.7. Pozyskiwanie informacji o przeglądarkach ...................................................a..........................210 8.8. Konstruowanie zapytania metody GET...................................................a.................................211 8.9. Proste uwierzytelnianie HTTP ...................................................a................................................214 Spis treści 7 8.10. Uwierzytelnianie z wykorzystaniem danych cookie...................................................a.........216 8.11. Wymuszenie przesłania danych do przeglądarki...................................................a..............219 8.12. Buforowanie danych wyjściowych ...................................................a.......................................220 8.13. Przesyłanie danych z użyciem kompresji gzip...................................................a...................221 8.14. Ukrywanie komunikatów o błędach ...................................................a....................................222 8.15. Obsługa błędów ...................................................a...................................................a..... ...............224 8.16. Tworzenie własnych procedur obsługi błędów ...................................................a.................225 8.17. Zapisywanie błędów w dzienniku ...................................................a.......................................227 8.18. Unikanie błędów powtórnego przesłania nagłówka...................................................a.........229 8.19. Rejestrowanie wartości zmiennych ...................................................a......................................230 8.20. Odczyt zmiennych środowiskowych ...................................................a...................................232 8.21. Ustawianie wartości zmiennych środowiskowych...................................................a............233 8.22. Odczyt zmiennych konfiguracyjnych...................................................a...................................234 8.23. Ustawianie wartości zmiennych konfiguracyjnych ...................................................a...........236 8.24. Komunikacja w ramach serwera Apache ...................................................a............................237 8.25. Określanie wydajności kodu...................................................a..................................................238 8.26. Program — aktywowanie i dezaktywowanie stron internetowych użytkowników.......242 8.27. Program — monitorowanie aktywności użytkowników...................................................a..244 Rozdział 9. Formularze...................................................o............................................251 ................251 9.0. Wprowadzenie...................................................a...................................................a........ 9.1. Przetwarzanie danych pochodzących z formularza...................................................a............253 9.2. Weryfikacja danych formularza ...................................................a..............................................255 9.3. Formularze wielostronicowe ...................................................a...................................................257 9.4. Powtórne wyświetlanie formularzy ...................................................a.......................................260 9.5. Zabezpieczenie przed wielokrotnym przesyłaniem tego samego formularza...................263 9.6. Obsługa przesyłanych plików ...................................................a.................................................265 9.7. Zabezpieczanie kodu analizującego dane formularza.................................................a...........267 9.8. Obsługa znaków specjalnych w danych użytkownika ...................................................a.......269 9.9. Obsługa zmiennych zawierających w nazwie znak kropki...................................................a271 9.10. Elementy formularza o większej liczbie opcji...................................................a.....................272 9.11. Listy rozwijane zawierające daty ...................................................a..........................................273 Rozdział 10. Dostęp do baz danych ...................................................o......................275 10.0. Wprowadzenie...................................................a...................................................a....... ...............275 10.1. Bazy danych w plikach tekstowych ...................................................a.....................................280 10.2. Bazy danych DBM...................................................a...................................................a.... ............282 10.3. Zestawianie połączeń z bazami danych SQL...................................................a......................286 8 Spis treści 10.4. Przesyłanie zapytań do baz danych SQL ...................................................a............................288 10.5. Odczyt wierszy bez użycia pętli ...................................................a...........................................290 10.6. Wprowadzanie zmian w bazach danych SQL...................................................a....................292 10.7. Efektywne zwielokrotnianie zapytań...................................................a...................................294 10.8. Określanie liczby udostępnionych wierszy...................................................a.........................296 10.9. Obsługa znaków specjalnych...................................................a.................................................297 10.10. Zapisywanie informacji o przebiegu programu oraz komunikatów o błędach.............299 10.11. Automatyczne dobieranie wartości identyfikatorów ...................................................a......302 10.12. Programowe konstruowanie zapytań ...................................................a................................303 10.13. Tworzenie odsyłaczy do wielostronicowych wyników zapytania...................................307 10.14. Buforowanie zapytań i ich wyników ...................................................a.................................311 10.15. Program — wielowątkowa lista dyskusyjna...................................................a.....................313 Rozdział 11. Automatyzacja pracy w sieci ...................................................o.........321 11.0. Wprowadzenie...................................................a...................................................a....... ...............321 11.1. Pobieranie stron metodą GET...................................................a................................................323 11.2. Pobieranie stron metodą POST ...................................................a.............................................326 11.3. Pobieranie stron wymagających danych cookie...................................................a.................328 11.4. Pobieranie stron wymagających przesłania odpowiednich nagłówków ..........................330 11.5. Pobieranie stron w protokole HTTPS...................................................a...................................331 11.6. Analizowanie danych HTTP...................................................a..................................................331 11.7. Oznaczanie elementów strony WWW ...................................................a.................................334 11.8. Wyodrębnianie odsyłaczy z plików HTML ...................................................a........................336 11.9. Przekształcanie tekstu ASCII w kod HTML ...................................................a.......................337 11.10. Przekształcanie kodu HTLM do postaci tekstu ASCII ...................................................a....338 11.11. Usuwanie znaczników HTML i PHP ...................................................a.................................339 11.12. Wykorzystanie szablonów Smarty ...................................................a.....................................340 11.13. Analiza dziennika pracy serwera WWW ...................................................a..........................342 11.14. Program — wyszukiwanie błędnych odsyłaczy ...................................................a..............345 11.15. Program — wyszukiwanie nowych odsyłaczy...................................................a.................347 Rozdział 12. XML ...................................................o...................................................o..351 12.0. Wprowadzenie...................................................a...................................................a....... ...............351 12.1. Ręczne generowanie kodu XML ...................................................a...........................................354 12.2. Generowanie kodu XML z użyciem rozszerzenia DOM ...................................................a..355 12.3. Analiza dokumentu XML z zastosowaniem rozszerzenia DOM .......................................359 12.4. Analiza kodu XML za pomocą interfejsu SAX ...................................................a...................362 12.5. Przekształcanie dokumentu XML za pomocą arkusza XSLT..............................................367 Spis treści 9 12.6. Przesyłanie żądań XML-RPC...................................................a.................................................370 12.7. Odbieranie żądań XML-RPC ...................................................a.................................................373 12.8. Przesyłanie żądań SOAP ...................................................a........................................................377 12.9. Odbieranie żądań SOAP...................................................a.........................................................380 12.10. Wymiana danych w formacie WDDX...................................................a................................382 12.11. Odczyt arkuszy RSS ...................................................a...................................................a...........384 Rozdział 13. Wyrażenia regularne...................................................o.........................387 13.0. Wprowadzenie...................................................a...................................................a....... ...............387 13.1. Różnice pomiędzy funkcjami ereg i preg ...................................................a............................391 13.2. Dopasowywanie wyrazów...................................................a.....................................................392 13.3. Wyszukiwanie n-tego wystąpienia danej wartości...................................................a............393 13.4. Obszerne i ograniczone dopasowania...................................................a..................................395 13.5. Sprawdzanie adresów poczty elektronicznej...................................................a......................397 13.6. Wyszukiwanie linii pliku spełniających określone kryteria................................................400 13.7. Wyszukiwanie tekstu wewnątrz znaczników HTML ...................................................a.......401 13.8. Obsługa znaków specjalnych w wyrażeniach regularnych.................................................403 13.9. Odczytywanie rekordów rozdzielanych określonymi symbolami ....................................404 Rozdział 14. Szyfrowanie i bezpieczeństwo połączeń ..........................................407 ...............407 14.0. Wprowadzenie...................................................a...................................................a....... 14.1. Przechowywanie haseł w innym miejscu niż plików witryny ...........................................409 14.2. Ukrywanie danych za pomocą kodowania...................................................a.........................410 14.3. Weryfikacja danych za pomocą skrótu ...................................................a................................411 14.4. Przechowywanie haseł...................................................a............................................................412 14.5. Sprawdzanie złożoności hasła...................................................a...............................................413 14.6. Sposoby postępowania w przypadku utraty haseł...................................................a............415 14.7. Szyfrowanie i deszyfrowanie danych ...................................................a..................................417 14.8. Zapamiętywanie zaszyfrowanych danych w pliku lub bazie danych...............................422 14.9. Współużytkowanie zaszyfrowanych danych z inną witryną .............................................425 14.10. Wykrywanie połączenia SSL ...................................................a...............................................427 14.11. Szyfrowanie poczty za pomocą GPG ...................................................a.................................428 Rozdział 15. Grafika ...................................................o................................................431 15.0. Wprowadzenie...................................................a...................................................a....... ...............431 15.1. Rysowanie linii, prostokątów i wielokątów...................................................a........................434 15.2. Rysowanie łuków, elips i okręgów...................................................a.......................................436 15.3. Rysowanie linii ze wzorem...................................................a....................................................438 10 Spis treści ...............439 15.4. Rysowanie tekstu...................................................a...................................................a... 15.5. Rysowanie wyśrodkowanego tekstu...................................................a....................................442 15.6. Dynamicznie generowanie obrazów ...................................................a....................................447 15.7. Pobieranie i ustawianie koloru przezroczystości ...................................................a...............449 15.8. Bezpieczne udostępnianie obrazów ...................................................a.....................................450 15.9. Program — generowanie wykresów słupkowych z wyników głosowania......................452 Rozdział 16. Internacjonalizacja i lokalizacja tworzonych aplikacji ..............457 16.0. Wprowadzenie...................................................a...................................................a....... ...............457 16.1. Wyświetlanie nazw dostępnych stref językowych ...................................................a............459 16.2. Korzystanie z konkretnej strefy językowej...................................................a..........................459 16.3. Ustawianie domyślnej strefy...................................................a..................................................460 16.4. Dostosowanie tekstów komunikatów ...................................................a..................................461 16.5. Formatowanie dat i czasu ...................................................a......................................................464 16.6. Wyświetlanie walut...................................................a...................................................a..............466 16.7. Dostosowywanie obrazów do potrzeb mieszkańców określonej strefy językowej .........468 16.8. Lokalizacja dołączanych plików ...................................................a...........................................470 16.9. Zarządzanie zasobami przeznaczonymi dla różnych stref językowych ...........................470 16.10. Wykorzystanie rozszerzenia gettext...................................................a...................................472 16.11. Odczyt i zapis znaków Unicode................a...................................................a..........................473 Rozdział 17. Usługi internetowe...................................................o............................475 17.0. Wprowadzenie...................................................a...................................................a....... ...............475 17.1. Wysyłanie poczty elektronicznej...................................................a...........................................476 17.2. Wysyłanie poczty MIME ...................................................a........................................................479 17.3. Odczytywanie poczty za pomocą protokołów IMAP lub POP3 ........................................481 17.4. Wysyłanie wiadomości do grup dyskusyjnych...................................................a..................484 17.5. Odczytywanie wiadomości z grup dyskusyjnych ...................................................a.............486 17.6. Pobieranie i wysyłanie plików za pomocą protokołu FTP ..................................................491 17.7. Wyszukiwanie adresów przy użyciu serwerów LDAP ...................................................a....493 17.8. Wykorzystanie serwera LDAP do autoryzacji użytkowników...........................................495 17.9. Przeprowadzanie sprawdzania DNS ...................................................a...................................498 17.10. Sprawdzanie, czy serwer działa...................................................a..........................................499 17.11. Pobieranie informacji o nazwie domeny ...................................................a...........................501 Rozdział 18. Pliki ...................................................o...................................................o..503 18.0. Wprowadzenie...................................................a...................................................a....... ...............503 18.1. Tworzenie lub otwieranie lokalnego pliku ...................................................a.........................507 Spis treści 11 18.2. Tworzenie tymczasowego pliku ...................................................a...........................................508 18.3. Zdalne otwieranie pliku ...................................................a.........................................................509 18.4. Odczyt ze standardowego wejścia...................................................a........................................510 18.5. Odczyt plików do łańcucha znaków...................................................a....................................510 18.6. Zliczanie wierszy, akapitów i rekordów w pliku...................................................a...............512 18.7. Przetwarzanie każdego wyrazu z pliku ...................................................a..............................514 18.8. Odczyt wybranego wiersza z pliku...................................................a......................................516 18.9. Przetwarzanie pliku wstecz liniami lub akapitami...................................................a............517 18.10. Pobieranie z pliku losowego wiersza...................................................a.................................517 18.11. Przemieszanie wszystkich wierszy w pliku...................................................a......................518 18.12. Przetwarzanie pól tekstowych o zmiennej długości...................................................a........519 18.13. Odczytywanie plików konfiguracyjnych...................................................a...........................520 18.14. Odczyt lub zapis z konkretnego położenia w pliku ...................................................a........522 18.15. Usuwanie ostatniego wiersza z pliku ...................................................a................................523 18.16. Modyfikacja pliku bez użycia pliku tymczasowego...................................................a........525 18.17. Opróżnianie bufora ...................................................a...................................................a............527 18.18. Zapis na standardowe wyjście ...................................................a............................................528 18.19. Jednoczesny zapis do wielu uchwytów plików ...................................................a...............529 18.20. Znaki specjalne powłoki...................................................a.......................................................530 18.21. Przekazywanie wejścia do programu ...................................................a................................531 18.22. Odczyt standardowego wyjścia z programów ...................................................a.................532 18.23. Odczyt standardowego wyjścia błędów z programu...................................................a......534 18.24. Blokowanie pliku...................................................a...................................................a.. ..............535 18.25. Odczyt i zapis skompresowanych plików...................................................a.........................537 ...............539 18.26. Program unzip ...................................................a...................................................a..... Rozdział 19. Katalogi ...................................................o..............................................543 19.0. Wprowadzenie...................................................a...................................................a....... ...............543 19.1. Pobieranie i ustawianie czasu plików ...................................................a..................................546 19.2. Pobieranie informacji o pliku.....................a...................................................a.................... ........547 19.3. Zmiana praw lub właściciela pliku..................a...................................................a.....................549 19.4. Podział nazwy pliku na części składowe ...................................................a............................550 19.5. Usuwanie pliku...................................................a...................................................a.....................551 19.6. Kopiowanie lub przemieszczanie pliku...................................................a...............................551 19.7. Przetwarzanie wszystkich plików w katalogu ...................................................a...................552 19.8. Pobranie listy plików spełniających pewien wzorzec ...................................................a.......554 19.9. Przetwarzanie wszystkich plików w katalogu ...................................................a...................555 12 Spis treści 19.10. Tworzenie nowych katalogów ...................................................a............................................557 19.11. Usuwanie katalogu i jego zawartości...................................................a.................................558 19.12. Program — wyświetlanie listy plików w katalogu jako strony WWW...........................559 19.13. Program — wyszukiwanie tekstu w witrynie ...................................................a..................563 Rozdział 20. PHP po stronie klienta ...................................................o....................567 20.0. Wprowadzenie...................................................a...................................................a....... ...............567 20.1. Przetwarzanie argumentów programu...................................................a................................571 20.2. Przetwarzanie argumentów za pomocą klasy getopt...................................................a........572 20.3. Odczyt z klawiatury...................................................a...................................................a.............576 20.4. Odczyt haseł ...................................................a...................................................a....... ...................577 20.5. Wyświetlanie widgetu w oknie...................................................a.............................................579 20.6. Wyświetlanie kilku widgetów w jednym oknie...................................................a.................581 20.7. Odpowiedź na działania użytkownika...................................................a................................583 20.8. Wyświetlanie menu...................................................a...................................................a..............585 20.9. Program — powłoka z wierszem poleceń...................................................a...........................588 20.10. Program — wyświetlanie warunków pogodowych ...................................................a........591 Rozdział 21. Rozszerzenie PEAR...................................................o...........................599 21.0. Wprowadzenie...................................................a...................................................a....... ...............599 21.1. Korzystanie z zarządcy pakietów PEAR ...................................................a.............................601 21.2. Znajdowanie pakietów PEAR...................................................a................................................604 21.3. Znajdowanie informacji o pakiecie...................................................a.......................................605 21.4. Instalacja pakietów PEAR ...................................................a......................................................606 21.5. Instalacja pakietów PECL...................................................a.......................................................608 21.6. Aktualizacja pakietów PEAR...................................................a.................................................609 21.7. Usuwanie zainstalowanych pakietów PEAR...................................................a......................611 21.8. Dokumentowanie klas za pomocą PHPDoc...................................................a........................611 Skorowidz...................................................o...................................................o................615 Zmienne 5.0. Wprowadzenie Zgodnie z logiką warunkową zmienne są tym, co czyni programy komputerowe silnymi i elastycznymi. Jeżeli potraktujemy zmienną jako opatrzone nazwą pudełko, które prze- chowuje jakąś wartość, możemy powiedzieć, że PHP pozwala na tworzenie dziurawych, pustych pudełek, pudełek, które zawierają nazwy innych pudełek, pudełek wypełnio- nych liczbami lub łańcuchami znaków, pudełek przechowujących tablice innych pude- łek, pudełek wypełnionych obiektami oraz innych odmian pudełek, jakie tylko można sobie wyobrazić. Zmienna może być zarówno ustawiona, jak i nieustawiona. Zmienna z przypisaną do niej jakąkolwiek wartością: true lub false, pustą lub niepustą, jest ustawiona. Funkcja is- set() zwraca wartość true, jeżeli przekazano do niej zmienną, która jest ustawiona. Jedy- nym sposobem, aby zmienną ustawioną przekształcić w zmienną nieustawioną, jest wywoła- nie wobec niej funkcji unset(). Do unset() można przekazywać skalary, tablice i obiekty. Do funkcji tej można również przekazać jednocześnie wiele zmiennych, aby wszystkie uczynić nieustawionymi: unset($vegetables); unset($vegetables[12]); unset($earth, $moon, $stars); Jeśli zmienna jest obecna w łańcuchu zapytania URL, to będzie ona ustawiona nawet wówczas, jeśli nie przypisano do niej żadnej wartoścli. A zatem: http://www.przyklad.com/set.php?szympansy= malpy=12 spowoduje ustawienie $_GET[ malpy ] na 12, a $_GET[ szympansy ] będzie pustym łańcuchem znaków. 146 Rozdział 5. Zmienne Wszystkie nieustawione zmienne są również puste. Zmienne ustawione mogą być puste lub niepuste. Puste zmienne mają wartość logiczną równą false, są to: liczba całkowita 0, zmienna typu double 0.0, pusty łańcuch znaków, łańcuch znaków postaci „0”, wartość logiczna false, tablica nie zawierająca żadnych elementów, obiekt bez zmiennych i metod oraz wartość NULL. Wszystkie inne zmienne są niepuste. Dotyczy to również łańcucha znaków „00” oraz łańcucha „ ”, który zawiera tylko znak lspacji. Zmienne mogą być odczytywane jako mające wartość albo true, albo false. Powyżej wymieniono wszystkie wartości, które przez PHP traktowane są jako równoważne wartości logicznej false. Każda inna wartość jest wartością true. Różnica pomiędzy tym, co puste, a tym, co fałszywe polega na tym, że tylko zmienne mogą być puste. Stałe oraz wartości zwracane przez funkcję mogą mieć wartość false, ale nie mogą być puste. Na przykład poniższa instrukcja jest prawidłowa, ponielważ $first_name jest zmienną: if (empty($first_name)) { .. } Natomiast poniższe dwa przykłady spowodują wygenerowanie błędu parsera, ponieważ 0 (stała) oraz wartość zwracana przez funkcję get_first_name() nie mogą być puste: if (empty(0)) { .. } if (empty(get_first_name())) { .. } 5.1. Unikanie pomyłek między operatorami == i = Problem Podczas porównywania zmiennej i stałej chcemy uniknąć przypadkowego przypisania wartości. Rozwiązanie Napiszemy: if (12 == $dwarves) { ... } zamiast if ($dwarves == 12) { ... } Umieszczenie stałej po lewej stronie wywoła błąd parsera w razie zastosowania operatora przypisania. Innymi słowy, PHP wyświetli błąd, jeżeli nlapiszemy: if (12 = $dwarves) { ... } natomiast: if ($dwarves = 12) { ... } zostanie wykonane bez ostrzeżeń, czyli 12 zostanie przypisane do zmiennej $dwarves, a następnie uruchomiony zostanie kod wewnątrz bloku (ponieważ wynikiem operacji $dwarves = 12 jest wartość 12, traktowana jako true). 5.2. Ustalanie wartości domyślnej 147 Analiza Umieszczenie stałej po lewej stronie porównania wymusza przyrównanie do typu stałej. Powoduje to problemy w sytuacji, gdy liczba całkowita porównywana jest ze zmienną mogącą być liczbą całkowitą lub łańcuchem znaków. Jeśli $dwarves ma wartość 0, wy- rażenie 0 == $dwarves ma wartość true. Jednak taką samą wartość będzie miało to wyrażenie w sytuacji, gdy $dwarves będzie mieć wartość śpioch. Jeżeli liczba całkowita (0) znajdzie się po lewej stronie operatora porównania, PHP przekształci przed wykonaniem operacji porównania to, co jest po prawej stronie (łańcuch znaków śpioch) na liczbę całko- witą (0). Aby tego uniknąć, należy zastosować operator tożsamlości 0 === $dwarves. Zobacz również Dokumentacja operatora = jest dostępna pod adresem http://www.php.net/language.opera- tors.assignment, a dokumentacja operatorów == i === — na stronie http://www.php.net/ manual/language.operators.comparison.php. 5.2. Ustalanie wartości domyślnej Problem Chcemy przypisać wartość domyślną do zmiennej, która jeszcze nie posiada żadnej warto- ści. Często zdarza się, że chcemy w sposób bezpośredni przypisać wartość domyślną zmiennej, która może zostać nadpisana danymi z formy wejściowej lub przez zmienną środowiskową. Rozwiązanie Należy zastosować funkcję isset() w celu przypisania wartości domyślnej zmiennej, która może już posiadać wartość: if (! isset($cars)) { $cars = $default_cars; } Aby nadać nowej zmiennej wartość (na przykład wartość domyślną), należy zastosować operator potrójny (a ? b : c): $cars = isset($_REQUEST[ cars ]) ? $_REQUEST[ cars ] : $default_cars; Analiza Stosowanie funkcji isset() ma zasadnicze znaczenie podczas przypisywania wartości domyślnych. Bez niej wartość nie mająca charakteru domyślnego nie może być zerem lub jakąkolwiek inną wartością, obliczaną jako false. Rozważmy następujące przypisanie: $cars = $_REQUEST[ cars ] ? $_REQUEST[ cars ] : $default_cars; 148 Rozdział 5. Zmienne Jeżeli $_REQUEST[ cars ] ma wartość 0, $cars jest ustawiona na $default_cars i to pomimo tego, że 0 może być prawidłową wartością zmiennej $cars. Aby w łatwy sposób ustawić jednocześnie wiele wartości domyślnych, można zastoso- wać tablicę z wartościami domyślnymi. Kluczami w tablicy wartości domyślnych są nazwy zmiennych, a wartości znajdujące się w tablicy są wartościami domyślnymi dla każdej zmiennej: $defaults = array( imperatorzy = array( Rudolf II , Kaligula ),a warzywo = seler , hektary = 15); foreach ($defaults as $k = $v) { if (! isset($GLOBALS[$k])) { $GLOBALS[$k] = $v; } } Ponieważ zmienne są ustawione w globalnej przestrzeni nazw, poprzedni kod nie za- działa, jeśli będziemy chcieli ustawić wartości domyślne obowiązujące jedynie wewnątrz funkcji. Aby wykonać tę operację, należy zastosować zmielnne zmiennych: foreach ($defaults as $k = $v) { if (! isset($$k)) { $$k = $v; } } Zobacz również Dokumentacja dotycząca funkcji isset() jest dostępna pod adresem http://www.php.net/ isset; zmienne zmiennych są omówione w recepturze 5.4 oraz pod adresem http://www. php.net/language.variables.variable. 5.3. Wymiana wartości bez używania zmiennych tymczasowych Problem Chcemy wymienić wartości w dwóch zmiennych bez użycia dodatkowych zmiennych do przechowywania tych wartości. Rozwiązanie Aby zamienić zmienne $a i $b, napiszemy: list($a,$b) = array($b,$a); Analiza Konstrukcja językowa PHP o nazwie list() umożliwia przypisywanie wartości z tablicy do pojedynczych zmiennych. Odpowiednik list() po prawej stronie wyrażenia, czyli 5.4. Tworzenie dynamicznej nazwy zmiennej 149 array(), umożliwia tworzenie tablic z pojedynczych wartości. Przypisanie tablicy zwró- conej przez funkcję array() do zmiennych w list() umożliwia zmianę kolejności tych wartości. Działa to również w przypadku więcej niż dwlóch wartości: list($yesterday,$today,$tomorrow) = array($today,$tomoarrow,$yesterday); Metoda ta nie jest szybsza niż zastosowanie zmiennych tymczasowych, dlatego należy stosować ją dla zachowania czytelności kodu, a nie zlwiększenia jego szybkości. Zobacz również Dokumentacja funkcji list() jest dostępna pod adresem http://www.php.net/list, a funkcji array() — pod adresem http://www.php.net/array. 5.4. Tworzenie dynamicznej nazwy zmiennej Problem Chcemy dynamicznie utworzyć nazwę zmiennej. Na przykład chcemy zastosować nazwy zmiennych, które odpowiadają nazwom pól pochodzącyclh z zapytania do bazy danych. Rozwiązanie Zastosujemy składnię zmiennej zmiennych PHP: wstawimy znak $ przed zmienną, której wartość wyznacza nazwę zmiennej, którą chcemy utworzylć: $animal = tygrysy ; $tygrysy = 103; print $$animal; 103 Analiza Wykonanie powyższego przykładu spowoduje wyświetlenie wartości 103. Ponieważ $ani- mal = tygrysy , $$animal ma wartość $tygrysy, a jej wartością jest z kolei 103. Stosując nawiasy klamrowe, możemy utworzyć bardziej skomplikowane wyrażenia, które będą wskazywać nazwy zmiennych: $stooges = array( Moe , Larry , Curly ); $stooge_moe = Moses Horwitz ; $stooge_larry = Louis Feinberg ; $stooge_curly = Jerome Horwitz ; foreach ($stooges as $s) { print $s naprawdę nazywa się ${ stooge_ .strtolower($s)a}. ; } Moe naprawdę nazywa się Moses Horwitz. Larry naprawdę nazywa się Louis Feinberg. Curly naprawdę nazywa się Jerome Horwitz. 150 Rozdział 5. Zmienne PHP oblicza wyrażenie pomiędzy nawiasami klamrowymi i stosuje je jako nazwę zmiennej. Wyrażenie może nawet zawierać wywołania funkcji, na plrzykład strtolower(). Zmienne zmiennych są także użyteczne przy przechodzeniu kolejno przez zmienne o po- dobnych nazwach. Załóżmy, że wysyłamy zapytanie do tabeli bazy danych, w której znajdują się pola title_1, title_2 itd. Jeżeli chcemy sprawdzić, czy tytuł odpowiada którejkolwiek z tych wartości, najprostszym rozwiązaniem jest przejście przez nie kolejno w następujący sposób: for ($i = 1; $i = $n; $i++) { $t = title_$i ; if ($title == $$t) { /* jeśli się równa */ } } Oczywiście, pierwszym rozwiązaniem przychodzącym na myśl byłoby przechowywanie tych wartości w tablicy, ale jeżeli utrzymujemy stary kod, który wykorzystuje ten właśnie sposób (i nie możemy go zmienić), zmienne zmiennych oklazują się wówczas pomocne. Zastosowanie nawiasów klamrowych jest również niezbędne podczas wyjaśniania niejasno- ści dotyczących elementów tablicy. Zmienna zmiennych $$donkeys[12] może mieć dwa znaczenia. Pierwsze to „odczytaj to, co znajduje się w dwunastym elemencie tablicy $donkeys i użyj tego jako nazwy zmiennej”. Napiszemy wówczas ${$donkeys[12]}. Drugie znaczenie to „zastosuj jako nazwę tablicy to, co znajduje się w skalarze $don- keys i poszukaj dwunastego elementu tej tablicy”. Napiszemy wówczas ${$don- keys}[12]. Zobacz również Dokumentacja zmiennych zmiennych jest dostępna pod adresem http://www.php.net/lan åguage.variables.variable. 5.5. Stosowanie zmiennych statycznych Problem Chcemy zachować wartość zmiennej lokalnej pomiędzy kollejnymi wywołaniami funkcji. Rozwiązanie Zadeklarujemy zmienną jako statyczną przy użyciu słlowa kluczowego static: function track_times_called( ) { static $i = 0; $i++; return $i; } 5.5. Stosowanie zmiennych statycznych 151 Analiza Zadeklarowanie zmiennej jako static spowoduje, że jej wartość zostanie zapamiętana przez funkcję. Jeżeli więc funkcja zostanie wywołana w późniejszym czasie, nadal będziemy mogli uzyskać dostęp do wartości tej zapisanej zmiennej. Funkcja pc_check_the_count() z przykładu 5.1 wykorzystuje zmienne statyczne do zliczania liczby piłek odbitych i prze- puszczonych przez baseballistę grającego na pozycji pałkarza. Przykład 5.1. Funkcja pc_check_the_count() function pc_check_the_count($pitch) { static $strikes = 0; static $balls = 0; switch ($pitch) { case foul : if (2 == $strikes) break; // nic się nie dzieje, jeśli paitcher nie uderzył 2 razy // w przeciwnym wypadku przejdź do przypadku strikea case strike : $strikes++; break; case ball : $balls++; break; } if (3 == $strikes) { $strikes = $balls = 0; return wyeliminowany ; } if (4 == $balls) { $strikes = $balls = 0; return biegnie ; } return uderza ; } $what_happened = check_the_count($pitch); W funkcji pc_check_the_count() to, co zdarzy się z pałkarzem, zależy od wartości licz- nika uderzeń $pitch znajdującego się wewnątrz funkcji w instrukcji switch. Mogliby- śmy zamiast tego zwracać liczby piłek odbitych i przepuszczonych, lecz wymagałoby to także sprawdzania w różnych miejscach kodu, czy zawodnik powinien zostać wyelimino- wany, czy ma biec do bazy, czy też pozostać na miejscu. Zmienne statyczne zachowują swoje wartości pomiędzy kolejnymi wywołaniami funkcji, jednak wartość ta jest zapamiętywana tylko na czas pojedynczego wywołania skryptu. Zmienna zadeklarowana jako static dostępna w czasie jednego wywołania nie utrzyma swojej wartości do chwili kolejnego wywołania tej slamej strony. Zobacz również Dokumentacja zmiennych statycznych jest dostępna pod adresem http://www.php.net/lan åguage.variables.scope. 152 Rozdział 5. Zmienne 5.6. Współdzielenie zmiennych pomiędzy procesami Problem Chcemy poznać sposób współdzielenie informacji pomiędzy procesami, aby zapewnić szybki dostęp do współdzielenie danych. Rozwiązanie Zapiszemy dane w segmencie pamięci wspólnej i zagwarantujemy wyłączny dostęp do niego za pomocą semafora: $semaphore_id = 100; $segment_id = 200; // pobiera uchwyt do semafora związanego z pożądanym // segmentem pamięci wspólnej $sem = sem_get($semaphore_id,1,0600); // zapewnia sobie wyłączny dostęp do semafora sem_acquire($sem) or die( Nie mogę przejąć semafora ); // pobiera uchwyt do pożądanego segmentu pamięci wspólnej $shm = shm_attach($segment_id,16384,0600); // pozyskuje wartość z segmentu pamięci wspólnej $population = shm_get_var($shm, population ); // operuje na wartości $population += ($births + $immigrants - $deaths - $emigrantas); // z powrotem zapisuje wartość w segmencie pamięci wspólnej shm_put_var($shm, population ,$population); // zwalnia uchwyt do segmentu pamięci wspólnej shm_detach($shm); // zwalnia semafor, by inne procesy mogły go pozyskiwać sem_release($sem); Analiza Segment pamięci wspólnej jest częścią pamięci RAM w komputerze, do której dostęp mogą mieć różne procesy (na przykład większa liczba procesów serwera WWW, który obsługuje zapytania). Semafor sam zapewnia, że inne procesy nie zachodzą na siebie w momencie, gdy jeden z nich ma dostęp do segmentu pamięci wspólnej. Przed wyko- rzystaniem przez proces segmentu pamięci musi on przejąć sterowanie semaforem. Jeśli proces został już wykonany, semafor jest zwalniany po to, by umożliwić wykorzystanie go przez inny proces. Aby przejąć sterowanie semaforem, należy zastosować funkcję sem_get(), która znaj- duje jego identyfikator. Pierwszym argumentem tej funkcji jest liczba całkowita będąca kluczem semafora. Kluczem może być jakakolwiek liczba całkowita pod warunkiem, że wszystkie programy, które będą miały dostęp do tego konkretnego semafora, stosują ten sam klucz. Jeżeli semafor z wyszególnionym kluczem jeszcze nie istnieje, zostaje on utwo- rzony, ustawiana jest maksymalna liczba procesów, które mogą mieć dostęp do semafora, wskazywana przez drugi argument funkcji sem_get() (w tym przypadku jest to 1), 5.6. Współdzielenie zmiennych pomiędzy procesami 153 a następnie ustawiane są uprawnienia semaforów wskazywane przez trzeci argument funkcji (0600). Uprawnienia te działają tak jak uprawnienia plików, tak więc 0600 ozna- cza, że użytkownik, który utworzył semafor, może go odczytywać oraz zapisywać do niego. Mówiąc o „użytkowniku”, mamy na myśli nie tylko proces, który utworzył semafor, ale również każdy inny proces z tym samym identyfikatorem użytkownika. Uprawnie- nia o wartości 0600 powinny być wystarczające dla większości zastosowań, w których procesy serwera WWW działają jako procesy tego samegol użytkownika. Funkcja sem_get() zwraca identyfikator, który wskazuje na odpowiedni semafor systemu. Identyfikator ten należy zastosować do uzyskania kontroli nad semaforem za pomocą funkcji sem_acquire(). Funkcja ta czeka aż do momentu, w którym semafor będzie mógł zostać przejęty (na przykład wtedy, gdy inne procesy zwolnią semafor), po czym zwróci wartość true. W przypadku błędu zwrócona zostanie wartość false. Błędy mogą wynikać z nieprawidłowego określenia uprawnień, lub też mogą powstać, gdy ilość pamięci potrzebna do utworzenia semafora jest zbyt mała. Gdy tylko semafor zostanie przejęty, można odczytać zawartość segmentu pamięci wslpólnej. Najpierw za pomocą funkcji shm_attach() należy ustawić łącze do konkretnego seg- mentu pamięci wspólnej. Tak jak w przypadku funkcji sem_get(), pierwszym argu- mentem shm_attach() jest również klucz w postaci liczby całkowitej. Tyml razem jednak identyfikuje on pożądany segment, a nie semafor. Jeżeli segment o wskazanym kluczu nie istnieje, zostanie on utworzony przy zastosowaniu pozostałych argumentów. Drugim argumentem (16384) jest rozmiar segmentu w bajtach, natomiast ostatni argument (0600) określa uprawnienia dostępu do segmentu. Wywołanie shm_attach(200,16384,0600) spowoduje utworzenie segmentu pamięci wspólnej o pojemności 16 kilobajtów, z którego odczyt i do którego zapis będzie mógł wykonywać tylko ten użytkownik, który go utworzył. Funkcja zwraca identyfikator potrzebny do odczytu i zlapisu do segmentu pamięci wspólnej. Po połączeniu z segmentem można z niego pobierać zmienne za pomocą funkcji shm_ get_var($shm, population ). Funkcja ta przeszukuje segment pamięci wspólnej identyfikowany przez $shm i pobiera wartość zmiennej noszącej nazwę population. W pamięci wspólnej można przechowywać zmienne dowolnego typu. Gdy tylko zmien- na zostanie pobrana, można na niej wykonywać operacje tak jak na innych zmiennych. Wywołanie funkcji shm_put_var($shm, population ,$population) spowoduje umieszczenie wartości zmiennej $population z powrotem w segmencie pamięci wspólnej jako zmiennej o nazwie population. Zakończyliśmy już pracę z pamięcią wspólną. Należy się teraz z nią rozłączyć za pomocą funkcji shm_detach() i zwolnić semafor za pomocą funkcji sem_release(), aby mogły z niego korzystać inne procesy. Główną zaletą
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP. Receptury
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: