PHP, как сделать ссылку на загруженный файл является внутренним IP, когда внутренне и публичный IP, когда публично с этим фрагментом я получил? - PullRequest
0 голосов
/ 06 марта 2012

Я делаю php-портал.

Я сделал раздел объявлений, где пользователь может публиковать сообщения и прикреплять файл.

, поэтому в этой ситуации пользователь загрузил один и настраница, там будет гиперссылка на вложение.если я наведу на него курсор мыши, я смогу увидеть это «192.168.0.100/Announcement/file.pdf"

так логично, если я нахожусь во внутренней сети и нажимаю, что это не будет проблемой, поскольку он может получитьфайл с этого ip.

следующая ситуация - я перенаправил ip сервера, чтобы общественность могла получить доступ извне.теперь я как пользователь, получающий доступ извне.

, поэтому, если я перейду к месту объявления и снова наведу на него, будет показана та же ссылка "192.168.0.100/Announcement/file.pdf".Я определенно не смогу открыть его, так как этот IP-адрес является внутренним.

, поэтому я думаю, как мне сделать это, когда я внутри, ip - внутренний, а когда я снаружи, 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 помочь мне понять, что происходит, чтобы в следующий раз я узнал, что я на самом деле реализую?

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Вам не нужно реализовывать ничего из этого ... вам нужно изменить способ обращения к 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>

это то, что вы делаете.

1 голос
/ 06 марта 2012

То, что у вас есть, является троичной операцией, результаты которой присваиваются константе SERVERIP. Он использует регулярное выражение для сопоставления с $_SERVER['REMOTE_ADDR'], если он начинается с 192.168, то он получает значение 192.168, в противном случае он получает значение 175.136. И по какой-то причине он передает true для принудительного поиска без учета регистра.

Подробнее об определении можно прочитать в PHP документах .

Более легкий пример троичной операции:

$overlyComplex = true;

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

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

var_dump($thatDudesCodeSucks); // echos yes
...