Avatar billede Slettet bruger
28. januar 2009 - 18:58 Der er 26 kommentarer og
1 løsning

Vis forskellig link på baggrund af IP

Hej

Jeg er ved at lave mit første php kode. Udfra nedenstående kode, kan I nok se hvad jeg ønsker at opnå, men jeg parser helt sikkert linkene forkert. Jeg vil gerne have at de bliver klikbare.

-----------

<?php
$network=$_SERVER['REMOTE_ADDR'];
$remote="https://link1.dk";
$local="https://link2.dk";

if ( $network -contains- "192.168." ) {
    <a href="<?php echo($local); ?>">Link1</a>
} else {
    <a href="<?php echo($remote); ?>">Link2</a>
}
?>
-----------

Hvis personen kommer fra en IP der starter med "192.168", skal der vises et klikbart link. Hvis ikke, skal et andet klikbart link vises.

-
Avatar billede psychopixi Nybegynder
28. januar 2009 - 19:28 #1
Du kan bruge php's explode funktion, der deler ip-adressen op:
list($var1, $var2) = explode(".",$network);

herefter kan du sammenligne ved at bruge:
if($var1 == 198 && $var2 == 168)

Dog tror jeg ikke du får meget ud af dette system, siden 192.168.x.x er en lokal adresse og dermed ikke den du vil sende til serveren.
Avatar billede Slettet bruger
28. januar 2009 - 19:35 #2
Jeg tror ikke du forstår hvad jeg gerne vil opnå. Nok fordi min kode er noget gibberish.

Hvis min bruger tilgår sitet fra en lokal adresse (fra en IP adresse der starter med 192.168), så skal der vises et link på sitet.

Hvis en ekstern bruger tilgår mit site (dvs. fra adresser alt andet end 192.168), så skal der være et andet link på sitet.

Håber det giver mening...
Avatar billede psychopixi Nybegynder
28. januar 2009 - 19:46 #3
Jo jeg forstår godt hvad du vil med koden, jeg tror nærmere det er dig der ikke er 100% klar over hvordan server systemer virker:)

Hvis jeg hoster en server og tilgår den, tilgår jeg siden via min udegående IP-adresse - noget i retning af 62.107.x.x - og dermed ikke min lokal adresse 192.168.x.x.

Men hvis du er af den overbevisning at du kan tilgå din side fra en lokal adresse virker min løsning nu alligevel:)
Avatar billede jakobdo Ekspert
28. januar 2009 - 20:23 #4
Løsningen vil kun virke, hvis mgr33n har serveren stående under skrivebordet ja.
Avatar billede yHec Novice
28. januar 2009 - 20:28 #5
Du kan ogaå bruge substr
$ip_sub=($_SERVER['REMOTE_ADDR']0,6);
$remote="https://link1.dk";
$local="https://link2.dk";

