WebDeveloper
 g³ówna | forum manual | skrypty |  artyku³y |  projekty | porady |  zasoby |  linki 
dzia³y
  •  manual PHP
  •  skrypty PHP
  •  artyku³y
  •  projekty
  •  porady
  •  zasoby
  •  linki
  •  
    forum
  •  php
  •  apache
  •  mysql
  •  postgresql
  •  faq php
  •  pomocnik php
  •  
    news
  • Porcjowanie wyników zapytania
  • Kartki Internetowe
  • PHP + MySQL + Windows 98
  • Bezpieczne uploadowanie plików
  • Przegl±danie obrazków z bazy PostgreSql.
  • Co to jest WebDeveloper?
  • Instalujemy serwer baz danych !
  • Sesje w PHP4 !
  • Dodaj poradê !!!
  • Zastosowano... PHP !
  • redakcja

    Je¶li masz ciekawe informacje odno¶nie PHP, skrypty, porady, linki itp. lub chcia³by¶ wspó³tworzyæ serwis PHP.zone.pl daj nam znaæ na email !



    dodaj poradê !


    Powered by:
    PHP
    Apache
    MySql
    Linux

    users online: 8

    Artyku³y

    Kurs PHP (3)
    autor: Grzegorz Plebañski

    Krótki kurs jêzyka PHP.

    Uprawnienia

    Aby skrypt PHP móg³ odwo³aæ siê do pliku, musi mieæ odpowiednie uprawnienia. Szczegó³y s± zale¿ne od serwera. Najczê¶ciej chyba skrypt ma uprawnienia takie, jak u¿ytkownik który go umie¶ci³. Mo¿e te¿ mieæ uprawnienia u¿ytkownika nobody - wtedy ¿eby móc ze skryptu zmodyfikowaæ jaki¶ plik, trzeba nadaæ prawo zapisu wszystkim u¿ytkownikom. Dok³adne inforacje na ten temat powinien dostarczyæ administrator serwera na którym umieszczamy skrypty.


    Otwieranie plików

    Przed wykonaniem jakiejkolwiek operacji na pliku, nale¿y go otworzyæ. S³u¿y do tego funkcja fopen. Pobiera ona 2 argumenty - pierwszy to nazwa pliku który chcemy otworzyæ. Drugi parametr mo¿e mieæ nastêpuj±ce warto¶ci:
    r - otwiera plik do odczytu
    r+ - otwiera plik do odczytu i zapisu
    w - kasuje zawarto¶æ pliku i otwiera go do zapisu
    w+ - kasuje zawarto¶æ pliku i otwiera go do zapisu i odczytu
    a - otwiera plik do dopisywania
    a+ - otwiera plik do dopisywania i odczytu
    Co ciekawe, funkcja fopen mo¿e otworzyæ plik na innym serwerze przez protokó³ http (tylko odczyt), lub ftp (odczyt lub zapis, ale nie jednocze¶nie). fopen zwraca liczbê, która s³u¿y do identyfikowania otwartego pliku. Przyk³ad:
    $file=fopen("file.txt", "r"); /* otwiera plik file.txt do odczytu */
    $file=fopen("file.txt", "w"); /* otwiera plik do zapisu. Je¿eli plik
    nie istnieje, zostanie utworzony */
    $file=fopen("ftp://adres.serwera/plik", "r"); /* otwiera plik przez
    protokó³ ftp */

    Po zakoñczeniu operacji na pliku, nale¿y go zamkn±æ funkcj± fclose, np:
    $file=fopen("file.txt", "r");
    fclose($file);




    Odczyt z pliku

    Jest kilka funkcji s³u¿±cych do odczytu z pliku. Zacznê mo¿e od funkcji fgetc - odczytuje ona 1 znak z pliku:
    $znak=getc($file);

    Je¶li funkcja napotka koniec pliku, zwróci warto¶æ FALSE. Po odczytaniu znaku, pozycja w pliku jest przesuwana o 1 do przodu. Dziêki temu, po kolejnym wywo³aniu funkcji getc otrzymamy kolejny znak, a nie jeszcze raz ten sam.
    Kolejn± funkcj± jest funkcja fgets:
    $linia=fgets($file, $maxLen);

    Drugi parametr okre¶la ile znaków funkcja mo¿e odczytaæ. Trzeci± funkcj± do odczytu z pliku jest fread. Dzia³a ona podobnie do fgets, z tym ¿e nie przerywa czytania gdy natrafi na znak nowej lini.


    Zapis do pliku

    Do zapisywania w pliku s³u¿y funkcja fwrite:
    fwrite($file, $tekst, $maxLen);

    Funkcja ta zapisuje tekst podany jako 2 parametr do pliku identyfikowanego przez $file. 3 parametr jest opcjonalny i okre¶la maksymaln± d³ugo¶æ tekstu, jaka mo¿e zostaæ zapisana. Jest jeszcze funkcja fputs, ale dzia³a ona dok³adnie tak samo. W PHP czêsto wystêpuj± identyczne funkcje pod innymi nazwami - u³atwia to ¿ycie osobom przyzwyczajonym do innych jêzyków.


    Blokowanie plików

    Jak dot±d wszystko wydaje siê proste. Co jednak stanie siê, je¿eli jednocze¶nie zostan± uruchomione dwie kopie skryptu, i obie bêd± próbowa³y zmieniæ ten sam plik? Sytuacja taka jak ³atwo siê domy¶liæ, mo¿e miec przykre konsekwencje. Aby rozwi±zaæ ten problem nale¿y u¿yæ blokowania plików. S³u¿y do tego funkcja flock:
    flock($file, mode);

    Pierwszy argument funkcji flock to identyfikator otwartego pliku. Argument mode okre¶la typ dostêpu, jaki chcemy uzyskaæ. Mo¿e mieæ nastêpuj±ce warto¶ci:
    1 - dostêp do odczytu
    2 - dostêp do zapisu
    3 - zwolnienie blokady
    Je¿eli chcemy uzyskaæ dostêp do zapisu, najpierw wszystkie inne blokady musz± byæ zwolnione. Do uzyskania dostêpu do odczytu wystarczy, ze plik nie bêdzie zablokowany do zapisu - w ten sposób wiele skryptów mo¿e jednocze¶nie czytaæ z pliku, ale tylko jeden mo¿e do niego zapisywaæ. Dodatkowo w trakcie zapisu ¿aden inny skrypt nie mo¿e odczytywaæ z pliku - dziêki temu nie natrafi na niekompletne dane.

    Je¿eli okre¶lony rodzaj dostêpu nie mo¿e byæ w danej chwili uzyskany, wykonanie skryptu zostanie wstrzymane do czasu, gdy bêdzie to mo¿liwe. Plik powinien byæ blokowany na jak najkrótszy czas, aby nie wstrzymywaæ niepotrzebnie innych operacji. Je¿eli chcemy tylko sprawdziæ, czy plik jest zablokowany, do argumentu mode nale¿y dodaæ 4 - wtedy funkcja zwróci warto¶æ TRUE je¿eli plik nie jest zablokowany, lub FALSE gdy jest.
    Przyk³ad:
    $file1=fopen("jakis.plik", "r"); /* otwiera 2 razy ten sam plik */
    $file2=fopen("jakis.plik", "r");

    flock($file1, 2); /* blokuje pierwsz± kopie */

    if(flock($file2, 6)) /* funkcja flock zwróci false, poniewa¿ plik */
    { /* jest ju¿ zablokowany */
    echo("Plik nie zablokowany");
    }else{
    echo("Plik zablokowany");
    }

    flock($file, 3); /* odblokowuje plik */




    Inne funkcje

    PHP zawiera wiele funkcji s³u¿±cych do obs³ugi plików. Oto niektóre z nich:
    file_exists(nazwa) - sprawdza, czy istnieje plik o podanej nazwie
    filegroup(nazwa) - zwraca identyfikator grupy, do której nale¿y plik
    fileowner(nazwa) - zwraca identyfikator w³a¶ciciela pliku
    filesize(nazwa) - zwraca rozmiar pliku o podanej nazwie
    ftell($file) - zwraca pozycjê w otwartym pliku
    is_readable(nazwa) - sprawdza, czy skrypt ma uprawnienia do odczytania pliku
    is_writeable(nazwa) - sprawdza, czy skrypt mo¿e zapisaæ do pliku
    mkdir(nazwa) - tworzy katalog o podanej nazwie
    readfile(nazwa) - wy¶wietla zawarto¶æ pliku



    Prosty licznik tekstowy

    Licznik tekstowy pos³u¿y jako praktyczny przyk³ad wykorzystania dostêpu do plików:
    if(file_exists("counter.n")) /* sprawdza, czy plik istnieje */
    {
    $file=fopen("counter.n", "r"); /* otwiera plik */
    flock($file, 1); /* blokuje plik */

    $ile=fgets($file, 100); /* odczytuje warto¶æ */

    flock($file, 3); /* odblokowuje plik */
    fclose($file); /* zamyka plik */

    $ile++; /* zwiêksza warto¶æ o 1 */
    }
    else
    $ile=1; /* je¶li plik nie istnieje, wy¶wietli siê 1 */

    $file=fopen("counter.n", "w"); /* otwiera plik do zapisu */
    flock($file, 2); /* blokuje do zapisu */

    fwrite($file, $ile); /* zapisuje warto¶æ */

    flock($file, 3); /* odblokowuje plik */
    fclose($file); /* zamyka plik */

    echo($ile); /* wy¶wietla warto¶æ */

    Ten skrypt odczytuje z pliku warto¶æ, zwiêksza j± o 1, a nastêpnie wy¶wietla na stronie. Je¿eli plik counter.n nie istnieje, skrypt spróbuje go utworzyæ. Ten licznik zwiêkszy siê za ka¿dym razem gry u¿ytkownik wejdzie na stronê, lub j± od¶wie¿y. Licznik odporny na od¶wie¿anie poka¿e w czê¶ci 4.


    (C)opyright 1999-2000 by Grzegorz Plebañski
    ygreg@and.pl
    http://ygreg.and.pl





    komentarze | artyku³y






    kontakt

    autor:

    Hubert Mierzwiak

    wspó³praca:

    Piotr Karolak

    Chcesz prowadziæ swój dzia³ tematyczny typu XML, SQL, admin, JavaScript, itp?
    Napisz do nas !
     
    skrypty
  • designer.zip
  • vipAuth.tgz
  • phpCenzura.tgz
  • vip_php.tgz
  • pomocnik_light
  • ankieta
    Co s±dzisz o stworzeniu FAQ PHP?
    super!
    po co?

    poprzednie

    newsletter

    wpisz swój email i wci¶nij Enter

    linuxnews.pl
  • KRRiTV stra¿nikiem!?
  • Dzisiejsze zebranie...
  • Felieton w warunkach ekstremalnych
  • Nexidion Designer
  • Solaris OpenSource
  • KDE 2.0.1
  • Jest ju¿ nowy Debian...
  • Tydzieñ min±³...




  • Manual | Skrypty | Artyku³y | Projekty
    Porady | Zasoby | Linki
    G³ówna | Forum

    Copyright 2000 Hubert Mierzwiak