2015-06-26 34 views
0

我試圖通過使用外部網站來獲得一些IPBoard註冊表數據,因爲777在整個論壇註冊表上chmoding將是一個可怕的想法。 註冊表返回用戶的用戶數據,如果他在論壇上登錄的話。 我創建了一個啓動註冊表並打印數據的頁面。 加載註冊表並獲取數據頁面很簡單獲取頁面內容,就好像被用戶打開一樣

//userQuery.php 
<?php 
define("ALLOW_FURLS", false); 
require_once 'forum/initdata.php'; 
require_once IPS_ROOT_PATH . 'sources/base/ipsRegistry.php'; 
$registry = ipsRegistry::instance(); 
$registry->init(); 

$member = $registry->member()->fetchMemberData(); 
$data = json_encode($member); 

print $data; 
?> 

並且如果用戶打開完美的作品。 當我嘗試通過外部網站按照預期訪問我的userQuery.php時,問題就開始了。 無論捲曲並與外部網站的fopen行爲由服務器不是用戶請求訪問該網站,並返回客戶數據,因爲服務器沒有登錄。

這樣算下來

<?php 
$url = "http://foo.bar/userQuery.php"; 
$handle = fopen($url, "r"); 
$result = fread($handle, 8192); 

var_dump($result); 
?> 

返回服務器memberdata是客戶,而不是用戶成員數據作爲用戶查詢將通過在瀏覽器中打開來正常訪問。

有沒有辦法打開該頁面(userQuery.php),就好像用戶使用php或js作爲最後的手段請求其內容一樣?我不希望重寫IPBoard註冊表,只是爲了向論壇提供外部訪問檢查。

回答

1

我假設您希望在用戶訪問該網站時發生這種情況嗎?所以,當Bob出現在網站上並登錄時,你會得到他的數據。後來,當露西登錄時,你會得到她的數據。

如果這個假設是正確的,你可以在你的網站上放一些腳本,通過AJAX調用將數據發回服務器。

您的userQuery.php如下所示(如果您使用jQuery進行AJAX調用),您需要將其包含在您網站的其中一個網頁中,以便在用戶訪問該網站時將其加載。

//userQuery.php 
<?php 
define("ALLOW_FURLS", false); 
require_once 'forum/initdata.php'; 
require_once IPS_ROOT_PATH . 'sources/base/ipsRegistry.php'; 
$registry = ipsRegistry::instance(); 
$registry->init(); 

$member = $registry->member()->fetchMemberData(); 
$data = json_encode($member); 

echo "<script>var data = {$data}; $.post('/some/url/on/your/site/receiver.php', data);</script>"; 
?> 

然後你需要在/some/url/on/your/site/receiver.php,抓住數據出來$_['POST']並做一些與它有一個腳本。或者,我完全誤解你想要的,你可以忽略這個答案。 :)

+0

獲取數據不是問題。 IPBoard獲取它的註冊表類。問題是,當用戶直接訪問userQuery.php時,輸出是他的正確數據,但是當我嘗試通過不同主機上的外部站點使用userQuery.php(例如使用curl或fopen)時,請求由服務器發送,而不是用戶訪問。因此userQuery回覆服務器數據。我不知道如何在不重寫核心IPBoard類的情況下模擬用戶的直接userQuery請求。 – SEJBR

+0

也許你可以找出IPBoard使用什麼來確定誰登錄並嘲笑它。它可能只是'$ _SESSION []'中的一些數據。 – dgrundel

+0

事實上,我使用ipboard cookies及其認證類做了一個解決方法。這解決了我的問題。我還發現IPBoard具有XML-RPC api調用支持,如果我付出了任何的關注,它可以提前解決它。我的問題得到了解決,但它不是一個關於如何獲取頁面內容的問題的答案,就好像用戶打開了一樣,也許有人知道如何去做,所以我不會提交該解決方案。 – SEJBR

相關問題