2009-12-02 5 views
0

Je suis dans une situation difficile ici. Mon code PHP utilisé pour travailler, mais depuis que je suis passé à PHP 5.2.6 je reçois maintenant:Problèmes après la mise à niveau vers 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 

Voici la source:

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

Après avoir fait quelques recherches, j'ai en ligne que Zend extensions pourraient être la cause. Voici à quoi ressemble mon installation Zend.

Ce programme utilise le moteur Zend Langue dans le script: Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies avec le ionCube PHP Loader v3.1.34, Copyright (c) 2002-2009, par ionCube Ltd., et avec le gestionnaire Zend Extension v1.2.0, Copyright (c) 2003-2007, par Zend Technologies avec Zend Optimizer V3.3.3, Copyright (c) 1998-2007, par Zend Technologies

Je testé ce code sur plusieurs nouveaux systèmes Windows et il a échoué sur tous. Cela m'amène à croire que la plupart, sinon beaucoup, webhosts pourraient utiliser une configuration similaire à celle que j'ai. La solution courante, basée sur ce que j'ai lu, est de désactiver Zend ou de commenter des zones spécifiques du fichier php.ini. Parce que cela fait partie d'un script destiné à la distribution, la plupart de mes clients n'auront pas un accès direct au php.ini et n'auront pas les droits d'accès pour modifier les paramètres du serveur Web tels que les extensions Zend.

Comment résoudre ceci en code? Y at-il un travail autour? Ou existe-t-il une alternative à l'utilisation DOMDocument?

+0

Pourquoi avez-vous passé à la version 5.2.6? Essayez d'aller jusqu'à la réalité actuelle; 5.2.11. Peut-être un bug qui a déjà été corrigé. - Et, pendant que vous y êtes, vous pourriez aller jusqu'au 5.3.1;] – Atli

+0

J'ai traîné un peu. Va mettre à jour maintenant. Merci. – megatr0n

Répondre

1

Vous pouvez essayer SimpleXML, comme alternative à DOMDocument. Il devrait fonctionner sur toutes les installations de PHP5.

Par exemple, cela devrait être assez proche de ce que votre code DOMDocument était censé faire:

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

ai pas testé tho, de sorte que vous pourriez avoir à adapter un peu.

Il existe également un certain nombre d'autres alternatives pour analyser des documents XML (et la plupart des documents HTML valides, par extension). Voir PHP: XML Manipulation.

+0

Je vais essayer et voir. "Voir la liste sur le côté gauche de la page que j'ai posté.", Je ne vois pas de liens. – megatr0n

+0

Bizarre, je les vois ici. Essayez ceci: 'http: // php.net/manual/en/refs.xml.php'. C'est la même liste en plus de détails. – Atli

+0

Un exemple aurait été si utile. – megatr0n

Questions connexes