[php+apache] file-upload probleem

Pagina: 1
Acties:

  • Admiral_R2D2
  • Registratie: Augustus 2002
  • Laatst online: 03-05 00:51
ik heb een wierd probleem;
ik heb onderstaande code in elkaar geflanst, maar het werkt niet bij de eerste pagina-opbouw; echter: als ik de pagina refresh werkt ie wel!

Ik draai Apache lokaal en kijk lokaal wat mijn code doet in internet Explorer.

Als ik bijvoorbeeld een kleine JPG upload met onderstaande code:
PHP:
1
2
3
4
5
6
<!-- zoek/vind bestandje en post -->
<form enctype="multipart/form-data" action="verifieerbestand.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
Upload dit bestand: <input name="userfile" type="file">
<input type="submit" value="Upload!">
</form>


dan zou het volgende script deze JPG in mijn lokale server-directory moeten zetten:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- kijk of upload gelukt is, controleer op gestelde eisen en schrijf naar plaatjesdirectory -->
<?
$uploadfile_filename = $HTTP_POST_FILES['userfile']['name'];
$uploadfile_servername = $HTTP_POST_FILES['userfile']['tmp_name'];

print "<pre>";
if (move_uploaded_file($uploadfile_servername,$uploadfile_filename))
   {
   echo "File has been succesfully uploaded; the debuginfo is as follows:";
   echo "<br>";
   print_r($HTTP_POST_FILES);
   }
else
   {
   print "Possible file upload attack!  Here's some debugging info:\n";
   print_r($HTTP_POST_FILES);
   }
print "</pre>";
?>


het vreemde is echter dat wanneer ik de pagina refresh het bestand wel verschijnt in de serverdirectory (ik check met verkenner);

nog vreemder is dat dit probleem zich niet voordoet als ik de desbetreffende JPG al een keer eerder heb geupload (met twee keer laden van tweede code) en deze in beeld is geweest (iets met de IE cache te maken?);

en dan nog vreemder is dat de code wel (b)lijkt te werken als ik de temporary internetfiles weggooi (helaas doet de tweede upload het dan weer niet);


bovenstaande is een erg vaag verhaal, kan iemand mij desalniettemin helpen?
een alternatieve upload code is ook welkom; ik wil dat mensen een bestand kunnen uploaden naar de server (controle's e.d. kan ik zelf hoop ik wel maken - ik kom er echter niet uit wat ik nu fout doe met bovenstaande code)

[ Voor 22% gewijzigd door Admiral_R2D2 op 13-06-2004 20:40 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Even wat commentaar op je code:
1) Zet asjeblief die MAX_FILE_SIZE ergens hard in je PHP code, en niet in een hidden field in je HTML. Wat nou als ik een eigen formulier maak wat submit naar verifieerbestand.php waarbij ik die grootte 10x zo hoog maak?
2) Zet geen HTML commentaar neer om je PHP code te omschrijven. Een gebruiker die je bron bekijkt zou daar info uit kunnen halen over hoe je code in mekaar zit, en zo wordt hacken vergemakkelijkt.
3) $HTTP_POST_FILES is net als alle andere $HTTP arrays nogal overbodig geworden met de komst van $_FILES, $_GET enz.
4) Waarom gebruik je echo en print door elkaar heen?
5) Ik zie zo snel de fout niet, maar ik zal je mijn upload script zometeen ff posten in een edit.

Je verbeterde code zit zo in mekaar:
PHP:
1
2
3
4
5
<!-- zoek/vind bestandje en post -->
<form enctype="multipart/form-data" action="verifieerbestand.php" method="post">
Upload dit bestand: <input name="userfile" type="file">
<input type="submit" value="Upload!">
</form>


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
// kijk of upload gelukt is, controleer op gestelde eisen en schrijf naar plaatjesdirectory
define("MAX_FILE_SIZE", 1000000);

$uploadfile_filename = $_FILES['userfile']['name'];
$uploadfile_servername = $_FILES['userfile']['tmp_name'];

echo "<pre>";
if (move_uploaded_file($uploadfile_servername,$uploadfile_filename))
   {
   echo "File has been succesfully uploaded; the debuginfo is as follows:";
   echo "<br>";
   print_r($_FILES);
   }
else
   {
   echo "Possible file upload attack!  Here's some debugging info:\n";
   print_r($_FILES);
   }
echo "</pre>";
?>

[ Voor 12% gewijzigd door NMe op 13-06-2004 21:49 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Hmmbob
  • Registratie: September 2001
  • Laatst online: 11:20
je zou sowieso eens kunnen beginnen met het vervangen van
PHP:
1
2
3
4
5
$HTTP_POST_FILES

door:

$_FILES


zie ook dit stukje in de FAQ

Sometimes you need to plan for coincidence


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Groentenboer schreef op 13 juni 2004 @ 21:51:
je zou sowieso eens kunnen beginnen met het vervangen van
PHP:
1
2
3
4
5
$HTTP_POST_FILES

door:

$_FILES


zie ook dit stukje in de FAQ
Dat stukje in de FAQ heeft daar weinig tot niets mee te maken. $HTTP_POST_FILES werkt ook nog steeds goed, er zijn alleen wat verschillen waardoor je IMO beter altijd $_FILES kan gebruiken. $_FILES is namelijk een superglobal, en $HTTP_POST_FILES niet.

Mijn eigen uploadscript komt trouwens heel erg overeen met jouw verbeterde script dat ik net postte.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.