Ankündigung

Einklappen
Keine Ankündigung bisher.

File Upload in mehrere Verzeichnisse

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • File Upload in mehrere Verzeichnisse

    Hallo zusammen

    Hab ein Uploadscipt:
    PHP-Code:
    <form name="ul" method="post" action="http://myseite.com/archive" 

    enctype="multipart/form-data" onsubmit="document.ul.u.value='Bitte warten ...';document.ul.u.disabled=true">

    <
    div id="files"><input type="file" size="64" name="filecontent"> <input type="submit" name="u" 
    value="Upload!"></div>

    </
    form
    Möchte nun das File anstatt nur an "http://myseite.com/archive" zusätzlich noch an "http://myseite.com/temp" übermitteln. Geht das?

    Ausserdem geschieht momentan noch ein Redirekt nach dem Upload auf die Zielseite "http://myseite.com/archive". Kann ich diesen Redirekt irgendwie verhindern?

    Danke für Hints


    EDIT:
    Habs nun bereits so modifiziert:
    up.html
    PHP-Code:
    <form name="ul" method="post" action="uppp3.php" 

    enctype="multipart/form-data" onsubmit="document.ul.u.value='Please wait ...';document.ul.u.disabled=true">

    <
    div id="files"><input type="file" size="64" name="filecontent"> <input type="submit" name="u" 
    value="Upload!"></div>
    </
    form
    dazu uppp3.php
    PHP-Code:
    <?

    function upload ($url) {
    $post= $_FILES["filecontent"];


    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    echo curl_exec($ch);
     
    curl_close($ch);
    }

    $url = "http://myseite.com/archive";
    $url2 = "http://myseite.com/temp";

    upload ($url);
    upload ($url2);

    ?>
    Den Error den ich zustande kriege lässt vermuten, dass keine Datei selektiert wurde!

    Das einfache Skript am Anfang hatte funktioniert. Hab ich ev. bei Curl einen Parameter vergessen entgegen meiner Recherchen oder sonst einen Denkfehler gemacht? Danke

  • #2
    Schau ins Handbuch, wie das Array $_FILES aufgebaut ist. Du verwendest es vollkommen falsch.
    [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
    Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

    Kommentar


    • #3
      Schau ins Handbuch, wie das Array $_FILES aufgebaut ist. Du verwendest es vollkommen falsch.
      Danke für den Hinweis mepeisen

      Ich hab schon 4 verschiedene Varianten, u.a. auch das zweite Beispiel von php.net erfolglos identisch ausprobiert:
      php 5.19
      PHP-Code:
      $ch curl_init();

      $data $post;

      curl_setopt($chCURLOPT_URL$url);
      curl_setopt($chCURLOPT_POST1);
      curl_setopt($chCURLOPT_POSTFIELDS$data);

      curl_exec($ch); 
      Das assoziative Array $_File , var_dumb(), beinhaltet ja $_FILES['filecontent']['tmp_name'], ....name.., ...size..., etc.
      Kann man das Array den nicht als Ganzes übergeben?

      Danke trotzdem für den Hinweis, hast mir schon mal sehr geholfen das Problem einzukreisen.

      Grüsse

      Kommentar


      • #4
        Du willst also eine Datei mehrfach auf ein und den selbem server kopieren ? warum nutzt du nicht einfach copy() ?
        Weil dafür upload-requests zu machen, das ist wie wenn du jeden morgen aus dem kleinen Badfenster im 2ten stock kletterst um die Zeitung zu holen und dann aufs Dach kletterst um durch den Schornstein wieder reinzugehen ... anstatt die Haustür zu benutzen.
        [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
        | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

        Kommentar


        • #5
          Zitat von strgg Beitrag anzeigen
          ... var_dumb() ...
          LoL

          Sorry fürs OT, aber der musste einfach sein
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            So. Zum File Upload per Formular folgendes Beispiel: ø How To *Really* Upload Files With PHP | W-Shadow.com ø
            Zum Fileupload via PUT folgendes Beispiel: RESTful PUT calls with PHP and Curl :: Jaisen Mathai (Handling mit Streams wird vorausgesetzt).

            Sofern du das im gleichen Server in zwei unterschiedliche Verzeichnisse tun willst, hat Robo schon gesagt wie blödsinnig das ist. Schaue ins Handbuch, wie Formulare verarbeitet werden. Dort ist ein Kapitel zu Dateiuploads mit Beispielen.
            [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
            Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

            Kommentar


            • #7
              Weil dafür upload-requests zu machen, das ist wie wenn du jeden morgen aus dem kleinen Badfenster im 2ten stock kletterst um die Zeitung zu holen und dann aufs Dach kletterst um durch den Schornstein wieder reinzugehen ... anstatt die Haustür zu benutzen.
              LOL, die Vorstellung allein kriegt mich auf den Boden vor Lachen
              Du willst also eine Datei mehrfach auf ein und den selbem server kopieren ?
              In diesem Fall Nein, habs nur der Einfachheit so aufgeführt. Das "Backup" geht an einen anderen externen Server. Trotzdem Danke, so werde ich den Fehler nicht in Zukunft begehen
              Zitat von strgg Beitrag anzeigen
              ... var_dumb() ...
              LoL

              Sorry fürs OT, aber der musste einfach sein


              Danke mepe für die guten Links, werd mich da jeden Fall heute noch mit beschäftigen damit ich erhobenen Hauptes schlafen gehen kann

              Was mich einfach verblüfft ist die Tatsache, dass ich ja im ursprünglichen Skript $_FILES 1zu1 übergebe, nun im zweiten Skript dies nicht funktioniert zudem ich das Beispiel2 hiervon php.net 1zu1 übernommen habe.
              Nun ja, kommt Zeit, kommt Rat

              Danke trotzdem für die hilfreichen Inputs, ich spür's ich bin ganz nah an der Lösung LOL

              Kommentar


              • #8
                Falls übrigends kein curl vorhanden ist gibt es auch andere wege uploads an andere Server zu senden mit Snoopy oder Zend_Http_Client.

                Einfacher Dateiupload mit PHP und Zend_Http_Client - Codeschnipsel
                Einfacher Dateiupload mit PHP und Snoopy - Codeschnipsel
                [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
                | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

                Kommentar


                • #9
                  Ist den auf den externen Server ein upload Formular?

                  Kommentar


                  • #10
                    Ist den auf den externen Server ein upload Formular?
                    Klaro Yoshi

                    Der zweite Server ist ein einfaches Uploadformular wie z.B. bei Rapidshare. Und wie gesagt, das Ganze klappt ja hervorragend mit dem Code den ich im ersten Beitrag gepostet habe. Upload succeeded. Nur leider klappts nicht mehr so ganz seit ich es über 2 Dateien vollziehe. Das Formular wird angesprochen, nur meldet der Server dass keine Datei selektiert wurde.

                    $_FILES scheint auch richtig gefüllt

                    Kommentar


                    • #11
                      Der Code, so wie du ihn gepostet hast, funktioniert mit nur einem Upload genausowenig. Nochmal: Schau ins Beispiel und schau, wie das Array $_FILES aufgebaut ist.

                      Und Nein, du kannst nicht einfach so das komplette Array übergeben.
                      [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
                      Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

                      Kommentar


                      • #12
                        Der Code, so wie du ihn gepostet hast, funktioniert mit nur einem Upload genausowenig.
                        Der erstgepostete Code funktioniert einwandfrei, dieser geht aber noch nicht über curl.

                        Zu deinen Links-> Put ist erst ab PHP5.2 möglich (nutze momentan 5.19)
                        Zum zweiten Link: Ich hab bereits alle möglichen Varianten ausprobiert, z.B. $post_data als $_FILES ["filecontent"]["name"], $_FILES ["filecontent"]["temp_name"] definiert, erfolglos. Da das Beispiel (habs 1:1 übernommen) ein internes Verzeichnis nimmt, hingegen ich die $_FILES array als source habe, dachte ich mit dem Name oder Temp_name dienen zu können, leider vergeblich. temp_name sollte ja eigentlich gehen da das File ja nicht auf meinem Server oben ist, oder?
                        Ich nutze bisher zur Pfadangabe folgendes
                        PHP-Code:
                        $post_data$_FILES["filecontent"]["tmp_name"];
                        $post_data = array("dateiname" => "@".getcwd()."/".$post_data); 
                        Das Feld beim Formular heisst "dateiname".

                        Curl geht sonst auf meinem Host, doch bin erstmalig damit mit Upload File konfrontiert. Ich könnt mich echt schlagen weil das einfach nicht hinhaut


                        Hier das ganze Skript:
                        form.html
                        PHP-Code:
                        <form name="ul" method="POST" action="uppp3.php" enctype="multipart/form-data">

                        <
                        input type="file" size="64" name="filecontent"
                        <
                        input type="submit" name="u" value="Upload!">

                        </
                        form
                        uppp3.php
                        PHP-Code:
                        $post_data$_FILES["filecontent"]["tmp_name"];
                        $url "http://urlausactionvonform.de/dafadsfsdf";

                        $post_data = array("dateiname" => "@".getcwd()."/".$post_data); 
                                        
                        $ch curl_init($url); 
                        /* Follow redirects (optional) */
                        curl_setopt($chCURLOPT_FOLLOWLOCATION,1); 
                        curl_setopt($chCURLOPT_RETURNTRANSFER1); 
                        /* Use the "POST" method (possibly redundant)  */
                        curl_setopt($chCURLOPT_POST1); 
                        curl_setopt($chCURLOPT_POSTFIELDS$post_data);

                        /* Upload the file now */
                        $results curl_exec($ch);
                        curl_close ($ch);
                        echo 
                        $results

                        Kommentar


                        • #13
                          Zitat von strgg Beitrag anzeigen
                          Der erstgepostete Code funktioniert einwandfrei, dieser geht aber noch nicht über curl.
                          Für das nächste mal: Gewöhn dir die Besserwisserei ab, denn sowas ist ungesund
                          Der Code, so wie du ihn gepostet hattest (und du hast nur Code mit Curl gepostet) wird definitifv auch bei einer URL nie funktionieren. Punkt aus. Dass dein anderer Code völlig anders ausschaut kann hier niemand wissen.

                          Zu deinem letzten Code-Schnipsel eine Frage:
                          1. Wieso übergibst du das als dateiname aber im Formular steht "filecontent" als Name des Feldes? Du musst es an den Ziel-Server auch so übergeben, wie es dieser im Formular erwartet.
                          2. Ist der Code so vollständig? Wenn ja, gibt es die Datei im aktuellen Arbeitsverzeichnis (getcwd) gar nicht. Du musst den Dateinamen übergeben, wo die Datei sich befindet. Wenn du noch nichts mit der Datei angestellt hast, gibt es sie nur im Temp-Verzeichnis.
                          [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
                          Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

                          Kommentar


                          • #14
                            Für das nächste mal: Gewöhn dir die Besserwisserei ab, denn sowas ist ungesund
                            Der Code, so wie du ihn gepostet hattest (und du hast nur Code mit Curl gepostet) wird definitifv auch bei einer URL nie funktionieren. Punkt aus.
                            Sorry, war nicht meine Absicht . Wollte nur damit sagen, dass folgender Code funktioniert
                            PHP-Code:
                            <form name="ul" method="post" action="http://myseite.com/archive" 
                            enctype="multipart/form-data" onsubmit="document.ul.u.value='Bitte warten ...';document.ul.u.disabled=true">
                            <
                            div id="files"><input type="file" size="64" name="filecontent"> <input type="submit" name="u" 
                            value="Upload!"></div>
                            </
                            form
                            Wieso übergibst du das als dateiname aber im Formular steht "filecontent" als Name des Feldes? Du musst es an den Ziel-Server auch so übergeben, wie es dieser im Formular erwartet
                            Ich habe gedacht durch die nachfolgende Umdefinition sei dies unerheblich $post_data = array("dateiname" => "@".getcwd()."/".$post_data);
                            Dann hab ich wohl falsch gedacht. Habs nun geändert
                            Ist der Code so vollständig? Wenn ja, gibt es die Datei im aktuellen Arbeitsverzeichnis (getcwd) gar nicht. Du musst den Dateinamen übergeben, wo die Datei sich befindet. Wenn du noch nichts mit der Datei angestellt hast, gibt es sie nur im Temp-Verzeichnis.
                            var_dump=
                            PHP-Code:
                            array(1) { ["dateiname"]=>  string(38"@/home/myfiles/website/tmp/phpCkkoZC" 
                            Ja der Code ist so vollständig Meinst also da fehlt ein wichtiges Stück? Die Sache ist die dass ich auf meinem Host eigentlich nur das Formular machen wollte, und der Upload geschieht auf einem anderen Server. Geht es nicht, die Datei nur "weiterzugeben" im Temp? Ich möchte ja nicht, dass der Dateiupload doppelt solange geht. Die Datei auf dem Server mit dem Formular bleibt danach nicht bestehend und wäre nicht notwendig wenn nicht unumgänglich.

                            Wie müsste ich denn vorgehen um die Datei richtig formatiert zu übergeben und ist ein temp_name nicht in der Lage den Upload and das Zielformular zu übergeben?

                            Sorry für die Fragen aber Danke für die Antworten

                            Kommentar


                            • #15
                              Also nochmal langsam.
                              1. Welches Formular nutzt du im Browser.
                              2. Welches Formular nutzt du für den ersten Datei-Upload
                              3. Welches Formular nutzt du für den zweiten Datei-Upload

                              Der Pfad ist falsch, wenn du die Datei nicht mittels move_uploaded_file da hin geschoben hast. Das ist wohl der Pfad deiner Webseite und da befindet sich eine hochgeladene Datei erst einmal überhaupt nicht. Hochgeladene Dateien befinden sich in der Regel irgendwo in /tmp unter Linux. Schau dir das$_FILES Array an, da gibt es den absoluten Dateinamen irgendwo. Alternativ wie gesagt erst move_uploaded_file nuten um die Datei in ein bestimmtes Verzeichnis zu schieben und danach dann den Upload via Curl.

                              Die Datei einfach nur "weiterzugeben" geht nicht. Du brauchst irgendein Protokoll. Entweder also auf dem Zielserver jeweils ein Formular, was du mittels curl aufrufst oder beispielsweise FTP. Wie soll der Zielserver sonst verstehen, was du von ihm willst?
                              [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
                              Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

                              Kommentar

                              Lädt...
                              X