
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