Programując tabele z dużą ilością pól, siłą rzeczy musimy przesyłać również duże ilości zmiennych POST do serwera. Cichym problemem jest domyślne ograniczenie wielu konfiguracji PHP. Problem zauważany jest zazwyczaj dopiero po dłuższym czasie używania programu szczególnie wtedy, gdy pola generują się dynamicznie i z czasem jest ich coraz więcej. Przy PHP trzeba odpowiednio wcześniej przewidzieć ilość i wielkość przesyłanych danych i odpowiednio skonfigurować serwer. Jeżeli tych danych może być naprawdę wielka ilość, to trzeba rozważyć, czy nie będzie lepiej jeżeli podzieli się je w jakiś sposób na części. Ale jeżeli przewidujemy, że nie będzie ich aż tak wiele, to można po prostu zwiększyć ilość danych przyjmowaną przez PHP. Służy do tego kilka ustawień zmiennych konfiguracyjnych.
Pierwsza zmienna konfiguracyjna, która nam się może przydać, to
max_input_vars
ustala ona ilość zmiennych, które PHP zaakceptuje. Przy większej ilości zmienne będą odrzucane a dane nie trafią na serwer. Dotyczy to oddzielnie zarówno zmiennych typu GET, POST jak i COOKIE. Często właśnie przy dużej ilości pól typu POST gubią się ostatnie dane które wysyłane są na końcu. Domyślna wartość tej zmiennej to 1000.
Druga ciekawa zmienna, której ustawienie może powodować problemy ze zmiennymi przesyłanymi na serwer to
post_max_size
ustala ona rozmiar wszystkich danych, które mogą być jednorazowo przez POST wysłane. Jeżeli ilość danych wysłanych na serwer przekroczy tą wartość, również i one zostaną odrzucone. Domyślna wartość to 8M. Wpisanie 8MB danych w pola POST jest zadaniem raczej trudnym, ale jeżeli przy tym importować będziemy jakiś plik, to już łatwo sobie wyobrazić możliwość przekroczenia tej wartości.
Dodatkowo muzimy zwrócić uwagą na sprawę dodatkową ale powiązaną. Przy zmianie zmiennej
upload_max_filesize
musimy pamiętać też o zmianie post_max_size. Zmienna ta ustala maksymalną wielkość przesyłanego na serwer pliku. Nie może być ona większa niż post_max_size. Jeżeli ustawi się tylko upload_max_filesize a post_max_size będzie mniejsze, to wielkość przesyłanego pliku i tak będzie ograniczona przez post_max_size i plik zostanie odrzucony. Domyślna wartość tej zmiennej to 2M.
Wartości zmiennych podajemy w bajtach, ale dla uproszczenia możemy też użyć skrótów. Dla kilo używamy literki K, dla mega literki M a dla giga literki G. Czyli zapis 10M oznacza 10MB danych.
A teraz pytanie. W jaki sposób skonfigurować PHP aby nasze ustawienia działały? Mamy na to kilka możliwości a tą którą wybieramy zależy w większości przypadków od naszego hostingu.
1. Jeżeli mamy dostęp do plików konfiguracyjnych (ini) PHP to możemy wszystkie te zmienne ustawić w głównym pliku php.ini
2. Jeżeli serwer nasz umożliwia tworzenie własnych plików php.ini w katalogu hostingu to możemy je ustawić w tym pliku. Wpisujemy w prosty sposób do pliku php.ini dane które konfigurujemy, np.:
max_input_vars = 10000
3. Jeżeli używamy serwera Apache (aktualnie najpopularniejszy) który umożliwia tworzenie i konfigurację plików .htaccess, to ustawiamy zmienne w pliku .htaccess poprzez zdefiniowanie zmiennych i poprzedzenie ich komendą php_value, w ten sposób:
php_value max_input_vars 10000
4. Ponadto istnieje też możliwość ustawienia PHP w samym skrypcie poprzez komendę ini_set() w ten sposób:
ini_set('max_input_vars','1000');
Myślę, że wszelkie wątpliwości zostały wyjaśnione. Miłego programowania.