2009-08-11 6 views
1

다음 스크립트로 file_get_contents를 통해 웹 사이트를 동적으로로드합니다.일부 그림이로드되지 않음 (CSS 문제)

<?php 
header('Content-Type: text/html; charset=iso-8859-1'); 

$url = (substr($_GET['url'], 0, 7) == 'http://') ? $_GET['url'] : "http://{$_GET['url']}"; 
$base_url = explode('/', $url); 
$base_url = (substr($url, 0, 7) == 'http://') ? $base_url[2] : $base_url[0]; 

if (file_get_contents($url) != false) { 

$content = @file_get_contents($url); 

// $search = array('@(<a\s*[^>]*href=[\'"]?(?![\'"]?http))@', '|(<img\s*[^>]*src=[\'"]?)|'); 
// $replace = array('\1proxy2.php?url=', '\1'.$url.'/'); 
// $new_content = preg_replace($search, $replace, $content); 


function prepend_proxy($matches) { 
    $url = (substr($_GET['url'], 0, 7) == 'http://') ? $_GET['url'] : "http://{$_GET['url']}"; 
    $prepend = $matches[2] ? $matches[2] : $url; 
    $prepend = 'http://h899310.devhost.se/proxy/proxy2.php?url='. $prepend .'/'; 

    return $matches[1] . $prepend . $matches[3]; 
} 

function imgprepend_proxy($matches2) { 
    $url = (substr($_GET['url'], 0, 7) == 'http://') ? $_GET['url'] : "http://{$_GET['url']}"; 
    $prepend2 = $matches2[2] ? $matches2[2] : $url; 
    $prepend2 = $prepend2 .'/'; 

    return $matches2[1] . $prepend2 . $matches2[3]; 
} 


$new_content = preg_replace_callback(
    '|(href=[\'"]?)(https?://)?([^\'"\s]+[\'"]?)|i', 
    'prepend_proxy', 
    preg_replace_callback(
     '|(src=[\'"]?)(https?://)?([^\'"\s]+[\'"]?)|i', 
     'imgprepend_proxy', 
     $content 
    ) 
); 

echo "<base href='http://{$base_url}' />"; 
echo $new_content; 


} else { 

    echo "Sidan kan inte visas"; 

} 
?> 

이제 일부 사진이 웹 사이트에 표시되지 않는 문제가 있습니다. 예를 들어 CSS 링크가있는 사이트를 예로들 수 있습니다. 그것은 내가 생각하는 CSS 문제이다.

당신은 내가 무슨 뜻인지 보려면 여기를 스크립트를 테스트 할 수 있습니다

http://h899310.devhost.se/proxy/index.html

가 어떻게이 문제를 해결할 수 있습니까?

+0

Okey, 그래서 질문이 하나 있습니다. .CSS 파일인지 확인하려면 어떻게해야합니까? 파일 앞에 $ url 만 붙이십시오. IMG prepend 함수와 마찬가지로, CSS를 사용하십시오. 그게 내가 생각하는대로 풀 수있을거야. 하지만 어떻게해야할지 모르겠다. –

답변

2

URL 대체 방법 중 하나가 너무 많은 수의 슬래시를 추가하는 것으로 보입니다. 프록시가 제공하는 페이지 중 하나를 방문하면 다음으로 시작하는 여러 개의 URL이 표시됩니다.

http:///www.msdn.com 

예 :로드 msdn.com; 는 CSS는,로드 proxy'd 페이지의 소스 코드를 볼 때, 우리는 CSS에 URL이보기 때문에 (나무를 슬래시주의)되지 않습니다

http://h899310.devhost.se/proxy/proxy2.php?url=http:///i3.msdn.microsoft.com/global/global-bn20090721.css 

URL이 직접 밝혀보기 file_get_contents이 URL로드 할 수 있음을 보여주는 스크립트에서 경고 :

Warning: file_get_contents(http:///i3.msdn.microsoft.com/global/global-bn20090721.css) [function.file-get-contents]: failed to open stream: No error in D:\users\u190790\h899310.devhost.se\Wwwroot\proxy\proxy2.php on line 9 
Sidan kan inte visas 

간단하게 당신의 코드를 살펴를, 문제가 $prepend으로 보인다; 그것은이 대신과 같아야합니다

<?php 
$prepend = $matches2[2] ? $matches2[2] : $url . '/'; 
$prepend = $prepend; 
?> 
+0

예, 이제 사이트 사진이 표시됩니다. 그러나! 이제 페이지의 링크는 이전과 같이 스크립트를 통과하지 않습니다. proxy2.php? url = asdsdasd –

1
header('Content-Type: text/html; charset=iso-8859-1'); 

이것은 텍스트 만 표시하도록 프록시를 설정; CSS와 이미지가 프록시를 통해로드되지 않습니다 (또는 적어도 올바르게 표시되지 않음).