Szybki eksport danych do CSV

komputerek_phpSą takie sytuacje, gdy użytkownik korzystający ze strony internetowej, chce pozyskać zawartość tabeli lub też raportu, celem dalszej pracy z danym (np: wykorzystania danych w celu wykonania tradycyjnej papierowej korespondencji seryjnej). Do niedawna wymagało to od programisty pełnego oprogramowania funkcji eksportujących dane do pliku. Od wersji PHP 5.1.0 jest to znacznie łatwiejsze gdyż udostępniono nowa funkcję fputcsv ($handle, $fields), której zadaniem jest “wpychanie” danych tablicy do plików CSV.

Czytaj dalej

Duża liczba użytkowników = krótki czas trwania sesji

komputerek_phpJednym z bardziej oczywistych sposobów na obsługę sytemu autoryzacji w PHP jest korzystanie ze zmiennych sesyjnych. Jest to w miarę proste i eleganckie rozwiązanie. Schody zaczynają się jednak w momencie, gdy liczba użytkowników rozbudowanego serwisu zwiększa się do tak dużej liczby, że dane utrzymywane w zmiennych sesyjnych będą zajmować maksymalne ilości pamięci zapisane w konfiguracji serwera. W takich sytuacjach długość trwania sesji ulegnie drastycznemu skróceniu a użytkownicy będą notorycznie wylogowywani z serwisu.

Wyczerpywanie limitu pamięci spowoduje, że zwiększanie wartości session.gc_maxlifetime w ini_set nie będzie dawało żadnych wymiernych korzyści. Garbage collection i tak notorycznie będzie niszczył najstarsze nieaktywne sesje. Ciągła rotacja powracających wylogowanych użytkowników będzie powodowała krótkie trwanie pozostałych sesji.
Czytaj dalej

Kaskadowe usuwanie rekordów w MySQL (mechanizm składowania InnoDB)

komputerek_mysqlWielu programistów korzystających w swoich projektach z tandemu złożonego z PHP i MySQL poświęca swój czas na programową obsługę integralności danych znajdujących się w bazie. Jest oczywiście całkiem duże grono osób, które zupełnie nie zaprzątają sobie tym głowy. Śmietnik w bazie danych oczywiście nie zaszkodzi prostym małym projektom i może najwyżej zaszkodzić reputacji programisty tworzącemu tego typu serwisy. W przypadku rozbudowanych aplikacji w których baza danych składa się z dziesiątek tabel rozrastających się w trakcie życia projektu do rozmiarów liczonych w gigabajty, porządek jest już rzeczą niebagatelną i relatywnie wpływającą na szybkość działania witryny. Właśnie w takich przypadkach warto skorzystać z mechanizmów jakie oferują relacyjne bazy danych.

Czytaj dalej

MySQL NULL == (decimal) 0.00

komputerek_phpDziś MySQL zapewnił mi dość ciekawe doświadczenie. Spotkałem się z dziwną właściwością tej bazy danych. Jedna z tabel jaką wykorzystuję w pracy ma zdefiniowane pole WYNIK jako: decimal(3,2) a domyślna komputerek_mysqlwartość tego pola to NULL. Tabela ta jest wykorzystywana jako miejsc w którym trzymane są wyniki testów punktowanych lub zapisywany jest bieżący stan odpowiedzi.

W zależności od zawartości pola WYNIK test traktowany jest jako zapisany (wartość NULL) lub wysłany (wartość liczbowa decimal z uzyskanym wynikiem). W ostatnim czasie spotkałem się z dziwnym zachowaniem tego mechanizmu testów punktowanych. Korzystając z formularza otwartego w kilku oknach, można było nadpisać pierwotnie wysłane dane z odpowiedziami testu. Błąd ten wynikał z faktu, że mechanizm nie rozpoznawał w prawidłowy sposób statusu wysłanego testu. Było to o tyle dziwne, że patrząc od strony rekordów znajdujących się w bazie danych wyglądało to całkowicie prawidłowo.

Czytaj dalej