PHP:simplexml_load_string不返回响应

时间:2013-07-02 15:08:57

标签: php parsing post simplexml

我有一个接收$ _POST的函数(你的内容:xml格式的变量'xml')。

我试过这个:

function call($_POST) {    
    $xml = $_POST['xml'];    
    $doc = simplexml_load_string($xml); 
}

但是当我尝试在文件中写入最终变量时,没有写入任何内容。 (我已经尝试将帖子视为数组,但也不起作用)。

谢谢,

2 个答案:

答案 0 :(得分:1)

我认为通过将$_POST声明为函数的输入参数,您已在本地范围内重新定义它并丢失全局数据,因为您尝试重新分配它($_POST is a superglobal)。对于你所做的,一些现有的Q& A材料是:

即使那些年龄较大,他们提供的有关该主题的信息在PHP中仍然有效,因为这些 superglobals 多年来没有改变含义。

但是在所有当前稳定的PHP版本(即PHP 5.4及更高版本)中,您的代码会产生致命错误(Online Demo in 80+ PHP Versions):

  

致命错误:无法重新分配自动全局变量_POST

这可能会解释您没有获得任何输出。请参阅Nothing is seen. The page is empty and white. (also known as White Page or Screen Of Death)中的Reference - What does this error mean in PHP?。您可能看不到任何错误消息,因为您没有显示它,或者您没有查看日志文件,请参阅How to get useful error messages in PHP?

那你能做什么?接下来了解PHP错误处理的基础知识 - 我建议您启用错误日志记录并找到错误日志以使其流畅 - 您需要更改上面链接的两个参考问题中概述的代码。

要么删除$_POST作为函数的输入,要么将名称更改为$postData之类的其他内容。

function call(array $postData) 
{
    $xml = $postData['xml'];
    $doc = simplexml_load_string($xml); 
}

只需调用函数:

call($_POST);

或者,如果您只传递一些带有该数组的小参数,请将它们写出来:

function call($xmlString) 
{
    $doc = simplexml_load_string($xmlString); 
}

用法:

call($_POST['xml']);

这将允许您使用具有相同代码的不同表单名称。非常有用,因为你不会把事情捆得太紧,但会留下一些扭动的空间。

答案 1 :(得分:1)

天知道如何重新分配$_POST作为函数参数名称将会搞砸。尝试将代码更改为:

function call($xmlstr) {    
    $doc = simplexml_load_string($xmlstr);
    // should probably be a return here, but I'm guessing
    // your function does more than just parse XML...
}

call($_POST['xml']);

或者简单地说:

function call() {
    $doc = simplexml_load_string($_POST['xml']);
}

call();