2013-07-02 57 views
0

我有一个函数接收$ _POST(您的内容:xml格式的变量'xml')。PHP:simplexml_load_string不返回响应

我已经试过这样:

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

但是当我尝试写在一个文件中的最后一个变量没有被写入。 (而且我已经试过把这篇文章看作一个数组,但不起作用)。

感谢,

+3

千万不要错过$ _ POST作为函数参数。它是一个超全球的,并且可以在PHP中的所有范围内自动使用。您是否尝试过任何基本的调试,例如'var_dump($ _ POST)'里面的函数来看看你实际得到了什么? simplexml不会因为它在一个函数内部而引发一个糟糕的配合。 –

+0

你是怎么调用这个函数的? $ _POST已经可用,并且不需要作为参数传递。 – immulatin

+0

@MarcB我已经在使用var_dump进行调试了。感谢您的帮助,问题出在了帖子内容的编码上。 –

回答

1

我想通过声明$_POST作为函数的输入参数,你已经在局部范围内重新定义它,并失去了全球的数据,因为你尝试重新assing它($_POST is a superglobal)。对于你做了什么,一些很好的现有Q &的材料有:

即使是那些年纪大了,他们给的话题的信息仍然在PHP有效因为多年来这些超球体并没有改变意义。

然而,在所有当前稳定PHP版本(即5.4 PHP及以上)的代码产生一个致命错误(Online Demo in 80+ PHP Versions):

Fatal error: Cannot re-assign auto-global variable _POST

这或许可以解释,你没有得到任何输出。请参阅Reference - What does this error mean in PHP?中的Nothing is seen. The page is empty and white. (also known as White Page or Screen Of Death)。您可能看不到任何错误消息,因为您没有显示它,或者您没有查看日志文件,请参见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']); 

这将允许您使用差异具有相同代码的不同表格名称。非常有用,因为你不会把事情困在一起,而是留下一些摆动的空间。

+0

@Neutice:我把你的答案变成一本书,希望你不要觉得这很苛刻。看看这个:http://3v4l.org/aiYXR我想你可能会感兴趣。 – hakre

+0

@hakre:不用担心。更好的答案总是......你知道...更好。 – Neuticle

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(); 
+0

我知道你正在尝试尽可能少地改变原始函数,但'$ xml = $ xmlstr;'是一个令人难以置信的冗余代码行。 – IMSoP

+0

@IMSoP哈哈我甚至没有意识到。定影。 – Sammitch

+0

@ Sammitch谢谢! –