if($ip_sub=="192.168" {
  <a href="<?php echo($local); ?>">Link1</a>
}

else {
  <a href="<?php echo($remote); ?>">Link2</a>
}

/y
Avatar billede Slettet bruger
28. januar 2009 - 20:29 #6
Jeg sidder med et virtuelt wmvare testmiljø, med 5 linuxservere der køres dhcp, dns, mail, ftp, filserver osv. Så ja, jeg har den stående "under skrivebordet". Hvordan vil den færdige kode se ud?
Avatar billede yHec Novice
28. januar 2009 - 20:29 #7
hov...
$ip_sub=($_SERVER['REMOTE_ADDR']0,6);
skal være
$ip_sub=($_SERVER['REMOTE_ADDR'],0,6);

/y
Avatar billede psychopixi Nybegynder
28. januar 2009 - 20:36 #8
Du kan evt. prøve at køre:
echo $_SERVER['REMOTE_ADDR'];

for at se om du rent faktisk får en lokal ip, når du tilgår siden fra din egen maskine.
Avatar billede Slettet bruger
28. januar 2009 - 20:38 #9
@y

Jeg får en syntax error på linje 2. Koden ser nu sådan her ud:

<?php
$ip_sub=($_SERVER['REMOTE_ADDR'],0,6);
$remote="https://link1.dk";
$local="https://link2.dk";

if($ip_sub=="192.168" {
  <a href="<?php echo($local); ?>">Link1</a>
}

else {
  <a href="<?php echo($remote); ?>">Link2</a>
}
?>
Avatar billede jakobdo Ekspert
28. januar 2009 - 20:41 #10
<?php
$network=$_SERVER['REMOTE_ADDR'];
if (preg_match('/^192\.168\./', $network)) {
    echo 'Vis link';
} else {
    echo 'Vis IKKE link';
}
?>
Avatar billede Slettet bruger
28. januar 2009 - 20:43 #11
@psychopixi

Jeg får en intern ip... 192.168.1.101.
Avatar billede jakobdo Ekspert
28. januar 2009 - 20:43 #12
Og du kunne evt. udbygge med:

if (preg_match('/^192\.168\.\d{1,3}\.\d{1,3}$/', $network)) {
Dog vil den så tillade 192.168.999.999 eller 192.168.000.000, hvilket jo ikke er valide adresser.
Avatar billede Slettet bruger
28. januar 2009 - 20:47 #13
@jakobdo

Det ser godt ud. Kan man gøre så der bliver echo'ed et klikbart link med tekst? Fx.

<a href="bvlvlv>Link til noget</a>
Avatar billede jakobdo Ekspert
28. januar 2009 - 20:50 #14
ja, du kan smide kode i stedet for:

echo 'Vis link';

F.eks.:
echo '<a href="http://www.eksperten.dk/spm/861591" title="Vis forskellig link på baggrund af IP">Link</a>';
Avatar billede Slettet bruger
28. januar 2009 - 20:57 #15
Super! Nu virker det præcis som jeg havde forestillet mig.

Bare smid et svar.
Avatar billede yHec Novice
28. januar 2009 - 20:58 #16
Denne her virker:-)

$ip_sub=substr($_SERVER['REMOTE_ADDR'],0,7);
$remote="https://link1.dk";
$local="https://link2.dk";

if($ip_sub=="192.168") echo($local);
else echo($remote);

/y
Avatar billede Slettet bruger
28. januar 2009 - 21:02 #17
@y - Linket bliver ikke klikbart i din version.
Avatar billede jakobdo Ekspert
28. januar 2009 - 21:06 #18
Svar!
Avatar billede Slettet bruger
28. januar 2009 - 21:09 #19
Og tusind tak btw
Avatar billede jakobdo Ekspert
28. januar 2009 - 21:31 #20
Takker for point.
Avatar billede TommyB Nybegynder
29. januar 2009 - 09:19 #21
Selvom jakobdo's løsning er korrekt syntes jeg det er at komplicere meget simple ting..

Hvorfor ikke holde det simpelt : Test på det antal tegn du ved udgør den faste del af dit netværk.


if (substr($network, 0, 8) == "192.168.") {

} else {

}
Avatar billede jakobdo Ekspert
29. januar 2009 - 09:59 #22
TommyB har bestemt fat i noget. :o)
Avatar billede Slettet bruger
29. januar 2009 - 10:55 #23
Ja, kan godt se at syntaksen er noget lettere ved at bruge en substring.
Avatar billede TommyB Nybegynder
29. januar 2009 - 12:21 #24
Jeg bruger det selv nogle steder, og i stedet for at lade den test styrer mit indhold sætter jeg en variabel fx. $localnet = true, og så tester bare på den de steder det skal bruges, man kunne jo ende på et andet net endag, og ikke ønske at skulle rundt og rette 192.168. til fx. 10.10. alle de steder man tester.
Avatar billede psychopixi Nybegynder
29. januar 2009 - 13:36 #25
Til det kan du fx bruge:

<?php
define("LOCAL_NET","192.168.");
$network = $_SERVER['REMOTE_ADDR'];
$localnet = substr($network, 0, strlen(LOCAL_NET)) == LOCAL_NET ? true : false;
?>
Avatar billede yHec Novice
29. januar 2009 - 23:59 #26
Øhhhh, undskyld, Tommy, men er det ikke det jeg har foreslået hele tiden?

@mgr33n. Det er min fejl det ikke er klikbart, undskyld.... Gør dette:
<a href="<?php echo($remote); ?>">Link2</a> og
<a href="<?php echo($local); ?>">Link1</a>

/y
Avatar billede TommyB Nybegynder
30. januar 2009 - 10:25 #27
Y : De variabler : $remote og $local var ikke en boolean om hvorvidt han var på lokalnet, men istedet de to valgmuligheder. Mit forslag var en varibel for at undgå at skulle teste med en fast-kodet ip-streng hvergang.

Men hvordan du klipper det her får er jo for den sags skyld ligemeget. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester