升级到PHP 5.2.6后出现的问题

升级到PHP 5.2.6后出现的问题,php,html,domdocument,Php,Html,Domdocument,我在这里陷入了困境。我的PHP代码过去可以工作,但自从升级到PHP 5.2.6后,我现在得到: Warning: domdocument::domdocument() expects parameter 2 to be long, string given in C:\xamps older\xampp167\htdocs\test\myphp\CSR Demo pack\csr\output.php on line 46 Fatal error: Call to undefined meth

我在这里陷入了困境。我的PHP代码过去可以工作,但自从升级到PHP 5.2.6后,我现在得到:

Warning: domdocument::domdocument() expects parameter 2 to be long, string given in C:\xamps older\xampp167\htdocs\test\myphp\CSR Demo pack\csr\output.php on line 46

Fatal error: Call to undefined method domdocument::loadHTML() in C:\xamps older\xampp167\htdocs\test\myphp\CSR Demo pack\csr\output.php on line 50
资料来源如下:

<html>
    <head>
    </head>

    <body>

        <?php

        //error_reporting(0);

        /********** outputer **********/

        $bool=file_exists("data/tcmpsr.txt");
        if ($bool == 1)
        {
            $numstr=file_get_contents("data/tcmpsr.txt");
            if ($numstr <> "")
            {
                $NumOfTitleChars= $numstr;
            }
        }
        Else
        {

        }

        $bool=file_exists("data/dcmpsr.txt");
        if ($bool == 1)
        {
            $numstr=file_get_contents("data/dcmpsr.txt");
            if ($numstr <> "")
            {
             $NumOfDtlChars = $numstr;
            }
        }
        Else
        {

        }

        /*** A new DOM object ***/
            $dom = new DOMDocument('1.0','utf-8');

            /*** load the html into the object ***/
            $html = file_get_contents("data/csr.html");
            $dom->loadHTML($html);

            /*** discard white space ***/
            $dom->preserveWhiteSpace = false;

            /*** get the tags by its tag name ***/
            $artclArray = $dom->getElementsByTagName('div');
            $hdArray = $dom->getElementsByTagName('h2');
            $spanArray = $dom->getElementsByTagName('span');

            $i=0;
            $x=0;
            $y=0;
            $z=0;

        foreach ($artclArray as $memberid)
        {
            $divArray[$x]=$memberid->nodeValue;
            $x++;
        }

        foreach ($hdArray as $memberid)
        {
            $hdlsArray[$y]=$memberid->nodeValue;
            $y++;
        }

        foreach ($spanArray as $memberid)
        {
            $dtlsArray[$z]=$memberid->nodeValue;
            $z++;
        }

        $hdsele=0;
        foreach($hdlsArray as $elemid)
        {
            $AmountOfHdlChars=$NumOfTitleChars;
            $eachTitle=$elemid;

            for ($count=0; $count<$AmountOfHdlChars; $count++)
            {
                $chara[$count]=$eachTitle[$count];
            }
            $smallTitle=implode($chara);
            $shortTitleArray[$hdsele]=$smallTitle;
            $hdsele++;
        }

        $dtlele=0;
        foreach($dtlsArray as $elemid)
        {
            $AmountOfDtlChars=$NumOfDtlChars;
            $eachDetail=$elemid;

            for ($count=0; $count<$AmountOfDtlChars; $count++)
            {
                $chara[$count]=$eachDetail[$count];
            }
            $smallDtl=implode($chara);
            $shortDtlArray[$dtlele]=$smallDtl;
            $dtlele++;
        }
        //echo "".$shortTitleArray[0]."<br />";
        //echo "".$shortDtlArray[0]."<br />";
        //echo "".$divArray[0]."<br />";

        //The Result is three arrays "shortTitleArray", "divArray" and //"shortDtlArray".
        //hdlsArray and dtlsArray contain full actual headlines and details.


        /******************************/

        ?>

        </body>
</html>

在网上做了一些研究之后,我发现扩展可能是原因。下面是我的Zend设置的样子

此程序使用Zend脚本语言引擎: Zend Engine v2.2.0版权所有(c)1998-2008 Zend Technologies ionCube PHP Loader v3.1.34,版权(c)2002-2009,由ionCube有限公司提供,以及 Zend Extension Manager v1.2.0,版权所有(c)2003-2007,由Zend Technologies提供 Zend Optimizer v3.3.3版权所有(c)1998-2007,由Zend Technologies提供

我在几个新的Windows系统上测试了这段代码,但在所有系统上都失败了。这让我相信,大多数(如果不是很多的话)网络主机可能正在使用与我类似的设置。根据我所读的内容,常见的解决方案是禁用Zend或注释掉
php.ini
文件的特定区域。因为这是用于分发的脚本的一部分,所以我的大多数客户将无权直接访问
php.ini
,也无权修改Web服务器设置,如Zend extensions

如何在代码中解决这个问题?有解决办法吗?或者有没有替代使用
DOMDocument
的方法?

您可以尝试,作为DOMDocument的替代方法。它应该在所有PHP5安装上都可以开箱即用

例如,这应该非常接近DOMDocument代码的功能:

<?php
// Load the string and create a SimpleXMLElement
$html_string = file_get_contents("data/csr.html");
$root = new SimpleXMLElement($html_string);

// Fetch all div, h2 and span values
$divs = $h2s = $spans = array();
foreach ($xml->div as $div) {
    $divs[] = $div;
}
foreach ($xml->h2 as $h2) {
    $h2s[] = $h2;
}
foreach ($xml->span as $span) {
    $spans[] = $span;
}

// etc...
?>
div作为$div){
$divs[]=$div;
}
foreach($xml->h2作为$h2){
$h2s[]=$h2;
}
foreach($xml->span作为$span){
$spans[]=$span;
}
//等等。。。
?>
我还没有测试过,所以你可能需要调整一下


还有许多其他方法可以解析XML文档(以及大多数有效的HTML文档)。请参阅。

为什么要升级到5.2.6?试着一路走到现在的现实;5.2.11. 可能是一个已经修复的bug。-而且,在您进行此操作的同时,您还可以直接访问5.3.1;]我一直有点落后。现在将升级。谢谢。我会试试看。“看到我发布的页面左侧的列表了吗?”,我没有看到任何链接。奇怪的是,我在这里看到了它们。试试这个:
http://php.net/manual/en/refs.xml.php
。更详细的是同一个列表。一个例子会非常有用。添加了一个简单的例子。注意,我没有方法来测试它,所以我认为它更像是伪代码而不是一个工作示例。这里还有很多例子
http://php.net/manual/en/simplexml.examples-basic.php