Instrukcje dołączania plików W języku PHP dostępne są dwie instrukcje pozwalające na włączeniu do kodu skryptu zawartości innego pliku zawierającego kod PHP. Instrukcje include() oraz require( ) przyjmują jeden argument, którym jest nazwa pliku lub cała ścieżka dostępu do pliku, mającego znajdować się na innym serwerze. include(nazwa_pliku.php); require(nazwa_pliku.php); Obie instrukcje wywołują się podobnie, ale występują między nimi różnice. Przy wywołaniu instrukcji require() nazwa pliku nie może zostać pobrana ze zmiennej, include() zaś daje taką możliwość. W przypadku gdy plik nie zostanie odnaleziony, require() wygeneruje błąd Fatal error i zatrzyma skrypt. Natomiast include() jedynie wyświetli ostrzeżenie. Zadanie 1. Przetestuj. Zawartość pliku pierwszy.php: <?php function lancuch($znak,$dlugosc) { for($i=0;$i<$dlugosc;$i++) print($znak); print("<br />"); } lancuch("@",10); lancuch("#",5); lancuch("$",15); ?> Zawartość pliku drugi.php: <?php print("Zawartość pliku pierwszy.php: <br />"); include("pierwszy.php"); print("Wywołanie funkcji z pliku pierwszy.php: <br />"); lancuch("*",20); ?> Include_once oraz Require_once Istnieją jeszcze drobne modyfikacje powyższych dwóch komend załączających pliki. Noszą nazwy include_once() oraz require_once(). Różnią się od swoich odpowiedników wyłącznie tym, że mimo kilku wywołań w jednym skrypcie, plik zostanie załączony wyłącznie raz, co uchroni nas przed przypadkowym załączeniem jednego pliku kilka razy. Tablice Tablica jest zmienną przechowującą zbiór określonych wartości (elementów). Tablica jest zmienną strukturalną i wobec jej nazwy obowiązują te same reguły co dla zmiennych prostych, czyli przed nazwą umieszczony zostaje znak $. Pierwszy sposób deklaracji tablicy to użycie słowa kluczowego array: $nazwa_tablicy=array(element1, element2, …, elementn); Drugi sposób: $nazwa_tablicy[]=element1; $nazwa_tablicy[]=element2; … $nazwa_tablicy[]=elementn; Zadanie 1. Wykorzystując tablice i pętlę for, napisz skrypt wyświetlający 10 liczb wygenerowanych przez funkcję losującą z przedziału od 1 do 100. Sortowanie tablic PHP ofertuje cały zestaw funkcji służących do sortowania tablic. Są to: • • • • • • • • asort() arsort() ksort() rsort() sort() uasort() usort() uksort() Większość funkcji (oprócz trzech ostatnich) przyjmuje jeden parametr: zmienną zawierającą tablicę do posortowania. Żadna z funkcji nie zwraca żadnego wyniku. Jeden ze sposobów deklaracji tablicy asocjacyjnej (takiej, która zamiast zwykłych indeksów numerycznych stosuje indeksy znakowe zwane kluczami) to użycie słowa array oraz kluczy pełniących podobną rolę jak indeksy w zwykłej tablicy: $nazwa_tablicy=array(klucz1=>element1, …, kluczn=>elementn); Kolejny sposób: $nazwa_tablicy[klucz1]=element1; … $nazwa_tablicy[kluczn]=elementn; Zadanie 2. Sprawdź co wykona poniższy skrypt: <?php $owoce = array ("d"=>"mango", "a"=>"papaja", "b"=>"banan", "c"=>"aronia"); asort ($owoce); reset ($owoce); // Funkcja ta powoduje powrót do pierwszego elementu tablicy while (list ($klucz, $wartosc) = each ($owoce)) { echo "$klucz = $wartosc "; } ?> Sortowanie tablic.php <? $produkty = array("Ksiazki","Filmy VHS","Filmy DVD", "filmy DVD", "Plyty CD", "Plyty VCD"); echo "Oto produkty:<br>"; for($i=0; $i<6; $i++) echo $produkty[$i]."<br>"; sort($produkty); echo "Oto sortowane produkty:<br>"; for($i=0; $i<6; $i++) echo $produkty[$i]."<br>"; rsort($produkty); echo "Oto sortowane odwrotnie produkty:<br>"; for($i=0; $i<6; $i++) echo $produkty[$i]."<br>"; $ceny = array(1, 34, 3.45, 445, -23, 100,1000,10000, 10000, 1.2e+8); sort($ceny); for($i=0; $i<sizeof($ceny); $i++) echo $ceny[$i]."<br>"; ?> Operacje na plikach Zanim zaczniemy coś zapisywać, bądź też odczytywać z pliku, musimy go najpierw otworzyć, oraz skojarzyć z jakąś zmienną z której będziemy później korzystać przy odwoływaniu się do niego. W podanych tu przykładach będzie to zmienna $plik (ambitna nazwa, no nie ? ;)). Do otwarcia pliku służy funkcja fopen(). Posiada dwa argumenty. Pierwszy to nazwa pliku, natomiast drugi, to tryb w jakim plik ma być otworzony. To co funkcja zwraca przypisujemy do naszej zmiennej $plik. Czyli np. $plik = fopen("pliczek.txt","w+"); Teraz troszkę o drugim parametrze, może on przyjmować następujące wartości: a Otwiera plik do dopisywania danych. Dane będą dodawane na końcu pliku a+ Otwiera plik do oczytu i dopisywania danych. Dane będą dodawane do końca pliku r Otwiera plik tylko do odczytu (również plików za pomocą protokołu HTTP) r+ Otwiera plik do odczytu i zapisu. Dane będą dodawane na początku pliku w Otwiera plik tylko do zapisu. Jeżeli plik istnieje wszystkie dane zostaną skasowane, jeżeli nie, PHP spróbuje go utworzyć Otwiera plik do odczytu i zapisu. Jeżeli plik istnieje w+ wszystkie dane zostaną skasowane, jeżeli nie, PHP spróbuje go utworzyć Jeżeli otwieramy plik do odczytu, dopuszczalne jest także podanie adresu HTTP (chyba że jest to zablokowane na serwerze). Czyli możemy np napisać: $plik = fopen("http://www.example.com/", "r"); 1. przykład na sprawdzenie istnienia pliku: <BODY> <FORM METHOD="post" ACTION="istnieje.php"> <P>Podaj sciezke i nazwe pliku:</p> <INPUT TYPE="text" NAME="plik" > <P><INPUT TYPE="submit" NAME="submit" VALUE="Szukaj"></p> </FORM> <?php $plik=$_POST['plik']; if (file_exists($plik)) echo "<strong>Znalazlem plik $plik!!!</strong>"; else echo "<strong>Nie ma pliku $plik!!!</strong>"; ?> </BODY> 2. Przykład na tworzenie pliku <BODY> <FORM METHOD="post" ACTION="tworzy.php"> <P>Podaj sciezke i nazwe pliku:</p> <INPUT TYPE="text" NAME="plik" > <P><INPUT TYPE="submit" NAME="submit" VALUE="Nowy plik"></p> </FORM> <?php $plik=$_POST['plik']; if (file_exists($plik)) echo "<p><strong>Plik $plik już istnieje!!!</strong><p>"; elseif ($plik != "") { fopen($plik, "w+"); echo "<p><strong>Utworzono plik: $plik</strong><p>"; } ?> </BODY> 3. Przykład do zapisania do pliku: <FORM METHOD="post" ACTION="do_pliku.php"> <P>Podaj sciezke i nazwe pliku:</p><INPUT TYPE="text" NAME="plik" ></br> <p>Wpisz teskt:</p> <TEXTAREA NAME="tekst" COLS=45 ROWS=5 WRAP=virtual></TEXTAREA> <P><INPUT TYPE="submit" NAME="submit" VALUE="Wpisz do pliku"></p> </FORM> <?php $plik=$_POST['plik']; $tekst=$_POST['tekst']; if (file_exists($plik) && ($plik !="") && ($tekst !="")) { echo "<p><strong>Znalazlem plik $plik!!!</strong></p>"; $file = @fopen($plik, "w+") or die ("<p><strong>Nie udalo sie otworzyc pliku</strong></p>"); fwrite($file, $tekst); fclose($file); echo "<p><strong>Zapisalem do niego tekst: $tekst</strong></p>"; } else echo "<strong>Nie ma pliku $plik!!!</strong>"; ?> </BODY> 4. Czytanie z pliku <BODY> <FORM METHOD="post" ACTION="z_pliku.php"> <P>Podaj sciezke i nazwe pliku:</p><INPUT TYPE="text" NAME="plik" ></br> <P><INPUT TYPE="submit" NAME="submit" VALUE="Czytaj z pliku"></p> </FORM> <?php $plik=$_POST['plik']; $file = fopen($plik, "r"); $msg = fread($file, filesize($plik)); fclose($file); echo "$msg"; ?> </BODY> Sortowanie z pliku tekstowego <? /* skrypt odczytuje wszystkie liczby z pliku Liczby.txt, wczytuje je do tablicy, sortuje je od najmniejszej do największej po czym zwraca je do formularza; */ $plik=fopen('Liczby.txt','r'); $x=0; while (!feof($plik)) //wczytanie liczb do tablicy { $tab1[$x]=fgets($plik); $tab[$x]=(int)$tab1[$x]; $x++; } sort($tab); $k=0; while ($k<=$x) //wypisanie wyniku {echo $tab[$k]; echo "<br>"; $k++; } fclose($plik); ?> Wstawić do tablicy losowo liczby ujemne i dodatnie. Następnie zliczyć ilość liczb dodatnich i ujemnych. <?php for ($i=1;$i<=10;$i++) { $a=rand(-10,10); $tab[$i]=$a; } echo "Losowe liczby do sprawdzenia: "; for ($i=1;$i<=10;$i++) { echo "$tab[$i]; "; } $d=0; $u=0; for ($i=1;$i<=10;$i++) { if ($tab[$i]>0) { $d++; } else { $u++; } } echo"<br>"; echo "W danym zbiorze liczb dodatnich jest: $d"; echo"<br>"; echo "W danym zbiorze liczb ujemnych jest: $u"; ?> wprowadzić 3 liczby, wybrać z nich największa i najmniejszą <html> <head> <body> <FORM ACTION="4_licz.php" METHOD="post"> <INPUT TYPE="text" NAME="l1"> 1liczba<br> <INPUT TYPE="text" NAME="l2"> 2liczba<br> <INPUT TYPE="text" NAME="l3"> 3liczba<br> <INPUT TYPE="text" NAME="l4"> 4liczba<br> <INPUT TYPE="SUBMIT" VALUE="WYKONAJ!!!"> </FORM> </body> </head> </html> <?PHP $liczby[0]=$l1; $liczby[1]=$l2; $liczby[2]=$l3; $liczby[3]=$l4; sort($liczby); for ($i=0;$i<4;$i++) { echo $liczby[$i]; echo "<br>"; } echo "największa LICZBA ".$liczby[0]; echo "<br>"; echo "największa LICZBA ".$liczby[3]; ?> Licznik.php <html> <body> <?php sleep(1); if(!(file_exists("licznik.txt"))) { //jesli nie istnieje $plicznik=fopen("licznik.txt", "w+"); //to jest tworzony fputs($plicznik, "0"); fclose($plicznik); // wpisujemy "0" } $plicznik=fopen("licznik.txt", "r+"); //otwarcie "RW" flock($plicznik,2); $liczba=fgets($plicznik,10); //pobranie ilosci odwiedzin echo ("<strong>Liczba odwiedzin: $liczba </strong>"); $liczba++; //zwiększenie ilosci o 1 fseek($plicznik,"0"); //wskaznik na poczatek fputs($plicznik, $liczba); //wpisanie liczby do pliku flock($plicznik,3); fclose($plicznik); ?> </body> </html>