2014-12-16 3 views
0

URL을 사용하여 HTML 페이지를로드하려고합니다. 이것은 내가 한 페이지에 이미지의 수를 찾기 위해 지금 뭘하는지입니다 :PHP에서 HTML 페이지로드하기

$html = "http://stackoverflow.com/"; 
$doc = new DOMDocument(); 
@$doc->loadHTML($html); 

$tags = $doc->getElementsByTagName('*'); 

$count = 0; 
foreach ($tags as $tag) { 
    if (strcmp($tag->tagName, "img") == 0) { 
     $count++; 
    } 
} 
echo $count; 

나는이이 작업을 수행 할 수있는 효율적인 방법이 아니라는 것을 알고, 난 그냥 예로 설정합니다. 매번 카운트는 0입니다. 그러나 페이지에 이미지가 있습니다. 어느 쪽이 페이지가 올바르게로드되지 않는다고 믿을까요. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 감사.

답변

0

있는 DOMDocument :: loadHTML the docs에서 -로드 HTML을 문자열 그것은 서명의

에서 약 매우 분명하다 this : too

을 사용해 보거나 file_get_contents 또는 cURL 요청 (가장 적합한 방법으로)을 사용하여 주어진 URL의 마크 업을 얻을 수 있습니다. 뭔가 통지/경고/오류를 방출하는 경우

그리고 는 문제가있다, 죽음의 오류 억제 연산자 @을 사용하지 마십시오. 무시하지 말고 고쳐주세요!

+0

실제로 그것을 고쳤습니다. 내가 물었던 바로 그 때. 그러나 당신은 대답을 조금 더 설명합니다. 도와 주셔서 감사합니다! – nick

1

HTML의 태그 이름은 대문자로 대문자이지만 strcmp 대신 strcasecmp을 사용하여 문제를 피할 수 있습니다.

또는 적절하게 수행하여 두 문제를 방지 :

$count = $doc->getElementsByTagName('img')->length; 
+0

답변을 주셔서 감사하지만 명시된 바와 같이 페이지를로드하지 않았 음을 표시하기 위해이를 설정합니다. 나는 단지 $ html = "http://stackoverflow.com/"대신에이'$ html = file_get_contents ("http://stackoverflow.com/");를 사용하여 30 초 전에 그것을 알아 냈다.; – nick

+0

@nick : cf 내 대답, 여기서'DOMDocument :: loadHTML'은 url을 수행하지 않고 (DOMDocument :: loadHTMLFile과 함께 cURL 요청과 함께'file_get_contents'를 포함하는) 3 가지 대안을 제시합니다. –

관련 문제