Problem koji verovatno muči autora jeste da pokušava da sačuva datoteku sa nazivom u UTF-8 kodnoj strani dok operativni sistem očekuje drugu kodnu stranu. Postoji i prijavljeni bug:
http://bugs.php.net/bug.php?id=46990
Gornji kod ne rešava problem da između provere i premeštanja datoteke, druga paralelno pokrenuta skripta može da upiše datoteku sa istim imenom čime dolazi do sukoba.
Ako se već ne koristi funkcija koja istovremeno može da proveri i napravi datoteku ako ne postoji samim tim rezervišući ime, a vraćajući grešku ako ime već postoji za pokušaj sa drugim imenom onda barem treba maksimalno suziti prostor između
file_exists() provere i
move_uploaded_file() ili šta se već kasnije u kodu koristi za premeštanje datoteke.
Takva funkcija u PHP-u je
fopen() sa
"x+" zastavicom što se ponaša kao
open(..., O_EXCL|O_CREAT) iz POSIX-a.
Ako se nazivi čuvaju u bazi i ime ili deo imena datoteke je primarni ključ onda treba prvo u bazi započeti transakciju, napraviti unos, premestiti datoteku i na kraju ako nema grešaka prihvatiti transakciju.
Ovo je greška koju programeri često prave.
Treba biti oprezan pri čitanju naziva od korisnika, bilo u celosti ili samo jednom delu kako na taj način ne bi omogućili sigurnosni propust da korisnik pošalje novi
../index.php. Funkcija
basename() je za to korisna.