我有一个脚本,旨在解析来自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!');
答案 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支持非常有限或默认不受支持。我先看看那里。
约什