[PHP] - Automatische form-submit met file/bestand

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Goedenavond!

Voor een extern systeem moet ik (XML) bestanden kunnen uploaden naar een server. Als voorbeeld geeft de leverancier van het systeem een simpel HTML-form met daarin een file-input.

Echter, het gaat om veel bestanden die periodiek verstuurd moeten worden. Handmatig dat HTML-formuliertje gebruiken is dus geen optie.

Dus wil ik PHP automatisch op de achtergrond de content van het bestand laten sturen. Alleen weet ik niet hoe ik aan de externe server duidelijk maak dat deze een bestand toegestuurd krijgt. Ik lees op internet wel manieren om formdata te submitten (zoek op: sentToHost), maar niet inclusief een bestand. En een oplossing valt uit die sendToHost voorbeelden ook niet te destilleren.

Wat ik voorheen wel deed om zoiets voor elkaar te krijgen (zonder bestanden), is het volgende (versimpelde) voorbeeld:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    $xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n".'<request/>';
    $requestUrl = "/path/to/submit-script";
    $requestLen = strlen($xml);
    $context = stream_context_create (
        array (
            'http' => array (
                'method' => 'POST',
                'content' => $xml,
                'header'  => 'Content-Type: application/x-www-form-urlencoded'.$linefeed
                                         .'Content-Length:'.$requestLen.$linefeed
            )
        )
    );
    if ( !$response = file_get_contents($requestUrl, 0, $context) ) {
        die("Error sending XML.<br /><br />\n\n
                Request was:<br />\n {$xml}.<br /><br />\n\n
                Response was:<br />\n".$response);
    }


Maar in dit geval werkt dat niet, omdat:
1. Nergens kan worden aangegeven wat de 'naam' van het meegestuurde bestand (name-attribuut van de
<input type='file'/> is.
2. De server de meegestuurde XML (uiteraard?) niet herkent als bestand.

Misschien dat het met een '$context' als deze sowieso niet gaat werken, en moet ik naar fsockopen gaan kijken; maar ook daar kom ik nergens voorbeelden tegen van wat je dan moet "fputten" om aan de ontvangende server wijs te maken dat hij een bestand krijgt.

Wellicht ten overvloede: het externe systeem is een vaststaand gegeven. Hoe onhandig ook, denk ik niet dat ik daarop enige invloed kan uitoefenen qua werking.

Alvast dank voor het meedenken!

Acties:
  • 0 Henk 'm!

Verwijderd

Zie CURL (moet wel aanwezig zijn op jouw server).

Heb het verkeerd begrepen, kijk met firebug eens welke naam hij aan het input veld geeft. Vraag anders om een api referentie.

[ Voor 26% gewijzigd door Verwijderd op 01-10-2009 19:07 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Met curl kun je een file meesturen als POST maar je kunt ook een PUSH doen van een enkele file.

Als je gewoon een normaal formulier hebt dan kun je die name toch uitlezen al? Hoe ziet dat formulier er uit?

Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 00:20
cURL is niet perse vereist, kijk bijvoorbeeld eens naar het Zend_HTTP onderdeel van het Zend Framework, wellicht dat je hier wat mee kunt.

http://framework.zend.com....http.client.file_uploads

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online

Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Het is uiteindelijk inderdaad met cURL gelukt. Godzijdank wordt dat ondersteund op de servers die we voor dit doel gebruiken.

Dank voor het meedenken.

Overigens denk ik dat het ook met fsockopen mogelijk moet zijn ... maar dan kost het een hoop extra denkwerk en nazoeken van hoe het HTTP protocol werkt.
Pagina: 1