2009-08-11 23 views
1

Je charge dynamiquement un site Web via file_get_contents avec le script suivant.Certaines images ne se chargent pas (problème 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"; 

} 
?> 

Maintenant, le problème est que certaines images n'apparaissent pas sur les sites Web. Par exemple, les sites qui ont des liens CSS. C'est un problème CSS je pense.

Vous pouvez tester ici le script pour voir ce que je veux dire:

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

Comment puis-je résoudre ce problème?

+0

Okey, donc j'ai une question. Comment puis-je vérifier s'il s'agit d'un fichier .CSS alors seulement préfixer le $ url devant le fichier, Comme avec la fonction IMG prepend, mais avec CSS. Cela résoudrait je pense. Mais je ne sais pas comment. –

Répondre

2

Il semblerait que l'une de vos méthodes de remplacement d'URL ajoute trop de barre oblique. Visitez l'une des pages de votre proxy fournit, et vous verrez plusieurs URL commençant par:

http:///www.msdn.com 

Prenez par exemple le chargement msdn.com; le CSS ne se charge pas, parce que quand on regarde le code source de la page proxy'd, nous voyons l'URL du CSS est (notez l'arbre slashes):

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

Voir l'URL directement révèle une avertissement dans votre script montrant que file_get_contents ne peut pas charger l'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 

brièvement regarder votre code, il semble que le problème est avec $prepend; il devrait ressembler à ceci:

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

Oui, maintenant il montre les photos du site. MAIS! Maintenant, les liens sur la page ne passent PAS par le script comme avant: proxy2.php? Url = asdsdasd –

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

Cela permet de régler proxy pour afficher le texte uniquement; css et les images ne se chargeront pas via votre proxy (ou du moins, ne s'afficheront pas correctement).

Questions connexes