GrafZhL: Datei Versand mit PHP

Nabend :)

Ich würde gerne folgendes HTML Formular durch ein PHP Äquivalent ersetzen:

  
  
<form enctype="multipart/form-data" method="post" action="HIERURL" target="_blank">  
<input type="hidden" name="MAX_FILE_SIZE" value="MAXGRÖSSE">  
<input type="file" name="NAME" accept="image/*">  
<input type="submit">  
  

Da <input type="file"> keine <input value=""> Spezifikation zulässt, muss der Benutzer die Datei, in diesem Falle ein Bild, manuell versenden. Dieser Ablauf soll allerdings automatisiert geschehen, durch ein PHP Skript eben (da es mit HTML keine andere Möglichkeit gibt; man belehre mich gerne eines besseren).

Habe darüber schon gelesen, dass man fsockopen() benötigt, aber all das Gefrickel, was noch dabei stand, war äußerst verwirrend für einen Neuling wie mich. Deswegen wäre es schön, würde mich jemand mit einer verständlichen Bauanleitung für so ein Skript versorgen :)

  1. Ich würde gerne folgendes HTML Formular durch ein PHP Äquivalent ersetzen:

    Geht nicht. HTML ist im Browser, PHP auf dem Server.
    Dein Vorhaben ist schlichtweg unmöglich.

    Ansonsten gibt es in Selfhtml einen Artikel über Dateiuploads.

    Insgesammt versteh ich aber dein Problem nicht, da Dateiuploads seit PHP3 ohne fsockopen() funktionieren.

    1. Hm, dann hab ich mich da missverständlich ausgedrückt: Es geht nicht darum, eine Datei auswählen zu können; das File bleibt immer das Gleiche (also es wird immer xyz.jpg versendet, da der Inhalt der Datei selbst wechselt).

      Das Beispiel mit dem HTML Form sollte nur verdeutlichen, wie umständlich es jetzt ist und wie schön es doch sein könnte, dass man nämlich das Versenden nicht mehr selbst übernehmen muss.

      /me hopes, jetzt ist es etwas verständlicher.

      Bzgl. fsockopen(): Mag sein, dass man es nicht braucht, aber ich weiß nicht mal im Ansatz, wie man das oben Beschriebene regelt und auch die Funktion bin ich zufällig gestoßen, nur deswegen habe ich sie hier genannt ;)

      Geht nicht. HTML ist im Browser, PHP auf dem Server.

      1. Hm, dann hab ich mich da missverständlich ausgedrückt: Es geht nicht darum, eine Datei auswählen zu können; das File bleibt immer das Gleiche (also es wird immer xyz.jpg versendet, da der Inhalt der Datei selbst wechselt).

        Das Beispiel mit dem HTML Form sollte nur verdeutlichen, wie umständlich es jetzt ist und wie schön es doch sein könnte, dass man nämlich das Versenden nicht mehr selbst übernehmen muss.

        Also ich verstehe es auch nicht. Das Senden einer Datei von einem Benutzer an den Server muss natürlich immer der Benutzer machen.
        Du kannst doch nicht wirklich wollen, dass ein PHP-Skript eine Datei eines Benutzers einer Website nimmt und automatisch an den Server sendet, ohne, dass der Benutzer etwas tun muss. Das geht nicht, und das ist auch ganz gut so. Kannst Du mal schildern - ganz unabhängig von PHP oder HTML - was für eine Funktionalität Du da bauen willst?

        Danke,

        viele Grüße
        der Bademeister

        1. Ein dynamisch generiertes Bild (das auf meiner Festplatte liegt) bei jedem (automatisierten) Aufruf des Skriptes (das ebenfalls auf meiner Festplatte liegt und mit Apache läuft) an diejenige Webseite versenden, die im action="" Paramter der das eigentlich zugehörige Upload-Formular enthaltenen Website angegeben ist.

          Bild generieren ist leicht. Das Skript automatisiert aufzurufen auch, dazu muss es einfach in das selbe Skript eingebaut werden, das auch das Bild generiert, denn hier erfolgt sowieso ein automatischer Aufruf. Nur das Uploaden stellt eben ein Problem dar. Sollte dieser zweite Absatz erneut für Verwirrung gesorgt haben, kann er gerne ignoriert werden :)

          Kannst Du mal schildern - ganz unabhängig von PHP oder HTML - was für eine »» Funktionalität Du da bauen willst?

          1. Ein dynamisch generiertes Bild (das auf meiner Festplatte liegt) bei jedem (automatisierten) Aufruf des Skriptes (das ebenfalls auf meiner Festplatte liegt und mit Apache läuft) an diejenige Webseite versenden, die im action="" Paramter der das eigentlich zugehörige Upload-Formular enthaltenen Website angegeben ist.

            Aaaaaaaha, jetzt hab ich ungefaehr verstanden, worum es geht. Also ich interpretiere jetzt mal frei, dass Du ein Bild auf Deiner (?) Website automatisch aktualisieren willst?

            Wenn dem so ist, dann hast Du einen FTP-Zugang zu Deinem Server, und Dein PHP-Skript sollte per FTP das File hochladen.

            Wenn Du keinen FTP-Zugang hast, dann muesste Dein Skript den HTTP-Request, den die HTML-Seite nach korrektem Ausfuellen des Formulares senden wuerde, produzieren und senden (HTTP mit PHP).

            Vergiss in beiden Faellen jedenfalls die Seite mit dem Formular. PHP ist nicht dazu da, ein HTML-Formular auszufuellen.
            (D.h. im zweiten Falle: vergiss die Seite, nachdem Du Dir den HTML-Code angeguckt und rausgefunden hast, welche POST-Variablen Du senden musst).

            Viele Gruesse
            der Bademeister

            1. Hi Bademeister,

              Wenn dem so ist, dann hast Du einen FTP-Zugang zu Deinem Server, und Dein PHP-Skript sollte per FTP das File hochladen.

              Linktipp: Wie kann ich einen Datei-Upload per FTP durchführen?

              Wenn Du keinen FTP-Zugang hast, dann muesste Dein Skript den HTTP-Request, den die HTML-Seite nach korrektem Ausfuellen des Formulares senden wuerde, produzieren und senden (HTTP mit PHP).

              Und noch mal Linktipp: Wie kann ich einen HTTP POST-Request mit Datei-Upload absenden?

              Viele Grüße,
                ~ Dennis.

              1. Und noch mal Linktipp: Wie kann ich einen HTTP POST-Request mit Datei-Upload absenden?

                Hehe, davon sprach ich ja eingangs, denn das ist genau die Erklärung, die ich da meinte und als Anfänger nicht wirklich nachvollziehen kann. Dachte, es wäre möglich, auch einfacher das gleiche Ergebnis zu erzielen, oder zumindest dass es verständlicher erklärt werden könnte. Aber trotzdem danke für die Hilfe :)

                1. Hi GrafZhL,

                  Hehe, davon sprach ich ja eingangs, denn das ist genau die Erklärung, die ich da meinte und als Anfänger nicht wirklich nachvollziehen kann. Dachte, es wäre möglich, auch einfacher das gleiche Ergebnis zu erzielen, oder zumindest dass es verständlicher erklärt werden könnte. Aber trotzdem danke für die Hilfe :)

                  Nun ja, wenn du die Datei per FTP hochlädst, dann ist das deutlich einfacher :-)

                  Wenn es über HTTP sein muss, dann wirst du keinen anderen Weg finden, als den bereits erläuterten. Du kannst dir aber einiges an Arbeit ersparen, indem du eine fertige Klasse wie z.B. Zend_Http_Client aus dem Zend Framework benutzt, womit sich Datei-Uploads durchführen lassen. Unter Verwendung ebendieser Klasse würde sich der Code auf folgendes reduzieren:

                  require_once('Zend/Http/Client.php');  
                  $client = new Zend_Http_Client('http://example.org/upload-script.php');  
                  $client->setFileUpload('C:\\Pfad\\zum\\Bild.jpg', 'datei');  
                  $client->submit('POST');
                  

                  Damit würde deinem Script auf dem Server (hier: example.org/upload-script.php) die hochgeladene Datei in $_FILES['datei'] zur Verfügung stehen haben.

                  Viele Grüße,
                    ~ Dennis.

                  1. Damit würde deinem Script auf dem Server (hier: example.org/upload-script.php) die hochgeladene Datei in $_FILES['datei'] zur Verfügung stehen haben.

                    Cool, schonmal vielen Dank für den Hinweis. Wenn du mir jetzt noch sagen kannst, wie ich das Ziel von $client->submit('POST'); angebe, bin ich rundum glücklich :)

                    1. Hi GrafZhL,

                      Cool, schonmal vielen Dank für den Hinweis. Wenn du mir jetzt noch sagen kannst, wie ich das Ziel von $client->submit('POST'); angebe, bin ich rundum glücklich :)

                      Was meinst du mit das Ziel? Die URL, wo das hingepostet wird? Dann solltest du dir mein vorheriges Posting noch mal genauer durchlesen:

                      "Damit würde deinem Script auf dem Server (hier: example.org/upload-script.php) [...]"

                      Die URL müsstest du also anpassen - abgesehen davon gibt es in dem kleinen Script wirklich nicht viele URLs, welche du anpassen könntest. Genau genommen nur eine. ;-)

                      Viele Grüße,
                        ~ Dennis.

      2. /me hopes, jetzt ist es etwas verständlicher.

        Nein, noch viel weniger. Ich erkenne immer noch nicht dein Problem, da deine Beschreibung, mit Verlaub, Müll ist. Weder der Problem noch dein Lösungsansatz ist ist irgendeiner Weise informativ.