2012-03-06 51 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