2017-01-24 1 views
3

원격 페이지를 가져와 (PHP Simple HTML DOM Parser '라이브러리를 사용하여) 일부 요소를 수정하고 수정 된 내용을 출력해야합니다.PHP - 원격 페이지 내용 전체 표시

소스에 전체 URL이없는 원격 페이지에 문제가있어서 CSS 요소와 이미지가로드되지 않습니다. 물론, 그것은 요소를 수정하는 것을 막지는 못하지만 결과는 나 빠진다.

예를 들어

오픈 https://www.raspberrypi.org/downloads/

그러나 코드를

$html = file_get_html('http://www.raspberrypi.org/downloads'); 
echo $html; 

를 사용하는 경우 나쁜 볼 것이다. 나는 간단한 해킹을 적용하려고하지만 조금 도움이 :

$html = file_get_html('http://www.raspberrypi.org/downloads'); 
$html=str_ireplace("</head>", "<base href='http://www.raspberrypi.org'></head>", $html); 
echo $html; 

'http://www.raspberrypi.org'에서 $ html로 변수의 모든 링크를 구문 분석 스크립트를 "지시"어떤 방법이 있나요? 즉, raspberrypi.org를 가져온 모든 이미지/CSS 요소의 "주요"원본으로 만드는 방법은 무엇입니까?

나는 그것을 더 잘 설명하는 방법을 알지 못한다. 그러나 나는 당신에게 생각이 있다고 믿는다.

답변

0

/img/form 태그를 작성하여 전체로 만듭니다. 경우 누군가가 필요에 아래의 코드를 찾을 : 그것은 (일부 추가 코딩을 필요로하는) ​​작업 솔루션처럼 보이는

//finalizes remote page by completing incomplete css/img/form URLs (path/file.css becomes http://somedomain.com/path/file.css, etc.) 
function finalize_remote_page($content, $root_url) 
{ 
$root_url_without_scheme=preg_replace('/(?:https?:\/\/)?(?:www\.)?(.*)\/?$/i', '$1', $root_url); //ignore schemes, in case URL provided by user was http://domain.com while URL in source is https://domain.com (or vice-versa) 

$content_object=str_get_html($content); 
if (is_object($content_object)) 
    { 
    foreach ($content_object->find('link.[rel=stylesheet]') as $entry) //find css 
     { 
     if (substr($entry->href, 0, 2)!="//" && stristr($entry->href, $root_url_without_scheme)===FALSE) //ignore "invalid" URLs like //domain.com 
      { 
      $entry->href=$root_url.$entry->href; 
      } 
     } 

    foreach ($content_object->find('img') as $entry) //find img 
     { 
     if (substr($entry->src, 0, 2)!="//" && stristr($entry->src, $root_url_without_scheme)===FALSE) //ignore "invalid" URLs like //domain.com 
      { 
      $entry->src=$root_url.$entry->src; 
      } 
     } 

    foreach ($content_object->find('form') as $entry) //find form 
     { 
     if (substr($entry->action, 0, 2)!="//" && stristr($entry->action, $root_url_without_scheme)===FALSE) //ignore "invalid" URLs like //domain.com 
      { 
      $entry->action=$root_url.$entry->action; 
      } 
     } 
    } 

return $content_object; 
} 
1

난 그냥 지역에서이 작업을 시도하고, 나는 HTML에서 링크 태그처럼 (소스 코드) 나타났습니다 :

<link rel='stylesheet' href='/wp-content/themes/mind-control/js/qtip/jquery.qtip.min.css' /> 

그것은 분명히에 있어야 할 파일이 필요합니다 내 로컬 디렉토리 (예 : localhost/wp-content/etc ... /). 링크 태그의 href를 그래서 당신이 아마하고 싶은 모든 링크 태그를 찾아 나머지 앞에 자신의 href 속성 "https://www.raspberrypi.org/"에 추가입니다

<link rel='stylesheet' href='https://www.raspberrypi.org/wp-content/themes/mind-control/js/qtip/jquery.qtip.min.css' /> 

과 같이해야합니다.

편집 : 이봐, 난 실제로 스타일의 작업을했습니다,이 코드를 시도 :

만 니콜라이 Ganovski, 나는 불완전 CSS를 찾아서 전체에 부분 페이지를 변환하는 코드를 작성하는 솔루션을 제공하기 때문에
$html = file_get_html('http://www.raspberrypi.org/downloads'); 
$i = 0; 
foreach($html->find('link') as $element) 
{ 
     $html->find('link', $i)->href = 'http://www.raspberrypi.org'.$element->href; 
     $i++; 
} 
echo $html;die; 
+0

예를 - 원격 도메인의 그 안에 포함되지 않은 모든 "무효"링크를 발견, 도메인 추가 및 내용 출력 –

+0

귀하의 노력에 감사 드리며 지금은 유일한 해결책 인 것 같습니다. 물론 코드를 약간 수정해야합니다 (코드가 여러 페이지를 구문 분석하는 데 사용되기 때문에 도메인 URL이없는 링크에만 접두사를 추가해야 함).하지만 대부분이 허용되는 대답 일 것입니다. 쉬운 생각) :) –

+0

예. href에 도메인이 포함되어 있는지 확인할 수 있습니다. 이미지의 경우 본문 요소를 반복하고 전체 요소의 문자열 값에 이미지 확장명 (예 : '.gif', '.png')이 있는지 확인하는 것이 좋습니다. 그런 다음 현재 요소의 이미지 url 또는 src를 편집 할 수 있습니다. –

관련 문제