Некоторые картинки не загружаются (проблема CSS?) - PullRequest
1 голос
/ 11 августа 2009

Я динамически загружаю сайт с помощью file_get_contents с помощью следующего скрипта.

<?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

Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 11 августа 2009

Может показаться, что одним из методов замены URL является добавление слишком большого количества косой черты. Посетите одну из страниц, которую предоставляет ваш прокси, и вы увидите несколько URL-адресов, начинающихся с:

http:///www.msdn.com

Взять, к примеру, загрузку msdn.com; CSS не загружается, потому что, глядя на исходный код прокси-страницы, мы видим, что URL-адрес CSS (обратите внимание на косую черту дерева):

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;
?>
1 голос
/ 18 сентября 2011
header('Content-Type: text/html; charset=iso-8859-1');

Это устанавливает ваш прокси для отображения только текста; CSS и изображения не будут загружаться через ваш прокси (или, по крайней мере, не будут отображаться правильно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...