Sorunları PHP 5.2.6 yükselttikten sonra

1 Cevap php

Ben burada bir çıkmaz içinde değilim. Benim PHP kodu çalışmak için kullanılır ama PHP 5.2.6 yükseltilmiş çünkü ben şimdi olsun:

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

İşte kaynağı:

<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>

Bazı çevrimiçi araştırma yaptıktan sonra Zend uzantıları neden olabilir bulundu. İşte benim Zend kurulumu gibi görünüyor.

This program makes use of the Zend Scripting Language Engine: Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies with the ionCube PHP Loader v3.1.34, Copyright (c) 2002-2009, by ionCube Ltd., and with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technologies with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies

Ben birkaç yeni Windows sistemleri üzerinde bu kodu denedim ve tüm üzerinde başarısız oldu. Bu çok değilse çoğu, webhosts ben birine benzer bir kurulum kullanıyor olabilirsiniz inanmak için bana yol açar. Ben ne okudum dayalı ortak çözüm, Zend devre dışı bırakmak veya php.ini dosyanın belirli alanlarını yorum etmektir. Bu dağıtımı içindir bir senaryonun parçası olduğu için, benim müşterilerinin çoğu php.ini doğrudan erişim var ne de böyle Zend uzantıları gibi webserver ayarlarını değiştirmek için erişim haklarına sahip olmayacaktır.

Nasıl bu kodu çözmek mi? Bir çözüm var mı? Veya DOMDocument kullanarak bir alternatif var mı?

1 Cevap

Sen DOMDocument alternatif olarak, SimpleXML deneyebilirsiniz. Bu out-of-the-box tüm PHP5 tesisler üzerinde çalışması gerekir.

Örneğin, bu DOMDocument kod yapmak gerekiyordu ne oldukça yakın olmalıdır:

<?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...
?>

Tho test değil, bu yüzden bunu biraz adapte olabilir.

XML belgeleri ayrıştırmak için diğer alternatifler (ve en geçerli HTML belgeleri uzantısı,) da vardır. Bkz PHP: XML Manipulation.