相关疑难解决方法(0)

如何在PHP中获取有用的错误消息?

我觉得用PHP编程非常令人沮丧.我经常尝试运行脚本,然后再回一个空白屏幕.没有错误消息,只是空屏幕.原因可能是一个简单的语法错误(错误的括号,缺少分号),或者函数调用失败,或其他完全错误.

弄清楚出了什么问题是非常困难的.我最终评论出代码,在任何地方输入"echo"语句等等,试图缩小问题范围.但肯定有一个更好的方法,对吗?

那么,有没有办法让PHP产生像Java那样有用的错误信息呢?任何人都可以推荐良好的PHP调试技巧,工具和技术?

php debugging error-handling

563
推荐指数
28
解决办法
57万
查看次数

simplexml_load_string()不会在标记中使用"soap:"读取soap响应

我知道这可能是一个新手问题,但请幽默我.在标签中读取带有"soap:"的xml字符串时,xml中不会读取simplexml_load_string().

给出这个脚本:

#!/usr/bin/php
<?php

$s='
    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
        <soap:Header>
        <context xmlns="urn:zimbra"/>
        </soap:Header>
        <soap:Body>
            <AuthResponse xmlns="urn:zimbraAdmin">
                <authToken>somevalue</authToken>
                <lifetime>123124123</lifetime>
                <a n="zimbraIsDomainAdminAccount">false</a>
            </AuthResponse>
        </soap:Body>
    </soap:Envelope>';


print_r(simplexml_load_string($s));
echo "\n\n";
print_r(simplexml_load_string(str_ireplace("soap:", "", $s)));
?>
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

jesse@jesse-debian:~/code/zmsoap$ ./xmltest.php 
SimpleXMLElement Object
(
)

SimpleXMLElement Object
(
    [Header] => SimpleXMLElement Object
        (
            [context] => SimpleXMLElement Object
                (
                )

        )

    [Body] => SimpleXMLElement Object
        (
            [AuthResponse] => SimpleXMLElement Object
                (
                    [authToken] => somevalue
                    [lifetime] => 123124123
                    [a] => false
                )

        )

)
jesse@jesse-debian:~/code/zmsoap$
Run Code Online (Sandbox Code Playgroud)

我只是好奇为什么会发生这种情况,并且如果有更合适的方法来解决问题,而不是进行字符串替换.

php xml curl soap simplexml

8
推荐指数
2
解决办法
2万
查看次数

参考 - 如何在SimpleXML中处理名称空间(带冒号的标签和属性)?

这个问题旨在作为回答一个特别常见的问题的参考,这个问题可能有不同的形式:

  • 我有一个XML文档,其中包含多个名称空间; 如何使用SimpleXML解析它?
  • 我的XML在标记名称中有一个冒号(":"),如何使用SimpleXML访问它?
  • 当名称中包含冒号时,如何访问XML文件中的属性?

如果您的问题已作为此问题的副本关闭,则可能与这些示例不同,但此页面应告诉您需要了解的内容.

这是一个说明性的例子:

$xml = '
    <?xml version="1.0" encoding="utf-8"?>
    <document xmlns="http://example.com" xmlns:ns2="https://namespaces.example.org/two" xmlns:seq="urn:example:sequences">
        <list type="short">
            <ns2:item seq:position="1">A thing</ns2:item>
            <ns2:item seq:position="2">Another thing</ns2:item>
        </list>
    </document>
';
$sx = simplexml_load_string($xml);
Run Code Online (Sandbox Code Playgroud)

这段代码不起作用 ; 为什么不?

foreach ( $sx->list->ns2:item as $item ) {
    echo 'Position: ' . $item['seq:position'] . "\n";
    echo 'Item: ' . (string)$item . "\n";
}
Run Code Online (Sandbox Code Playgroud)

第一个问题是->ns2:item语法无效; 但将其更改为此也不起作用:

foreach ( $sx->list->{'ns2:item'} as $item ) { ... }
Run Code Online (Sandbox Code Playgroud)

为什么不呢,你应该用什么呢?

php simplexml xml-namespaces

7
推荐指数
1
解决办法
1419
查看次数

XSLTProcessor xmlSAX2Characters:内存不足

我有一个页面加载500 MB的xml文件,并使用xsl模板解析该文件.解析器在我的本地环境中完美运行.我正在使用WAMP.

在Web服务器上.

警告:DOMDocument :: load()[domdocument.load] :( null)xmlSAX2Characters:/home/mydomain/public_html/xslt/largeFile.xml中的内存不足,/ home/mydomain/public_html/xslt/parser_large中的行:2031052 .php在第6行

