post_max_size a tablice $_POST i $_FILES

W przypadku gdy mamy formularz umożliwiający przesłanie danych (do bazy lub gdziekolwiek), który ma możliwość załączenia pliku przy walidacji powinniśmy uwzględnić sytuację gdy uploadowany plik(i) nie przekracza maksymalnego rozmiaru tablicy $_POST

Można sumować wartość poszczególnych plików $_FILES[„name”][„size”] i porownywać jej wielkość z wartością ustawioną w post_max_size w php.ini ale jest to rozwiązanie działające tylko na serwerze na którym się aktualnie pisze kod (inne serwer przecież mogą mieć inną konfigurację)

Ale jest lepsze rozwiązanie: Sprawdzamy czy tablica $_POST, którą otrzymaliśmy jest pusta i czy tablica $_FILES nie jest pusta. Jeżeli okaże się to prawdą to oznacza, że nastąpiła próba wgrania co najmniej 1 pliku i suma przekroczyła aktualną wartość post_max_size przez co zresetowała tabelę $_POST.
Zapisujemy błąd do sesji i przekierowywujemy na formularz.

if( ( is_array( $_POST ) && count( $_POST ) == 0 ) && ( is_array( $_FILES ) && count( $_FILES ) != 0 ) ) {
  $errors["MAX_FILE_SIZE"] = "Suma wielkości wgrywanych plików jest zbyt duża";
  $session->setVar( "errors", $errors );
  header( "Location: plik_z_formularzem.php" );
  exit;
}

Autmatyczny backup

Kopia zapasowa – przydatna rzecz, warto ją mieć, jednak człowiek niezbyt często o tym pamięta gdy wszystko działa poprawnie. W momencie gdy pada system myśl o dacie ostatniego backupa jest pierwszą myślą świtającą w głowie.
Po co się tak stresować, po co polegać na zawodnej ludzkiej pamięci, lepiej napisac skrypt i niech wszystko się samo wykonuje.
Synchronizujemy katalogi zawierające dane do backupa z aktualnym stanem danych zbackupowanych

rsync -avrz $HOME/workspace/* $HOME/backup/source/workspace/
rsync -avrz $HOME/thunderbird/* $HOME/backup/source/mail/
rsync -avrz $HOME/gg/* $HOME/backup/source/gg

Następnie tworzymy archiwum zawierające bieżącą date

currDate=$(date +%Y-%m-%d);
tar -cjf $HOME/backup/archive/backup-$currDate.tar.bz2 $HOME/backup/source/*

Tak przygotowane archiwum zgrywamy w bezpieczne miejsce (np. na inna maszynę), a następnie kasujemy tymczasowe archiwum.

rsync -avrz -e ssh $HOME/backup/archive/ bezpieczny@dysk:/home/users/xxx/backup/
rm $HOME/backup/archive/backup-$currDate.tar.bz2

Następnie należy jeszcze tylko zautomatyzować wywoływanie skryptu odpowiednim wpisem w cronie:

0 15 * * fri $HOME/prog/backup.sh

W tym przypadku skrypt będzie wywoływany co tydzień w piątek o godzinie 15, tak więc od tej pory co tydzień mogę spokojnie opuszczać stanowisko pracy na weekend będąc pewnym, że moje dane są bezpieczne.

****dodane****

Aby backup mógł wykonywać się automatycznie to połączenie z bezpieczny@dysk musi być trusted (łączenie z nim bez hasła). Jest wiele sposobów aby to wykonać np:
Na komputerze, z którego robisz backup wpisz:

ssh-keygen -t dsa

Naciśnij enter kilka razy.

W twoim katalogu domowym zostanie stworzony katalog .ssh zawierające potrzebne pliki. Następnie w konsoli wpisz polecenie

ssh bezpieczny@dysk ‘test -d .ssh || mkdir -m 0700 .ssh ; cat >> .ssh/authorized_keys && chmod 0600 .ssh/*’ < ~/.ssh/id_dsa.pub

Zostaniesz poproszony o wprowadzenie hasła na bezpieczny@dysk, wprowadź je. I to wszystko. Hasło zostanie zapamiętane.

Możesz teraz przetestować, powinieneś łączyć się przez ssh z bezpieczny@dysk bez podawania hasła.

ssh bezpieczny@dysk