Я в затруднительном положении. Мой 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 Scripting:
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
с загрузчиком PHP ionCube v3.1.34, Copyright (c) 2002-2009, авторством ionCube Ltd., и
с Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, Zend Technologies
с Zend Optimizer v3.3.3, Copyright (c) 1998-2007, Zend Technologies
Я проверил этот код на нескольких новых системах Windows, и он провалился на всех. Это наводит меня на мысль, что большинство, если не много, веб-хостов могут использовать настройку, аналогичную моей. Общее решение, основанное на том, что я прочитал, состоит в том, чтобы отключить Zend или закомментировать определенные области файла php.ini
. Поскольку это часть сценария, предназначенного для распространения, большинство моих клиентов не будут иметь прямого доступа к php.ini
и не имеют прав доступа для изменения настроек веб-сервера, таких как расширения Zend.
Как мне решить это в коде? Есть ли обходной путь? Или есть альтернатива использованию DOMDocument
?