2009-12-02 8 views
0

여기 곤경에 처해 있습니다. 내 PHP 코드가 작동하는 데 사용하지만 5.2.6를 PHP로 업그레이드 된 이후 지금 얻을 : 나는 Zend 확장 될 수 있다는 것을 발견PHP 5.2.6으로 업그레이드 한 후 발생하는 문제

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

온라인 어떤 연구를하고 후 : 여기

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 

소스입니다 그 원인. 내 젠드 설정이 어떻게 생겼는지 보여줍니다. 젠드 엔진 V2.2.0, 저작권 (c) 상기 이온 큐브 PHP 로더 v3.1.34, 저작권 (C)와 1998-2008 젠드 테크놀로지 2,002에서 2,009 사이에 의해 :

이 프로그램은 젠드 스크립트 언어 엔진을 사용한다 이온 큐브 (주), 젠드 확장 관리자 V1.2.0와 젠드 기술에 의해 젠드 기술 젠드 최적화 v3.3.3와 , 저작권 (C) 1,998에서 2,007 사이에 의해, 저작권 (C) 2003-2007

내가 가진 몇 가지 새로운 Windows 시스템에서이 코드를 테스트했으며 모두 실패했습니다. 이것은 대부분의, 그렇지 않으면 많은 웹 호스트가 내가 가진 것과 비슷한 설정을 사용하고 있다고 믿게합니다. 필자가 읽은 바를 토대로 일반적인 해결책은 젠드를 사용하지 않거나 php.ini 파일의 특정 영역을 주석 처리하는 것입니다. 이 스크립트는 배포 용 스크립트의 일부이기 때문에 대부분의 고객은 php.ini에 직접 액세스 할 수 없으며 Zend 확장 프로그램과 같은 웹 서버 설정을 수정할 수있는 액세스 권한도 없습니다.

코드에서 어떻게 해결할 수 있습니까? 해결 방법이 있습니까? 또는 DOMDocument을 사용할 수 있습니까?

+0

왜 5.2.6으로 업그레이드 했습니까? 현재 realease까지 계속 시도하십시오. 5.2.11. 이미 해결 된 버그 일 수 있습니다. - 그리고, 당신이 그것을하는 동안, 당신도 갈 수 있습니다 모든 방법을 5.3.1;] – Atli

+0

난 조금 지연되었습니다. 지금 업그레이드 할 예정입니다. 감사. – megatr0n

답변

1

DOMDocument 대신 SimpleXML을 시도해 볼 수 있습니다. 모든 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... 
?> 

는 상점을 테스트하지 않았습니다.

XML 문서 (및 가장 유효한 HTML 문서, 확장명)를 구문 분석하는 여러 가지 다른 방법도 있습니다. PHP: XML Manipulation을 참조하십시오.

+0

나는 그것을 시험해보고 볼 것이다. "나는 게시 한 페이지의 왼쪽에있는 목록을 참조하십시오.", 나는 어떤 링크를 볼 수 없습니다. – megatr0n

+0

이상한데, 나는 그들을 여기에서 본다. 이것을보십시오 : http : // php.net/manual/ko/refs.xml.php'. 그것은 더 자세하게 동일한 목록입니다. – Atli

+0

예가 도움이되었을 것입니다. – megatr0n

관련 문제