PHP Post Request mit File Upload

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • 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:

    Source Code

    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:

    Source Code

    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>';
    Display All

    46,505 times viewed