通过php中的帖子接收xml文件

时间:2009-06-02 10:20:30

标签: php xml http post

我正在寻找一个可以通过POST接受XML文件的PHP脚本,然后发送响应....

有没有人有任何代码可以做到这一点?

到目前为止,我所拥有的唯一代码是这个,但不确定响应,或者我是否确实朝着正确的方向前进,因为XML字符未正确保存。有什么想法吗?

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

?>

我的文件都是空的......内容没有被写入。他们正在创建。

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

我不是在谈论上传文件。有人想通过HTTP连接定期发送XML文件。

我只需要在我的服务器上运行一个脚本来接受他们的帖子到我的URL,然后将文件保存到我的服务器并向他们发送一个回复,说明已确认或接受。

3 个答案:

答案 0 :(得分:6)

你的方法很好,从它的外观来看,正确的方法,有一些注意事项:

  • 如果你有PHP5,你可以使用file_put_contents作为file_get_contents的反向操作,并避免使用整个fopen/fwrite/fclose。但是:
  • 如果您接受的XML POST主体可能很大,那么您的代码现在可能会遇到麻烦。它首先将整个主体加载到内存中,然后将其作为一个大块写出来。这对于小帖子来说很好,但是如果文件大小倾向于兆字节,那么最好用fopen/fread/fwrite/fclose来完成它,所以你的内存使用量永远不会超过例如8KB:

    $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);
    
  • 当文件的发布频率超过每秒1次时(例如,从多个来源发布文件时),您的文件名生成方法可能会遇到名称冲突。但我怀疑这只是示例代码,您已经意识到了这一点。

答案 1 :(得分:1)

你的方法有效,但不必复杂。有关更好的方法,请参阅PHP手册:http://uk.php.net/manual/en/features.file-upload.post-method.php

答案 2 :(得分:-1)

您是在谈论使用php上传XML文件吗?请从w3schools查看此链接。该链接谈论文件上传。您可以自定义仅上载XML文件。