[PHP] Fileuploade über eigenen Server umleiten und Ergebnis auswerten.

Dieses Thema im Forum "Webentwicklung" wurde erstellt von YOOUI, 22. Januar 2012 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 22. Januar 2012
    Fileuploade über eigenen Server umleiten und Ergebnis auswerten.

    Erst einmal vielen Dank, dass du diesen Thread liest.
    Ich möchte gerne meine Bilder auslagern, auf den Imageshack Server.
    Ich habe mein erstes Script:
    Spoiler
    HTML:
    <html>
    <body>
    <form action="meinserver.de/upload.php" method="POST"
     enctype="multipart/form-data">
    
    
     <input name="fileupload" type="file">
    
    
     <input type="submit" />
    </form>
    </body>
    </html>
    
    und das Zweite Script auf meinem Server:
    Spoiler
    PHP:
    <? php
    //create array of data to be posted
    $post_data [ "key" ] =  "567" ;
    $post_data [ "fileupload" ] =  $_FILES [ "fileupload" ];
    //$post_data["fileupload['name']"] = $_FILES["fileupload"]["name"];
    //$post_data["fileupload['type']"] = $_FILES["fileupload"]["type"];
    //$post_data["fileupload['size']"] = $_FILES["fileupload"]["size"];
    //$post_data["fileupload['tmp_name']"] = $_FILES["fileupload"]["tmp_name"];
    //$post_data["fileupload['error']"] = $_FILES["fileupload"]["error"];
    //traverse array and prepare data for posting (key1=value1)
    foreach (  $post_data  as  $key  =>  $value ) {
        
    $post_items [] =  $key  '='  $value ;
    }
    //create the final string to be posted using implode()
    $post_string  implode  ( '&' $post_items );
    //we also need to add a question mark at the beginning of the string
    $post_string  '?'  $post_string ;
    //we are going to need the length of the data string
    $data_length  strlen ( $post_string );
    //let's open the connection
    $connection  fsockopen ( 'www.imageshack.us' 80 );
    //sending the data
    fputs ( $connection "GET  /upload_api.php  HTTP/1.1\r\n" );
    fputs ( $connection "Host:  www.imageshack.us \r\n" );
    fputs ( $connection ,
        
    "Content-Type: multipart/form-data\r\n" );
    fputs ( $connection "Content-Length:  $data_length \r\n" );
    fputs ( $connection "Connection: close\r\n\r\n" );
    fputs ( $connection $post_string );

    // Output    
    $out  "GET / HTTP/1.1\r\n" ;
        
    $out  .=  "Host: www.imageshack.us\r\n" ;
        
    $out  .=  "Connection: Close\r\n\r\n" ;
    fwrite ( $connection , $out );
      while (!
    feof ( $connection )) {
            echo 
    fgets ( $connection ). "<br>" ;
        }

    //closing the connection
    fclose ( $connection );
    ?>
    aber ich bekommen nur die Fehlermeldung:
    Spoiler
    HTTP/1.1 200 OK
    Server: nginx/1.0.4
    Date: Sun, 22 Jan 2012 17:36:15 GMT
    Content-Type: text/xml
    Transfer-Encoding: chunked
    Connection: close
    X-Powered-By: PHP/5.2.9

    c6

    Sorry, but we've detected that unexpected data is received. Required parameter 'fileupload' is missing or your post is not multipart/form-data


    0
    Was kann ich tun damit das Funktioner???
    Habe mich schon informiert und es hat warscheinlich etwas damit zu tun, dass bei einem Dateiupload die Daten in einem Array übergeben wird.

    MIt Freundlichen Grüßen,

    YOOUI

    p.S. BW ist natürlich drin
     
  2. 22. Januar 2012
    AW: Fileuploade über eigenen Server umleiten und Ergebnis auswerten.

    Du setzt einen GET Request ab, willst aber POST Daten verschicken.

    //Edit: dh im klartext: POST anstatt GET verwenden und das Fragezeichen am anfang vom daten-string rausschmeißen, das brauchts nur bei GET.
     
  3. 22. Januar 2012
    AW: Fileuploade über eigenen Server umleiten und Ergebnis auswerten.

    Ich habe jetzt den Code wie von dir vorgeschlagen geändert, aber leider macht das keinen Unterschied
    Spoiler
    PHP:
    <? php
    //create array of data to be posted
    $post_data [ "key" ] =  "567JKOSUa7780b079067d4aacc89a2aba19a53e8" ;
    $post_data [ "fileupload" ] =  $_FILES [ "fileupload" ];
    //$post_data["fileupload['name']"] = $_FILES["fileupload"]["name"];
    //$post_data["fileupload['type']"] = $_FILES["fileupload"]["type"];
    //$post_data["fileupload['size']"] = $_FILES["fileupload"]["size"];
    //$post_data["fileupload['tmp_name']"] = $_FILES["fileupload"]["tmp_name"];
    //$post_data["fileupload['error']"] = $_FILES["fileupload"]["error"];
    //traverse array and prepare data for posting (key1=value1)
    foreach (  $post_data  as  $key  =>  $value ) {
        
    $post_items [] =  $key  '='  $value ;
    }
    //create the final string to be posted using implode()
    $post_string  implode  ( '&' $post_items );
    //we also need to add a question mark at the beginning of the string
    //$post_string = '?' . $post_string;
    //we are going to need the length of the data string
    $data_length  strlen ( $post_string );
    //let's open the connection
    $connection  fsockopen ( 'www.imageshack.us' 80 );
    //sending the data
    fputs ( $connection "POST  /upload_api.php  HTTP/1.1\r\n" );
    fputs ( $connection "Host:  www.imageshack.us \r\n" );
    fputs ( $connection ,
        
    "Content-Type: multipart/form-data\r\n" );
    fputs ( $connection "Content-Length:  $data_length \r\n" );
    fputs ( $connection "Connection: close\r\n\r\n" );
    fputs ( $connection $post_string );

    // Output    
    $out  "GET / HTTP/1.1\r\n" ;
        
    $out  .=  "Host: www.imageshack.us\r\n" ;
        
    $out  .=  "Connection: Close\r\n\r\n" ;
    fwrite ( $connection , $out );
      while (!
    feof ( $connection )) {
            echo 
    fgets ( $connection ). "<br>" ;
        }

    //closing the connection
    fclose ( $connection );
    ?>

    MFG

    YOOUI
     
  4. 22. Januar 2012
    AW: Fileuploade über eigenen Server umleiten und Ergebnis auswerten.

    Einfach nach der "Fehlermeldung" suchen und schon hat man direkt was.
    http://www.phpfreaks.com/forums/index.php?topic=271993.0
    Ich denke dort wird alles geklärt was du wissen musst.
     
  5. 22. Januar 2012
    AW: Fileuploade über eigenen Server umleiten und Ergebnis auswerten.

    Hi DerEntschieder,

    nur leider kann ich aufgrund meiner eingeschränkten Rechte bei meinem Webhoster cUrl nicht benutzen :/
     
  6. 22. Januar 2012
    AW: Fileuploade über eigenen Server umleiten und Ergebnis auswerten.

    dann solltest du andere methoden checken , fsockopen oder oder oder
     
  7. 22. Januar 2012
    AW: Fileuploade über eigenen Server umleiten und Ergebnis auswerten.

    Sorry habe mir deinen Code vorhin nicht genau angeschaut.
    Der Zweite Request (das unter //Output) hat dort nichts verloren.
    Schmeiss die 4 Zeilen unter //Output raus (alles bis zum while)

    Sollte es dann immer noch nicht funktionieren, versuche mal noch ein "\r\n" zu senden bevor du die Antwort liest, bin mir nicht sicher ob das noch nötig ist um den Request abzuschließen.

    Gruß,
    Figger
     
  8. 22. Januar 2012
    AW: Fileuploade über eigenen Server umleiten und Ergebnis auswerten.

    tach,

    du setzt den content-type auf multipart, schickst aber urlencoded. zudem verwendest du GET statt POST, wurde aber schon erwähnt.
     
  9. 22. Januar 2012
    AW: Fileuploade über eigenen Server umleiten und Ergebnis auswerten.

    PHP:
    $post_data [ "fileupload" ] =  $_FILES [ "fileupload" ]; 
    Die übergibst an dieser Stelle nur den Namen der Datei aber nicht dessen Inhalt.


    ImageShack.us unterstützt den Remote-Upload, daher würde ich die Datei in ein Temporäres Verzeichnis deines Servers verschieben und die Direkte URL (http://domain.tld/iutmp/bild.jpg) per API übergeben.

    ImageshackAPI -
    imageshackapi -


    ImageShack and yfrog API libraries - Google Project Hosting




    //Edit:
    Ein POST Multipart Request ist im übrigen anders aufgebaut als ein einfacher POST Request:

    Hier ist ein Code der den Post-Multipart-Request mit fsocks erledigt.
    (Code nur überflogen)
    http://www.php-faq.de/q-code-upload.html
     
  10. 23. Januar 2012
    GOT IT

    Hab e es jetzt geschafft
    Spoiler
    PHP:
    <? php
    include  "datenbank.php" ;
    move_uploaded_file ( $_FILES [ 'fileupload' ][ 'tmp_name' ],  "../../user_pic_temp/" . $_FILES [ 'fileupload' ][ 'name' ]);

    $post_data [ "url" ] =  "http://meinesite.de/user_pic_temp/" . $_FILES [ 'fileupload' ][ 'name' ];
    $post_data [ "key" ] =  "meinKey" ;

    foreach ( 
    $post_data  as  $key  =>  $value ) {
        
    $post_items [] =  $key  '='  $value ;
    }

    $post_string  implode  ( '&' $post_items );

    $data_length  strlen ( $post_string );

    $connection  fsockopen ( 'www.imageshack.us' 80 );

    fputs ( $connection "POST  /upload_api.php  HTTP/1.1\r\n" );
    fputs ( $connection "Host:  www.imageshack.us \r\n" );
    fputs ( $connection ,
        
    "Content-Type: application/x-www-form-urlencoded\r\n" );
    fputs ( $connection "Content-Length:  $data_length \r\n" );
    fputs ( $connection "Connection: close\r\n\r\n" );
    fputs ( $connection $post_string );



    // Output    

    fwrite ( $connection , $out );
    ob_start ();  
    while (!
    feof ( $connection )) {
            echo 
    fgets ( $connection ). "<br>" ;
        } 
    $inhalte  ob_get_contents ();
    ob_end_clean ();

    $preg  '|<image_link>(.*)</image_link>|U' ;

    preg_match ( $preg ,
        
    $inhalte $matches );
    $url  $matches [ 1 ];


    // In Datenbank schreiben
    $insert_url  mysql_query ( "INSERT INTO pic_urls (url) VALUES (' $url ')" );
    $check_ID  mysql_query ( "SELECT ID FROM pic_urls WHERE url = ' $url '" );

    list(
    $ID ) =  mysql_fetch_row ( $check_ID );

    echo 
    "ID: " . $ID ;





    //closing the connection
    fclose ( $connection );

    // Datei wieder loeschen
    unlink ( "../../user_pic_temp/" . $_FILES [ 'fileupload' ][ 'name' ]);
    ?>

    An alle die mir bei der Lösung dieses Problems geholfen haben:
    ein Herzliches vergelts Gott

    p.S. BWs sind raus
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.