2011-05-07 106 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://...">

相關問題