Application Programming Interface (Interfejs Programowania Aplikacji ?) Czyli wszystko co powinniscie wiedziec zanim zaczniecie bawic sie w programistow edytujac kod aplikacji, piszac wlasne dodatki etc. Ustawienia php.ini: ------------------- Ustawienia php sa na roznych serwerach rozne. Poniewaz sugoclan bedzie aplikacja uzywana przez przerozne osoby w przeroznych krajach na przeroznych serwerach o przeroznych konfiguracjach, nie mozemy zatem wymagac jakis specyficznych ustawien w php.ini. Kod musi dzialac na kazdej konfiguracji, oszczedzi to klopotu uzytkownikom instalujacym skrypty oraz nam deweloperem, gdyz bedzie mniej postow/mailow od uzytkownikow z pytaniami czemu to czy tamto nie dziala, czemu tu wyskakuje blad etc. Wszelki kod ktory bedzie sie znajdowal w sugoclan musi byc zgodny z ponizszymi zaleceniami. # error_reporting E_ALL Pracujemy z error_reporting ustawionym na E_ALL. Należy zainicjowac wszelkie zmienne (indeksy tablic etc) przed uzyciem. # register_globals Off Nie korzystamy z automatycznego rejestrowania zmiennych typu GET POST COOKIE jako zmienne globalne. W skrypcie wywolanym poprzez http://localhost/test.php?id=12 zmienna id pobieramy uzywajac $_GET['id'], nie zas $id. Nalezy przy tym pamietac o error_reporting ustawionym na E_ALL, indeks 'id' wcale nie musi istniec, gdy osoba o zlych zamiarach usunie z linka ?id=12, probujac rozgryzc nasz skrypt, zostanie wywolany blad przez php. Nalezy zatem robic to jednym z ponizszych sposobow: $id = isset($_GET['id']) ? $_GET['id'] : null; $id = @$_GET['id']; $id = get('id'); // zalecane! W bibliotece sugolib4.php znajduja sie 3 funkcje do pobierania zmiennych GPC: get(), post(), cookie(). Umozliwiaja one takze pobieranie wielu zmiennych GPC do jednej tablicy. Przyklad: $get = get(array('id', 'action')); // dostepne beda: $get['id'], $get['action'] # short_open_tag Off Nie jest dozwolone uzywanie krotkich tagow php, czyli: Nalezy pisac: # magic_quotes_gpc Off Zmienne GPC sa pozbawione automatycznego slashowania, co umozliwia ataki na zapytania sql. Jednakże przy uzywaniu klasy Db z biblioteki sugolib4.php to nam nie grozi, gdyz jest mechanizm zabezpieczajacy przed tym - automatyczne wiazanie zmiennych. Przyklady: $Db->execute("DELETE FROM news WHERE id_news = ?", $id); co odpowiada: $id = addslashes($id); mysql_query("DELETE FROM news WHERE id_news = '$id'"); # allow_call_time_pass_reference Off Przekazywanie zmiennych przez referencje dozwolone tylko w definicji funkcji, nie jest dozwolone uzywanie referencji przy wywolywaniu funkcji. function test($arr) {} test(&$tbl); // zle function test(&$arr) {} test($tbl); // ok