2009-06-02 7 views
13

Ich bin für einen PHP-Skript suchen, der eine XML-Datei über eine POST annehmen kann, dann eine Antwort senden ....erhalten XML-Datei per Post in php

Hat jemand einen Code, der dies tun könnte?

Bisher ist der einzige Code, den ich habe, das aber nicht sicher über die Antwort, oder wenn ich tatsächlich in die richtige Richtung gehe, da XML-Zeichen nicht korrekt gespeichert werden. Irgendwelche Ideen?

<?php 

if ($_SERVER['REQUEST_METHOD'] === 'POST'){ 
    $postText = file_get_contents('php://input'); 
} 

$datetime=date('ymdHis'); 
$xmlfile = "myfile" . $datetime . ".xml"; 
$FileHandle = fopen($xmlfile, 'w') or die("can't open file"); 
fwrite($FileHandle, $postText); 
fclose($FileHandle); 

?> 

Meine Dateien sind alle leer ... der Inhalt ist nicht auf sie wird geschrieben. Sie werden erschaffen.

//source html 
<form action="quicktest.php" method="post" mimetype="text/xml" enctype="text/xml" name="form1"> 
<input type="file" name="xmlfile"> 
<br> 

<input type="submit" name="Submit" value="Submit"> 

</form> 

//destination php 

$file = $_POST['FILES']['xmlfile']; 

$fileContents= file_get_contents($file['tmp_name']); 

$datetime=date('ymdHis'); 
$xmlfile="myfile" . $datetime . ".xml"; 
$FileHandle=fopen($xmlfile, 'w') or die("can't open file"); 

fwrite($FileHandle, $postText); 
fclose($FileHandle); 

Ich spreche nicht über eine Datei hochladen. Jemand möchte regelmäßig eine XML-Datei über eine HTTP-Verbindung senden.

Ich brauche nur ein Skript auf meinem Server, um ihren Beitrag zu meiner URL zu akzeptieren, und dann speichern Sie die Datei auf meinem Server und senden Sie ihnen eine Antwort mit der Antwort bestätigt oder akzeptiert.

+0

Ihre "Antwort" ist alles, was Sie während der Ausführung Ihres Skripts "echo" oder ausgeben würden. –

Antwort

-1

Sprechen Sie über das Hochladen einer XML-Datei mit PHP? Überprüfen Sie diesen Link von w3schools. Der Link spricht über das Hochladen von Dateien. Sie können anpassen, um nur XML-Dateien hochzuladen.

6

Ihre Methode ist in Ordnung, und von den Blicken von ihm, der richtige Weg, es zu tun, mit einigen Anmerkungen:

  • Wenn Sie PHP5 haben, Sie file_put_contents als inverse Operation von file_get_contents verwenden können, und vermeide das ganze fopen/fwrite/fclose. Jedoch:
  • Wenn die XML-POST-Körper, die Sie akzeptieren werden, möglicherweise groß sind, kann Ihr Code jetzt in Schwierigkeiten geraten. Es lädt zuerst den gesamten Körper in den Speicher und schreibt es dann als einen großen Brocken aus. Das ist gut für kleine Pfosten aber wenn die Dateigrößen in Megabyte neigen dazu, wäre es besser, es zu tun sein, vollständig mit fopen/fread/fwrite/fclose, so dass Ihre Speichernutzung wird nie zum Beispiel 8 KB überschreiten:

    $inp = fopen("php://input"); 
    $outp = fopen("xmlfile" . date("YmdHis") . ".xml", "w"); 
    
    while (!feof($inp)) { 
        $buffer = fread($inp, 8192); 
        fwrite($outp, $buffer); 
    } 
    
    fclose($inp); 
    fclose($outp); 
    
  • Ihre Dateinamen Erzeugungsverfahren können in ausführen Namenskonflikte, wenn Dateien häufiger als 1 pro Sekunde gepostet werden (z. B. wenn sie aus mehreren Quellen gepostet werden). Aber ich vermute, dass dies nur ein Beispielcode ist und das ist Ihnen bereits bekannt.