2009-06-02 4 views
13

Sto cercando uno script PHP che può accettare un file XML tramite un post, quindi inviare una risposta ....ricevere file XML tramite posta in php

Qualcuno ha qualche codice che potrebbe fare questo?

Finora l'unico codice che ho è questo ma non è sicuro della risposta o se effettivamente sto andando nella giusta direzione dato che i caratteri XML non vengono salvati correttamente. Qualche idea?

<?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); 

?> 

I miei file sono tutti vuoti ... il contenuto non viene loro scritto. Sono stati creati.

//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); 

Non sto parlando di caricamento di un file. Qualcuno vuole inviare un file XML su base regolare attraverso una connessione HTTP.

Ho solo bisogno di uno script in esecuzione sul mio server per accettare il loro post al mio URL e quindi salvare il file sul mio server e inviare loro una risposta indietro dicendo riconosciuto o accettato.

+0

La "risposta" è tutto ciò che si "echo" o emette durante l'esecuzione del copione. –

risposta

-1

Stai parlando di caricare un file XML usando php? Quindi controllare questo collegamento da w3schools. Il link parla del caricamento dei file. È possibile personalizzare per caricare solo file XML.

6

Il tuo metodo va bene, e tramite gli sguardi di esso, il modo corretto di farlo, con alcune note:

  • Se si dispone di PHP5, è possibile utilizzare file_put_contents come l'operazione inversa di file_get_contents, e evitare l'intero fopen/fwrite/fclose. Tuttavia:
  • Se i corpi POST XML che accetterete potrebbero essere grandi, il vostro codice ora potrebbe incontrare dei problemi. Prima carica tutto il corpo in memoria, quindi lo scrive come un grosso pezzo. Questo va bene per i piccoli posti, ma se le dimensioni dei file tendono in megabyte sarebbe meglio fare per essa interamente con fopen/fread/fwrite/fclose, così il vostro utilizzo della memoria non potrà mai superare ad esempio 8 KB:

    $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); 
    
  • tuo metodo di generazione nome di file può incorrere in assegnare un nome alle collisioni quando i file vengono pubblicati più regolarmente di 1 al secondo (ad esempio quando vengono pubblicati da più fonti). Ma sospetto che questo sia solo un codice di esempio e tu ne sei già consapevole.