我的代码如下,第6行加载xml文件

<?php
$xslDoc = new DOMDocument();
$xslDoc->load("template.xslt");

$xmlDoc = new DOMDocument();
$xmlDoc->load("largeFile.xml");

$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
echo $proc->transformToXML($xmlDoc);
?>

我已经尝试将php.ini文件从wamp安装复制到上面代码所在的文件夹.但这没有帮助.此php.ini文件中的内存限制为memory_limit = 1000M

任何关于此的建议/经验将不胜感激

php xml xslt xml-parsing

4
推荐指数
1
解决办法
2342
查看次数

如何使用SimpleXML获取带有命名空间的节点的属性?

youtube.xml

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:gd="http://schemas.google.com/g/2005" xmlns:yt="http://gdata.youtube.com/schemas/2007">  

    <entry>
        ...
        <yt:duration seconds="1870"/>
        ...
    </entry>

</feed>
Run Code Online (Sandbox Code Playgroud)

update_videos.php

$source = 'youtube.xml';

// load as file
$youtube = new SimpleXMLElement($source, null, true);

foreach($youtube->entry as $item){
    //title works
    echo $item->title;

    //now how to get seconds? My attempt...
    $namespaces = $item->getNameSpaces(true);
    $yt = $item->children($namespaces['yt']);
    $seconds = $yt->duration->attributes();
    echo $seconds['seconds'];
    //but doesn't work :(
}   
Run Code Online (Sandbox Code Playgroud)

php xml namespaces simplexml

3
推荐指数
2
解决办法
1万
查看次数

php simplexml_load_file - 无法在print_r中看到

我是simplexml parserPHP的新手.我已经运行了我找到的示例,它们的工作方式与广告一致.我不能让它与我的程序一起工作.我在这里搜索了几个小时.

我有一个名为core.xml的XML文件(注意节点标签有冒号):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <dc:title>Lecture 3</dc:title>
    <dc:creator>John Brown &amp; Greg Smith</dc:creator>
    <cp:lastModifiedBy>Greg Smith</cp:lastModifiedBy>
    <cp:revision>165</cp:revision>
    <dcterms:created xsi:type="dcterms:W3CDTF">2010-02-19T04:37:55Z</dcterms:created>
    <dcterms:modified xsi:type="dcterms:W3CDTF">2014-01-30T02:41:30Z</dcterms:modified>

</cp:coreProperties>
Run Code Online (Sandbox Code Playgroud)

我使用以下代码将其加载到解析器中:

if (file_exists('core.xml')){

    echo 'file exists <br>';
    $xml_core = simplexml_load_file('core.xml');

    print_r($xml_core);
} 
else 
{    
   exit('Failed to open core.xml.');  
}
Run Code Online (Sandbox Code Playgroud)

该文件存在,但我在print_r得到的是:

file exists    
SimpleXMLElement Object ( ) 
Run Code Online (Sandbox Code Playgroud)

我如何访问节点?我必须使用的其他XML文件有很多层.

谢谢

php xml simplexml xml-parsing simplexml-load-string

2
推荐指数
1
解决办法
1044
查看次数

php 和 xpath - 循环遍历特定元素的子元素

我想遍历以下 xml 文件中的每个 book_list,并为每个 book_list 循环遍历该 book_list 的每本书。

<inventory>
    <book_list>
        <book>
            <author>Rowling</author>
            <title>Harry Potter</title>
        </book>
        <book>
            <author>Blyton</author>
            <title>Famous 5</title>
        </book>
    </book_list>
    <book_list>
        <book>
            <author>Bloggs</author>
            <title>Learning XML</title>
        </book>
        <book>
            <author>Jones</author>
            <title>Beginning PHP</title>
        </book>
    </book_list>
</inventory>
Run Code Online (Sandbox Code Playgroud)

对于每个 book_list,我如何在 php simplexml 脚本中使用 xpath 遍历每本书?这是我的代码,

$booklistpath = $xml->xpath('//booklist');

foreach ($booklistpath as $booklist) {
    $bookpath = $xml->xpath('//book');
    foreach ($bookpath as $book) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个循环很好,它通过每个book_list循环 - 但是嵌套循环,这意味着通过每个book特定的特定循环book_list通过整个文档中的每本书。我也试过:-

'.//book'  and 
'descendant::book'
Run Code Online (Sandbox Code Playgroud)

php xpath simplexml

1
推荐指数
1
解决办法
5436
查看次数