我通过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
我该如何解决这个问题?
答案 0 :(得分:2)
您的某个网址替换方法似乎是添加了太多的斜杠。访问您的代理提供的其中一个页面,您将看到几个以:
开头的网址http:///www.msdn.com
以加载msdn.com为例; CSS不会加载,因为在查看代理页面的源代码时,我们看到CSS的URL是(注意树正斜杠):
http://h899310.devhost.se/proxy/proxy2.php?url=http:///i3.msdn.microsoft.com/global/global-bn20090721.css
直接查看网址会在您的脚本中显示警告,显示file_get_contents
无法加载网址:
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 :(得分:1)
header('Content-Type: text/html; charset=iso-8859-1');
这会将代理设置为仅显示文本; css和图像不会通过您的代理加载(或至少,无法正确显示)。