2014-01-26 33 views
0

好吧,我從jobamatic api提供的工作只是由僱主提供。我使用下面的代碼的問題是,我能夠使用$ ip正確地回顯訪問者IP,但由於某種原因,訪客ip正在被我的服務器ip替換,我假設它發生在xml之前請求,但我無法弄清楚。PHP代碼服務器更改訪問者IP

我希望我已經給了足夠的細節,但這裏的代碼:

<?php 
$ip = $_SERVER['REMOTE_ADDR']; 
$url = "http://api.simplyhired.com/a/jobs-api/xml-v2/l-Illinois/ws-100/?pshid=37990& ssty=2&cflg=r&jbd=imax.jobamatic.com&clip=$ip"; 
$xml = simplexml_load_file ($url); 
$file2 = file_get_contents('http://example.com/centerad.php'); 
for ($i = 0; $i < 5; $i++) { 
$jt = $xml->rs->r[$i]->jt; 
$cn = $xml->rs->r[$i]->cn; 
$loc = $xml->rs->r[$i]->loc; 
$src = $xml->rs->r[$i]->src; 
$loc = $xml->rs->r[$i]->loc; 
$e = $xml->rs->r[$i]->e; 
$tr = $xml->rs->r[$i]->tr; 
$link = $xml->rs->r[$i]->src['url']; 
$dp = $xml->rs->r[$i]->dp; 
$html .="<div><a rel='nofollow' href='$link' target='_blank' onMouseDown='xml_sclk(this);'>$jt</a><br/><span style='color:#008000'>$loc</span<br/>$e</div><hr />"; 
} 
echo $html; 
echo $file2; 
for ($z = 5; $z < 11; $z++) { 
$jt2 = $xml->rs->r[$z]->jt; 
$cn2 = $xml->rs->r[$z]->cn; 
$loc2 = $xml->rs->r[$z]->loc; 
$src2 = $xml->rs->r[$z]->src; 
$loc2 = $xml->rs->r[$z]->loc; 
$e2 = $xml->rs->r[$z]->e; 
$tr2 = $xml->rs->r[$z]->tr; 
$link2 = $xml->rs->r[$z]->src['url']; 
$dp2 = $xml->rs->r[$z]->dp; 
$html2 .="<div><a rel='nofollow' href='$link' target='_blank' onMouseDown='xml_sclk(this);'>$jt2</a><br/><span style='color:#008000'>$loc2</span<br/>$e2</div><hr />"; 
} 
echo $html2; 
?> 
+0

能'SSTY = 2&CFLG = R&JBD = imax.jobamatic.com&夾= $ ip'有什麼關係呢? –

+0

REMOTE_ADDR將返回服務器IP的唯一原因是如果您正在查看服務器的頁面,您的服務器是本地服務器嗎? –

+0

@ PatrickEvans我有一個vps託管在其他地方。 REMOTE_ADDR不會爲服務器提供ip,但在進程中的某處會將其更改爲服務器ip。據我所知,工作人員告訴我,它可能是某種重定向,在它到達它們之前就改變了IP地址。 – user3238653

回答

0

客戶端IP可能是由您的服務器IP地址替換,代理運行時。

客戶端 - > IP1 - >服務器(Proxy) - > IP2 - >服務器

然後你會得到IP2,而不是IP1。

傳遞原始IP是代理的配置問題。 您可能會檢查var_dump($_SERVER);以獲取可能的客戶端IP。

檢查以下各項:

$ip = $_SERVER["REMOTE_ADDR"]; // not the one you want 
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; // if behind proxy 
$ip = $_SERVER["HTTP_CLIENT_IP"] 
+0

REMOTE_ADDR是這些選項中的唯一一個,它們甚至會允許xml被重新定義。換句話說,當使用其他兩個選項時,我得到一個空白頁。 – user3238653

+0

我試圖重現這個問題,但失敗了。您發佈的代碼有效。 (除了最小的PHP錯誤通知:$ html和$ html2未定義。)最後一件事:如果你在CLI上運行這個,然後嘗試$ ip = gethostbyname(gethostname()); 。否則看看這個:https://github.com/techmission/cv_simplyhired_feeds/blob/master/simplyhired/simplyhired-api.class.php#L269 –