2012-03-06 37 views
0

我正在做一個php入口。PHP如何使一個上傳的文件鏈接是內部IP時,內部和公共IP時公開與我得到這個片段?

我做了一個公告部分,用戶可以發佈消息並附加文件。

所以在這種情況下,用戶上傳一個頁面,將有附件的超鏈接。如果我在它懸停,我可以看到這個「192.168.0.100/Announcement/file.pdf」

所以邏輯上,如果IM在內部網絡中,並點擊它不會是一個問題,因爲它可以從文件那個ip。

接下來的情況是我已經轉發了服務器ip讓公衆可以從外面訪問。現在我是作爲從外部訪問的用戶。

所以,如果我是去宣佈的位置和懸停在它再次將表現出同樣的鏈接「192.168.0.100/Announcement/file.pdf」。因爲ip是內部的,我一定不能打開它。

所以我想我怎樣才能讓它當我內部的IP是內部一個,當IM外,IP鏈路是公衆?

我從前同事那裏得到了這個片段,但我真的不知道代碼的作用。有人可以幫我解釋一下嗎?我試圖搜索這個東西,我想在網上做,但我沒有一個適當的關鍵字。

下面

是片段:

<?php 
//filename constant.php 

define('SERVERIP',((preg_match("/^192\.168/i",$_SERVER['REMOTE_ADDR']))?'192.168.0.100':'175.136.xxx.xxx'),true); 
?> 

而且下面是在頁面的代碼用於公告及附件的一部分:

include('_include/constant.php'); 
$dir = "C:/Inetpub/wwwroot/Announcement/"; 
$http = sprintf('http://%s/Announcement/',SERVERIP); 

print '<td class="middle '.$CLASS.'" align="left" height="20">'.'<a href="http://'.SERVERIP.'/Announcement/'.$filename.'" target="_blank">'.$filename .'</a></td>'; 

這裏任何PHP專業人員可以幫助我明白髮生了什麼以便下次我知道我實際執行的是什麼?

回答

1

你有什麼是三元操作,其結果被指定爲常量SERVERIP。它使用正則表達式匹配$_SERVER['REMOTE_ADDR'],如果它以192.168開頭,那麼它將得到192.168值,否則將得到175.136值。由於某種原因,它通過true執行不區分大小寫的搜索。

你可以閱讀更多的PHP docs內定義。

三元運算的打火機例子:

$overlyComplex = true; 

$thatDudesCodeSucks = (true === $overlyComplex) ? 'yes' : 'no'; 

// Shorthand for 
if (true === $overlyComplex) { 
    $thatDudesCodeSucks = 'yes'; 
} else { 
    $thatDudesCodeSucks = 'no'; 
} 

var_dump($thatDudesCodeSucks); // echos yes 
+0

Thnx @Mike Purcell !!我將閱讀該文檔。我明白你的解釋,現在我明白了。 – Psychocryo 2012-03-06 04:55:04

+0

沒有問題。如果這有幫助,請接受。 – 2012-03-06 05:51:29

2

你並不需要實現任何的這個...你需要改變你如何引用的URL和其他一切將水到渠成。例如,當您在公司的局域網中時,<a href="/">this</a>將顯示http://192.168.0.100/。當您從外部訪問本網站時,它將顯示您從外部訪問的IP地址或域名。

您應該使用...

<a href="/something.pdf">something PDF</a> 

,而不是:

<a href="http://192.168.0.100/something.pdf>something PDF</a> 

這就是好像你在幹什麼。

+0

我沒有想到這一點。我會試試看。 Thnx @Ryan Kempt – Psychocryo 2012-03-06 04:55:44