XML回发问题

时间:2010-06-11 02:35:26

标签: php xml postback stdin

我有一个脚本,旨在解析来自Ultracart的XML回发,现在只需将其转储到MySQL表中。如果我将它指向我的localhost上的XML文件但使用'php:// input'它似乎没有抓住任何东西,该脚本工作正常。我的日志显示apache在帖子后返回200,所以我不知道什么可能是错的或如何深入研究这个问题..这里是代码:

  $doc = new DOMDocument();
  $doc->loadXML($page);

  $handle = fopen("test2/".time().".xml", "w+");
  fwrite($handle,trim($page)); // it doesn't save this either :'(
  fclose();

  require_once('includes/database.php');

  $db = new Database('localhost', 'user', 'password', 'db_name');
  $data = array();

   $exports = $doc->getElementsByTagName("export");
   foreach ($exports as $export) {
     $orders = $export->getElementsByTagName("order");
     foreach($orders as $order) {
        $data['order_id'] = $order->getElementsByTagName("order_id")->item(0)->nodeValue;
        $data['payment_status'] = $order->getElementsByTagName("payment_status")->item(0)->nodeValue;
        $date_array = explode(" ",$order->getElementsByTagName("payment_date_time")->item(0)->nodeValue);

            if ($date_array[1] == 'JAN') { $date_array[1] = '01'; }
            if ($date_array[1] == 'FEB') { $date_array[1] = '02'; }
            if ($date_array[1] == 'MAR') { $date_array[1] = '03'; }
            if ($date_array[1] == 'APR') { $date_array[1] = '04'; }
            if ($date_array[1] == 'MAY') { $date_array[1] = '05'; }        // converts Ultracart date to
            if ($date_array[1] == 'JUN') { $date_array[1] = '06'; }        // MySQL date
            if ($date_array[1] == 'JUL') { $date_array[1] = '07'; }
            if ($date_array[1] == 'AUG') { $date_array[1] = '08'; }
            if ($date_array[1] == 'SEP') { $date_array[1] = '09'; }
            if ($date_array[1] == 'OCT') { $date_array[1] = '10'; }
            if ($date_array[1] == 'NOV') { $date_array[1] = '11'; }
            if ($date_array[1] == 'DEC') { $date_array[1] = '12'; }

        $data['payment_date'] = $date_array[2]."-".$date_array[1]."-".$date_array[0];
        $data['payment_time'] = $date_array[3];

        //... we'll skip this, there are 80 some elements

        $data['discount'] = $order->getElementsByTagName("discount")->item(0)->nodeValue;
        $data['distribution_center_code'] = $order->getElementsByTagName("distribution_center_code")->item(0)->nodeValue;
            }
        }
    }
        $db->insert('order_history',$data);
} else die('ERROR: Token Check Failed!');

2 个答案:

答案 0 :(得分:0)

  

如果我将它指向我的localhost上的XML文件但是使用'php:// input'它似乎没有抓住任何东西,那么脚本工作正常。

为什么你会期望php://input“抓住任何东西”?如果从命令行运行PHP或者获取请求数据(例如POST或PUT HTTP请求数据),则只能使用php://input来读取标准输入,但多部分POST除外。

答案 1 :(得分:0)

如果没有看到上面的代码,我建议你直接转储输出,看看你是否真的收到了XML。我怀疑问题是你的解析,但接收回发。看一下ultracart文档,它看起来像是他们没有将xml的主体作为post参数传递,但可能是作为一个非常糟糕的HTTP PUT。

http://php.net/manual/en/features.file-upload.put-method.php

我在大多数共享托管等上下注,PUT支持非常有限或默认不受支持。我先看看那里。

约什