Jag har stött på ett minst sagt frustrerande problem. Det handlar om uppladdning av filer och php's $_FILES['userfile']['error'] koder, info om dessa finns på: http://se.php.net/manual/en/features.file-upload.errors.php.
Jag kör apache 2.x, php 4.2.2 på en redhat kärra.
I min setup har jag på 3 olika ställen definierat storleken på filer som får laddas upp:
1 - php.ini upload_max_filesize = 2M
2 - httpd.conf
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
# max size in bytes
LimitRequestBody 2000000
</Files>
3 - html formuläret <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
Om man kikar på error koderna där nu så är det tre av dom som är intressanta för mig:
0 - inga fel, filen laddades upp
1 - filen är för stor enligt php.ini
2 - filen är för stor enligt html formuläret
Om jag försöker ladda upp filer som är upp till 1MB stora så laddas dom upp utan problem (error kod 0).
Om jag försöker ladda upp filer som är upp till 2MB stora så får jag
error kod 2, dvs filen för stor enligt html formuläret
Så långt är allt som det ska, men om jag försöker ladda upp filer som är större än 2MB brakar den ihop totalt. Man skickas till dnserror sidan http:/// direkt. Jag skulle ju vilja att man skickas till en sida som säger 'filen är för stor, försök med en mindre fil' eller liknande. Denna sidan skulle du då hamna på för att du skrivit en if-sats, if ($_FILES['userfile']['error'] == 1) etc..
Men som jag förstått det efter en del testande så kan inte php få fram filstorleken förrens filen är uppladdad, vilket i sin tur innebär att alla filer som är större än det du specificerat i php.ini aldrig 'analyseras' utan den skickar dig bara till dnserror sidan.
Finns det någon lösning runt detta ? Enda jag kommit på är att man kan sätta en väldigt hög gräns i php.ini/httpd.conf och sedan specificera i html formuläret. Men detta känns inte som någon vidare "snygg" lösning :l