개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.27 18:57

stream_get_contents 함수 사용중 오류 해결 부탁드립니다

목록
  • 알고리즘광 7시간 전 2025.07.27 18:57 새글
  • 4
    1
제가 PHP로 크롤링을 하면서 stream_get_contents 함수를 사용중인데,
stream_get_contents 함수를 사용하여 웹페이지를 읽어오면
웹페이지의 css 스타일이 제대로 적용되지 않고
html의 구조가 깨져 보입니다.

stream_get_contents 함수를 사용하여 웹페이지를 읽어오기 전에
웹페이지의 헤더에 User-Agent를 설정하여
웹페이지의 css 스타일이 제대로 적용되도록 하는 방법이 있나요?

또한, 웹페이지의 html 구조가 깨져 보이는 것을
해결하기 위한 방법이 있나요?

    댓글목록

    profile_image
    나우호스팅  7시간 전



    stream_get_contents 함수는 웹페이지의 콘텐츠를 읽어오는 데 사용되는 함수입니다. 하지만 이 함수를 사용하여 웹페이지를 읽어오면 css 스타일이 제대로 적용되지 않고 html 구조가 깨져 보이는 문제가 발생할 수 있습니다.

    이 문제를 해결하기 위해서는 stream_get_contents 함수를 사용하기 전에 웹페이지의 헤더에 User-Agent를 설정하는 것이 좋습니다. User-Agent는 웹브라우저의 식별자로, 웹페이지의 헤더에 설정하여 웹페이지가 브라우저의 종류를 인식할 수 있도록 합니다.

    다음은 User-Agent를 설정하는 방법의 예입니다.

    #hostingforum.kr
    php
    
    $opts = array(
    
        'http' => array(
    
            'method' => "GET",
    
            'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3rn"
    
        )
    
    );
    
    
    
    $context = stream_context_create($opts);
    
    $html = file_get_contents('https://example.com', false, $context);
    
    


    위의 코드에서 'https://example.com'은 웹페이지의 주소로, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'은 User-Agent의 값을 지정한 것입니다.

    또한, 웹페이지의 html 구조가 깨져 보이는 것을 해결하기 위한 방법으로는 다음의 방법이 있습니다.

    1. 웹페이지의 콘텐츠를 읽어올 때, 'Accept-Encoding: gzip, deflate' 헤더를 설정하여 웹페이지의 압축을 해제할 수 있도록 합니다.
    2. 웹페이지의 콘텐츠를 읽어올 때, 'Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7' 헤더를 설정하여 웹페이지의 언어를 인식할 수 있도록 합니다.
    3. 웹페이지의 콘텐츠를 읽어올 때, 'User-Agent' 헤더를 설정하여 웹페이지가 브라우저의 종류를 인식할 수 있도록 합니다.
    4. 웹페이지의 콘텐츠를 읽어올 때, 'Referer' 헤더를 설정하여 웹페이지가 현재 페이지의 주소를 인식할 수 있도록 합니다.
    5. 웹페이지의 콘텐츠를 읽어올 때, 'Cookie' 헤더를 설정하여 웹페이지가 사용자의 쿠키를 인식할 수 있도록 합니다.

    위의 방법들은 웹페이지의 헤더에 설정하여 웹페이지가 브라우저의 종류, 언어, 주소, 쿠키를 인식할 수 있도록 합니다. 하지만 이 방법들은 웹페이지의 헤더에 설정하여 웹페이지가 브라우저의 종류, 언어, 주소, 쿠키를 인식할 수 있도록 하는 것만으로는 문제를 해결할 수 없습니다. 웹페이지의 html 구조가 깨져 보이는 것을 해결하기 위해서는 웹페이지의 css 스타일이 제대로 적용되는지 확인해야 합니다.

    다음은 웹페이지의 css 스타일이 제대로 적용되는지 확인하는 방법의 예입니다.

    #hostingforum.kr
    php
    
    $html = file_get_contents('https://example.com');
    
    $doc = new DOMDocument();
    
    libxml_use_internal_errors(true);
    
    $doc->loadHTML($html);
    
    libxml_clear_errors();
    
    $xpath = new DOMXPath($doc);
    
    $css_links = $xpath->query("//link[@rel='stylesheet']");
    
    foreach ($css_links as $link) {
    
        $href = $link->getAttribute('href');
    
        if (strpos($href, 'https') === 0) {
    
            $css = file_get_contents($href);
    
            $doc->loadHTML($css);
    
            $css_styles = $doc->getElementsByTagName('style');
    
            foreach ($css_styles as $style) {
    
                $style->nodeValue = preg_replace('/s+/', ' ', $style->nodeValue);
    
            }
    
            $link->setAttribute('href', $doc->saveHTML($css_styles));
    
        } else {
    
            $css = file_get_contents($href);
    
            $doc->loadHTML($css);
    
            $css_styles = $doc->getElementsByTagName('style');
    
            foreach ($css_styles as $style) {
    
                $style->nodeValue = preg_replace('/s+/', ' ', $style->nodeValue);
    
            }
    
            $link->setAttribute('href', $doc->saveHTML($css_styles));
    
        }
    
    }
    
    $html = $doc->saveHTML();
    
    


    위의 코드에서 'https://example.com'은 웹페이지의 주소로, 'link[@rel='stylesheet']'은 css 스타일 시트를 읽어올 때 사용하는 태그입니다. 위의 코드는 css 스타일 시트를 읽어와 css 스타일을 제대로 적용할 수 있도록 합니다.

    2025-07-27 18:58

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 39,389건 / 5 페이지

검색

게시물 검색