380 likes | 539 Views
Kurs WWW – wykład 8. Paweł Rajba pawel@ii.uni.wroc.pl http://www.ii.uni.wroc.pl/~pawel/. PHP – obsługa plików. int fopen (string nazwa, string tryb) otwiera plik lub URL nie są obsługiwane przekierowania (należy URL kończyć slaszem) tryby
E N D
Kurs WWW – wykład 8 Paweł Rajba pawel@ii.uni.wroc.pl http://www.ii.uni.wroc.pl/~pawel/
PHP – obsługa plików • int fopen(string nazwa,string tryb) • otwiera plik lub URL • nie są obsługiwane przekierowania (należy URL kończyć slaszem) • tryby • r – otwiera plik tylko do odczytu i ustawia wskaźnik na początku pliku • r+ – otwiera plik do odczytu i zapisu oraz ustawia wskaźnik na początku pliku
PHP – obsługa plików • tryby c.d. • w – otwiera plik tylko do zapisu i ustawia wskaźnik na początku pliku; zawartość pliku jest usuwana lub jeśli plik nie istnieje to jest tworzony • w+ – otwiera plik do odczytu i zapisu oraz ustawia wskaźnik na początku pliku; zawartość pliku jest usuwana lub jeśli plik nie istnieje to jest tworzony • a – otwiera plik do zapisu; ustawia wskaźnik na końcu pliku; jeśli plik nie istnieje to jest tworzony • a+ – otwiera plik do odczytu i zapisu; ustawia wskaźnik na końcu pliku; jeśli plik nie istnieje to jest tworzony
PHP – obsługa plików • fopen – przykłady: $fp= fopen("/home/pawel/plik.txt", "r"); $fp= fopen("/home/pawel/img.jpg", "rb"); $fp= fopen("http://www.php.net/", "r"); $fp= fopen("ftp://jjs:tajne@wp.pl/", "w"); $fp = fopen("c:\\dane\\plik.txt", "r");
PHP – obsługa plików • string fgetc(int fp) • pobiera znak z wskaźnika pliku • jeśli jest koniec pliku, to zwraca FALSE • string fgets(int fp [, int długość]) • pobiera linię z wskaźnika pliku • możemy określić długość • domyślna długość wiersza, to 1024 znaki • jeśli jest koniec pliku, to zwraca FALSE
PHP – obsługa plików • string fgetss(int fp, int długość [, string dozwolone_tagi]) • pobiera linię ze wskaźnika pliku i usuwa tagi HTML i PHP • $linia = fgetss($fp,4096,"<i><b>"); • string fread(int fp, int długość) • czyta z pliku binarnie do długość bajtów • czytanie się kończy po odczytaniu długość bajtów lub po osiągnięciu końca pliku
PHP – obsługa plików • mixed fscanf(int fp, string format) • przetwarza dane z pliku wg formatu $fp = fopen("punkty.txt","r"); while ($row=fscanf($fp,"%s\t%d\n")) { // zrób coś z wartościami } fclose($fp); • plik.txt: dziki 200 łysy 60 warzywo 120
PHP – obsługa plików • array fgetcsv(int fp, int długość [, string delimiter]) • czyta linię w formacie CSV • przetwarza i zwraca tablicę zawierającą odczytane pola • domyślnym separatorem jest "," • Przykład: $fp = fopen ("wiersz.csv","r"); $data = fgetcsv ($fp, 1000, ":"); for ($c=0; $c<count($data); $c++) { print $data[$c]."|"; } fclose ($fp);
PHP – obsługa plików • int fwrite(int fp, string napis [, int length]) • zapisuje do wskaźnika pliku • można określić długość • fwrite($fp,"ząbek"); fwrite($fp,"ząbek"); // będą zapisane obok siebie • int fputs(int fp, string str [, int długość]) • alias do funkcji fwrite • bool fclose(int fp) • zamyka otwarty wskaźnik pliku i zwraca TRUE lub FALSE
PHP – obsługa plików • int copy(string źródło, string przeznaczenie) • kopiuje plik • jeśli plik docelowy istnieje, to zostanie nadpisany • Przykład: if (!copy($file, $file.'.bak')) { print ("Błąd przy kopiowaniu.<br>\n"); } • bool rename(stara_nazwa, nowa_nazwa) • zmienia nazwę pliku • rename("c:\\plik1.txt","c:\\plik2.txt");
PHP – obsługa plików • int unlink(string nazwa_pliku) • kasuje plik • zwraca TRUE lub FALSE • w przypadku braku pliku pojawi odpowiednie ostrzeżenie • bool file_exists(string nazwa_pliku) • sprawdza, czy plik istnieje • int filesize(string nazwa_pliku) • zwraca rozmiar pliku w bajtach
PHP – obsługa plików • int ftruncate(int fp, int rozmiar) • przycina plik fp do podanego rozmiaru • int mkdir(string pathname, int mode) • tworzy katalog • jeżeli istnieje, to pojawi się odpowiednie ostrzeżenie • mkdir("/path/to/my/dir", 0700); • bool rmdir( string dirname) • usuwa katalog • jeżeli katalogu nie ma, to pojawi się odpowiednie ostrzeżenie
PHP – obsługa plików • string dirname(string ścieżka) • zwraca ścieżkę podanego pliku • print dirname("c:\\xxx\\plik.txt"); // zwróci c:\xxx • bool is_dir(string nazwa) • mówi o tym, czy nazwa jest katalogiem • bool is_file(string nazwa) • mówi o tym, czy nazwa jest zwykłym plikiem
PHP – obsługa plików • array pathinfo(string path) • zwraca informację o path • <?php $p = pathinfo("/www/htdocs/index.html"); echo $p["dirname"]."<br>\n"; echo $p["basename"]."<br>\n"; echo $p["extension"]."<br>\n"; ?> • /www/htdocs index.html html
PHP – obsługa plików • int fseek(resource handle, int offset [, int whence]) • ustawia kursor na odpowiedniej pozycji w pliku • opcję whence można ustawić na • SEEK_SET – ustawia kursor na pozycji równej dokładnie offset (domyślne) • SEEK_CUR – ustawia kursor na pozycji bieżąca+offset • SEEK_END – ustawia kursor na pozycji koniec pliku+offset • fseek($fp,-2,SEEK_END); // na dwa znaki od końca
PHP – obsługa plików • bool rewind(fp) • ustawia kursor na początku pliku • int ftell(fp) • zwraca pozycję kursora w pliku • string tempnam(string dir, string prefix) • tworzy plik tymczasowy w katalogu dir o unikalnej nazwie zaczynającej się od prefix
PHP – obsługa plików • Przykład: pliki.html, punkty.txt
PHP – formularze • Jak to działa? • Tablice zawierające przesłane dane • $_POST[ ] ($HTTP_POST_VARS[ ]) • $_GET[ ] ($HTTP_GET_VARS[ ]) • Przykład: login.php, gratulacje.html • Skalarne i wielowartościowe elementy formularza – przykład: dane.php
PHP – formularze • Kontrola poprawności danych formularza • za pomocą wyrażeń regularnych • za pomocą kontroli typów
PHP – wyrażenia regularne • Wyrażenia regularne • ereg– sprawdza dopasowanie do wyrażenia bool ereg(string pattern,string string [, array regs]) • eregi– j.w., tylko funkcja jest case insensitive • ereg_replace– wymienia wyrażenie regularne string ereg_replace ( string pattern, string replacement, string string) • eregi_replace– j.w., tylko funkcja jest c. i.
PHP – wyrażenia regularne • Wyrażenia regularne • split – dzieli napis na elementy rozdzielone przez wyrażenie regularne; zwraca tablicę tych elementów array split(string pattern, string string [, int limit]) • spliti– j.w., tylko funkcja jest c.i. • Przykład: regexp.php
PHP – obsługa MySQL • resource mysql_connect( [string serwer [,string użytkownik [,string hasło]]]) • łączy z bazą danych • domyślnie • serwer: "localhost:3306" • użytkownik: user będący właścicielem procesu MySQL • hasło: ""
PHP – obsługa MySQL • int mysql_create_db(string nazwa_bazy [, resource identyfikator_połączenia]) • tworzy bazę danych • bool mysql_select_db(string nazwa_bazy [, resource identyfikator_połączenia]) • wybiera bazę danych
PHP – obsługa MySQL • resource mysql_query(string zapytanie [, resource identyfikator_połączenia [, int typ_wyniku]]) • wykonuje zapytanie zwracając zasoby • zapytania nie powinno się kończyć średnikiem • typ_wyniku może przyjmować następujące wartości: • MYSQL_USE_RESULT • MYSQL_STORE_RESULT (domyślne, wynik jest buforowany)
PHP – obsługa MySQL • resource mysql_unbuffered_query(string zapytanie [, resource identyfikator_połączenia [, int typ_wyniku]]) • wysyła zapytanie nie pobierając i buforując wyniku • ma znaczenie przy zapytaniu generującemu duże wyniki; znacznie oszczędza pamięć • nie trzeba czekać na zakończenie zapytania; można od razu pracować na pierwszej krotce • nie można użyć funkcji mysql_num_rows() • przed wysłaniem kolejnego zapytania należy pobrać wszystkie wiersze.
PHP – obsługa MySQL • int mysql_insert_id([resource id_połączenia]) • podaje numer ID wygenerowany przez auto_increment podczas ostatniej operacji INSERT <?php mysql_connect('localhost', 'user', 'pass') or die('Nie można się połączyć'); mysql_select_db('test'); mysql_query("INSERT INTO osoba(imie,nazwisko,...) values ('Paweł','Rajba',...)"); printf("Ostatnio dodany rekord ma id %d\n", mysql_insert_id()); ?>
PHP – obsługa MySQL • array mysql_fetch_array(resource wynik [, int typ_wyniku]) • zapisuje wiersz wyniku w tablicy asocjacyjnej lub zwraca null gdy nie ma więcej wierszy • typ_wyniku • MYSQL_ASSOC • MYSQL_NUM • MYSQL_BOTH (domyślne, zwraca tablicę asocjacyjną i indeksowaną numerycznie)
PHP – obsługa MySQL • array mysql_fetch_assoc(resource wynik) • równoważne mysql_fetch_array( _ , MYSQL_ASSOC) • array mysql_fetch_row(resource wynik) • równoważne mysql_fetch_array( _, MYSQL_NUM) • bool mysql_free_result(resource wynik) • zwraca całą pamięć przydzieloną wynikowi
PHP – obsługa MySQL • string mysql_error([resource id_połączenia]) • zwraca tekst komunikatu z ostatnio wykonanej operacji • int mysql_errno([resource id_połączenia]) • zwraca numer komunikatu błędu z ostatnio wykonanej operacji • bool mysql_close([resource id_połączenia]) • zamyka połączenie z serwerem
PHP – obsługa MySQL • int mysql_num_rows(resource wynik) • zwraca liczbę wierszy w wyniku • stosuje się do polecenie SELECT • int mysql_affected_rows([resource conn_id]) • zwraca liczbę przetworzonych wierszy • stosuje się do poleceń UPDATE, INSERT, DELETE • jeżeli DELETE zostanie wywołany bez klauzuli WHERE, to wtedy funkcja zwróci wartość 0
PHP – obsługa MySQL • bool mysql_data_seek( resource identyfikator_wyniku, int numer_wiersza) • przesuwa wewnętrzny wskaźnik do pozycji numer_wiersza • array mysql_fetch_lengths(resource wynik) • pobiera długość każdego pola pobranego za pomocą funkcji mysql_fetch_row (muszą być numerki)
PHP – obsługa MySQL • mysql_fetch_lengths – przykład: <?php ... $row = mysql_fetch_array($result,MYSQL_BOTH); $len = mysql_fetch_lengths($result); print $row["id"]." "; print $row["name"]." "; print $row["salary"]."<br>\n"; print $len[0]." ".$len[1]." ".$len[2]."<br>\n"; ... ?>
PHP – obsługa MySQL • string mysql_field_table( resource wynik, int ofset_pola) • pobiera nazwę tabeli w której znajduje się dane pole • może mieć znaczenie przy złączeniach • int mysql_num_fields(resource wynik) • zwraca liczbę pól w wyniku • string mysql_field_name( resource wynik, int indeks_pola) • podaje nazwę danego pola w wyniku
PHP – obsługa MySQL • string mysql_field_type( resource wynik, int ofset_pola) • pobiera typ podanego pola (int, real, string, ...) • int mysql_field_len( resource wynik, int ofset_pola) • zwraca długość podanego pola • resource mysql_list_fields(string baza, string tabela [, resource identyfikator_połączenia]) • zwraca informację o polach
PHP – obsługa MySQL • mysql_list_fields – przykład <?php ... $fields = mysql_list_fields('test','emp', $link); $columns = mysql_num_fields($fields); for ($i = 0; $i < $columns; $i++) { echo mysql_field_name($fields, $i).":"; echo mysql_field_type($fields, $i).":"; echo mysql_field_len($fields, $i)."<br>\n"; } ... ?> //id:int:11 //name:string:20 //salary:int:11
PHP – obsługa MySQL • resource mysql_list_tables(string baza [, resource identyfikator_połączenia]) • pobiera nazwy tabel z baza • string mysql_tablename(resource wynik, int i) • pobiera nazwę i-tej tabeli z wyniku funkcji mysql_list_tables
PHP – obsługa MySQL • Przykład: <?php ... $result = mysql_list_tables('test'); while ($row = mysql_fetch_row($result)) { printf ("Tabela: %s\n",$row[0]); } for ($i=0; $i<mysql_num_rows($result); $i++) { printf ("Tabela:%s\n", mysql_tablename($result,$i)); } ... ?>
PHP – obsługa MySQL • Przykład: tabela.php, bazooka.php