PHP Post Request mit File Upload

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • In diesem Tutorial erfahrt ihr, wie ihr File Uploads mit PHP an ein Formular schickt.
    Wenn ihr von eurem Webserver eine Datei an ein Upload Script schicken wollt, bietet euch PHP keine Standardfunktionen.\\
    Eine Funktion dazu reiche ich euch hiermit nach.

    Das passende Formular auf Empfängerseite würde grob gesehen folgendermaßen aussehen:

    Quellcode

    1. <form>
    2. <input type="text" name="var1" />
    3. <input type="text" name="var2" />
    4. <input type="file" name="inputname" />
    5. <input type="submit" />
    6. </form>


    Hier nun das Script auf Senderseite:

    Quellcode

    1. <?php
    2. function postToHost($host, $port, $path, $postdata = array(), $filedata = array()) {
    3. $data = "";
    4. $boundary = "---------------------".substr(md5(rand(0,32000)),0,10);
    5. $fp = fsockopen($host, $port);
    6. fputs($fp, "POST $path HTTP/1.0\n");
    7. fputs($fp, "Host: $host\n");
    8. fputs($fp, "Content-type: multipart/form-data; boundary=".$boundary."\n");
    9. // Ab dieser Stelle sammeln wir erstmal alle Daten in einem String
    10. // Sammeln der POST Daten
    11. foreach($postdata as $key => $val){
    12. $data .= "--$boundary\n";
    13. $data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n";
    14. }
    15. // Sammeln der FILE Daten
    16. if($filedata) {
    17. $data .= "--$boundary\n";
    18. $data .= "Content-Disposition: form-data; name=\"".$filedata['name']."\"; filename=\"".$filedata['name']."\"\n";
    19. $data .= "Content-Type: ".$filedata['type']."\n";
    20. $data .= "Content-Transfer-Encoding: binary\n\n";
    21. $data .= $filedata['data']."\n";
    22. $data .= "--$boundary--\n";
    23. }
    24. // Senden aller Informationen
    25. fputs($fp, "Content-length: ".strlen($data)."\n\n");
    26. fputs($fp, $data);
    27. // Auslesen der Antwort
    28. while(!feof($fp)) {
    29. $res .= fread($fp, 1);
    30. }
    31. fclose($fp);
    32. return $res;
    33. }
    34. $postdata = array('var1'=>'test', 'var2'=>'test');
    35. $filedata = array(
    36. 'name' => 'inputname',
    37. 'filename' => 'image2.jpg',
    38. 'type' => 'image/jpeg',
    39. 'data' => file_get_contents('/home/easycoding/image2.jpg')
    40. );
    41. echo '<pre>'.postToHost ("localhost", 80, "/test3.php", $postdata, $filedata).'</pre>';
    Alles anzeigen

    31.940 mal gelesen