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
?
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
J'ai traîné un peu. Va mettre à jour maintenant. Merci. – megatr0n