php posta yoluyla xml dosyasını almak

3 Cevap php

Ben bir POST aracılığıyla bir XML dosyası kabul edebileceği bir PHP script arıyorum, sonra bir yanıt gönderir ....

Herkes bu yapabileceği herhangi bir kodu var mı?

Şimdiye kadar ben sadece kod bu ama XML karakterler düzgün kaydedilmez gibi gerçekten ben bile doğru yönde gidiyorum yanıtı hakkında ya da emin değil. Herhangi bir fikir?

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

?>

Benim dosya hepsi boş ... içeriğini kendilerine yazılı varlık değildir. Onlar oluşturulmaktadır.

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

Bir dosya yükleyerek bahsetmiyorum. Birisi bir HTTP bağlantısı aracılığıyla düzenli olarak bir XML dosyası göndermek istiyor.

Ben sadece benim URL'ye kendi görevini kabul etmek benim sunucu üzerinde çalışan bir komut dosyası gerekir ve sonra benim sunucuya dosyayı kaydedin ve kabul veya kabul söyleyerek geri onlara bir yanıt gönderir.

3 Cevap

Sizin yöntem gayet iyi olduğunu ve bunun görünüyor tarafından, bazı notlar ile, bunu yapmak için doğru yolu:

  • Eğer PHP5 varsa, file_get_contents ters işlem olarak file_put_contents kullanmak ve bütün önleyebilirsiniz fopen/fwrite/fclose. Ancak;
  • Eğer kabul edilecektir XML POST organları büyük olabilir, sizin kod hemen sorun çalıştırabilirsiniz. İlk, belleğe tüm vücudu yükler sonra büyük bir yığın olarak yazar. Bu küçük mesajlar için gayet iyi ama filesizes megabayt içine eğilimi varsa daha iyi fopen/fread/fwrite/fclose ile tamamen ona ne olacağını, böylece bellek kullanım örneği 8KB için asla aşmayacaktır:

    $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);
    
  • Dosyalar daha düzenli saniyede (onlar çoklu kaynaklardan yayınlanmıştır zaman örneğin) 1'den yayınlanmıştır zaman dosya nesil yöntem adı collissions içine çalıştırabilirsiniz. Ama bu sadece örnek kod şüpheli ve zaten bunun farkındayız.

Sizin yöntem çalışır, ama gereksiz yere karmaşıktır. Daha iyi bir yol için PHP kılavuzuna bakınız: http://uk.php.net/manual/en/features.file-upload.post-method.php

Eğer php kullanarak bir XML dosyasını yükleyerek bahsediyorsun? Sonra w3schools bu bağlantıyı kontrol edin. Bağlantı dosyası yükleme bahsediyor. Yalnızca XML dosyalarını yüklemek için özelleştirebilirsiniz.