2011-05-07 122 views
4

我刚刚遇到一个重要问题,因为我有很多来自另一个域的来源,这意味着如果我使用iframe,我必须调整所有这些内容。但问题是我无法修改或插入代码来源网页。 因为这些,我想问问是否有其他解决方案可以跳过使用iframe? 提示:我需要url中的全部内容(包括图片,CSS等)。不是内容的一部分。有没有什么方法可以替代iframe?

+0

我希望其他域可以使用那里的数据。 – epascarello 2011-05-07 22:33:00

+0

是的。我不是一个黑客((::我讨厌客户,因为他们不希望我修改他们的代码,但如果真的不可能,我会与他们谈判 – xiaohang 2011-05-08 10:09:01

回答

1

PHP的include功能可能是最好的开始。它只是您无法更改的标记,还是您能够使用PHP和JavaScript?

编辑:

使用include('http://www.google.com')包括在你的页面的URL,而不使用iframe尝试。代码中的任何非绝对目录引用(如<img src='/img.png'>将不会显示或加载正确。

如果您需要修复这些引用并且无法更改标记本身,则可以使用file_get_contents函数并修改这样的事情:

$page = file_get_contents('http://www.google.com'); 
$page = preg_replace('/(href|src)=([\'"])\//',"$1=$2http://google.com/",$page); 
echo $page; 
+0

感谢您的意见,我无法调整内容iframe,因为它来自另一个域,最重要的是我无法修改源页面,所以我想替换iframe,可以给我更多的信息或者像一些示例代码谢谢 – xiaohang 2011-05-08 10:03:30

+0

顺便说一下,它不是一个PHP文件,它是一个特定的网址,例如http://www.google.com – xiaohang 2011-05-08 10:11:53

+0

您可以使用PHP的包含函数包含网址,尝试'include“http://www.google.com”;'。如果它不起作用,您可能需要修改您的php.ini文件的'allow_url_include'变量。 如果您需要修改URL中显示的页面内容,可以使用PHP的[file_get_contents](http:// php.net/manual/en/function.file-get-contents.php)功能打开并修改返回的数据。 – 2011-05-10 00:11:34

1

快速的想法 - 你可以尝试写在服务器端的代理和服务于iframe中的内容,但SRC指向代理页,而不是真正的网页(即受控通过参数)

+0

非常感谢。这样,我仍然需要改变源页面中的内容。但作为这个项目。这是不可能的。那是其他解决方案吗? – xiaohang 2011-05-08 10:04:34

+0

我不确定我是否了解您的需求。源页面中的哪些更改需要使用代理的解决方案? – Marek 2011-05-09 08:48:19

0

使用JSONP数据类型进行AJAX调用以返回另一页的内容。您需要对两个域上的代码进行修改才能完成此工作。 http://en.wikipedia.org/wiki/JSONP

+0

谢谢。问题是我无法修改源域中的代码... – xiaohang 2011-05-08 10:05:02

-1

的jQuery加载到一个div http://api.jquery.com/load/

+1

其他域 - 所以除非它使用CORS,不可能 – mplungjan 2011-05-08 06:01:59

+0

是啊。这是我处理最困难的部分。我想不使用JavaScript,而是想用PHP curl来解决这个问题。 – xiaohang 2011-05-08 11:47:28

+0

是的,制作代理并将文件包含在服务器上。 – mplungjan 2011-05-08 20:08:21

0

修改@beanland的答案,我/proxy.php文件,用缓存:

$host = parse_url($_GET['url'], PHP_URL_HOST); 
$dir = $_SERVER[DOCUMENT_ROOT].'/cache_proxy/'.$host; 
if(!is_dir($dir)) 
    mkdir($dir); 
$filepath = $dir.'/'.md5($_GET['url']); 

if(is_file($filepath)){ 
    include($filepath); 

}else{ 
    $page = file_get_contents($_GET['url']); 

    $page = preg_replace('/(a href)=[\'\"](http.*)[\'\"]/', '$1="http://buy/proxy.php?url=$2"', $page); 
    $page = preg_replace('/(a href)=[\'"][^http](.*)[\'"]/', '$1="http://buy/proxy.php?url=http://'.$host.'/$2"', $page); 
    $page = preg_replace('/(href|src)=[\'"][^http+](.*)[\'"]/', '$1="http://'.$host.'/$2"', $page); 

    file_put_contents($filepath, $page); 

    echo $page; 
} 

首先更换所有<a href="">链接到你的代理,然后将所有相关的<img src="/path...">等全部替换为绝对<img src="http://...">

相关问题