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