请教个 PHP 的问题。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Saaee
V2EX    PHP

请教个 PHP 的问题。

  •  
  •   Saaee 2014 年 12 月 10 日 3617 次点击
    这是一个创建于 4149 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用PHP拼接字符串。用于生成网站的sitemap.xml。总共链接也不多。1W条左右。
    但是拼接到一半就会出错。看不到报错信息。直接显示空白。
    var_dump能看到字符串长度,但是echo就是空白。
    比较新手,不知道哪里出了错误。是否有长度限制?
    13 条回复    2014-12-11 14:24:23 +08:00
    abelyao
        1
    abelyao  
       2014 年 12 月 10 日
    sitemap.xml 竟然是 1W 条记录全出来…
    我猜测吧,可能是其中某条的转义符问题?你应该是循环拼接的吧,在循环里加个 echo $row; 看看是拼到第几条记录开始有问题的
    hdjdcyl
        2
    hdjdcyl  
       2014 年 12 月 10 日
    xml没玩过,是不是碰到html代码解析了,你在浏览器查看源代码看一下。
    iyaozhen
        3
    iyaozhen  
       2014 年 12 月 10 日
    “用PHP拼接字符串。用于生成网站的sitemap.xml。”
    找个php操纵DOM的库方便点吧。
    yangqi
        4
    yangqi  
       2014 年 12 月 10 日
    error_reporting(E_ALL);
    kofj
        5
    kofj  
       2014 年 12 月 10 日 via Android
    没用框架或者模板引擎裸奔的?为什么不用模板呢?写好模板,数据往里面一扔,搞定,实测20w数据xml没有压力。如果非要要看警告信息,error_reporting调整为notice就好了。
    philway
        6
    philway  
       2014 年 12 月 10 日
    应该是有编码不同的字符输出,仔细再检查一下吧。
    lincanbin
        7
    lincanbin  
       2014 年 12 月 11 日
    直接显示空白我猜是你浏览器挂了。
    wormcy
        8
    wormcy  
       2014 年 12 月 11 日 via Android
    看下源代码可能有惊喜
    huigeer
        9
    huigeer  
       2014 年 12 月 11 日
    直接命令行生成xml, 打开报错, 一下子就能找到原因,
    Saaee
        10
    Saaee  
    OP
       2014 年 12 月 11 日 via iPhone
    @huigeer 报错开着
    本地没问题。上线就错。
    feiyuanqiu
        11
    feiyuanqiu  
       2014 年 12 月 11 日
    不要自己拼XML!

    PHP有很多方法来处理XML,自己拼是最不推荐的方法

    1、生成 XML 可以用 DOMDocument :

    ```php
    // create a new document
    $dom = new DOMDocument('1.0');

    // create root element. and append it to the document
    $book = $dom->appendChild($dom->createElement('book'));

    // create the child element and append it to the book
    $title = $book->appendChild($dom->createElement('title'));

    // set the text and cover attribute for $title
    $tilte->appendChild($dom->createTextNode('title_name'));
    $title->setAttribute('edition', 3);

    // format the document, and print it
    $dom->formatOutput = true;
    $xml = $dom->saveXML();
    ```

    2、解析基本XML文档可以用 SimpleXML :

    ```php
    // 从文件中加载xml文档
    $sx = simplexml_load_file(__DIR__ . '/test.xml');
    // 从字符串中加载
    $sx = simplexml_load_string($xml);
    foreach($sx->person as $person) {
    $first_name = $person->firstname;
    $last_name = $person->lastname;
    }
    ```

    3、解析复杂 XML 可以用 DOM :

    ```php
    $node = dom_import_simplexml(simplexml_load_string($xml));
    ```

    4、解析大型 XML 文档可以用 XMLReader :

    ```php
    $reader = new XMLReader;

    // load from file
    $reader->open(__DIR__ . '/test.xml');
    // load from variable
    // $reader->XML($xml);

    // loop through document
    while ($reader->read()) {
    // if in a element named 'author'
    if ($reader->nodeType == XMLREADER::ELEMENT &&
    $reader->localName == 'author') {
    // move to the next node;
    $reader->read();
    print $reader->value . "\n";
    }
    }
    ```

    另外,浏览器是会解析XML的,当你的XML是错误的时候,浏览器解析不了就不会显示出来。
    这时候你可以直接查看网页源代码或者在 echo 的时候前面加个 <pre>
    feiyuanqiu
        12
    feiyuanqiu  
       2014 年 12 月 11 日
    上一条说的 echo 前面加 <pre> 是我记错了,刚才看了下以前的代码,应该用 header 浏览器就知道该怎么显示 XML 了:

    header('Content-Type: text/xml');
    tczzjin
        13
    tczzjin  
       2014 年 12 月 11 日
    php的内存爆了?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2528 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 101ms UTC 15:53 PVG 23:53 LAX 08:53 JFK 11:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86