Avatar billede askalot Mester
18. oktober 2013 - 18:23 Der er 31 kommentarer

Redirect system/manager

Bekager den lidt kryptiske overskrift.

Jeg vil gerne lave et system hvor registerede brugere kan oprette et "redirect", således at de løbende kan links a'la mitdomæne.dk/?r=britney-spears-gaar-amok , Og den URL redirecter så et andet sted hen..f.eks http://eb.dk/yadayadaya .. helt simpelt.. intet ny i det.

Problemet:
Hvordan skulle sådan et "redirect" gemmes og hentes. Indtil videre har jeg sat det op så brugeren gemmer targeturl og redirecturl i database.. men jeg synes ikke det er så smart at man behøver at gå ned i databsen bare for at redirecte.

Skal jeg istedet gå for en fil struktur?.. (altså simpelthen skrive php-redirect scripts ned i en mappe, lyder lidt skræmmende)

Nogle tips?
Avatar billede moddi100 Seniormester
18. oktober 2013 - 18:36 #1
Hvorfor vil du ikke bruge en database? Rent hastighedsmæssigt er der intet problem i at anvende en database. Angående sikkerhed behøver dine scripts ikke have skriverettigheder, såfremt du anvender en database og sidst men ikke mindst vil strukturen i de opbevarede data sandsynligvis være bedre med databasen.

Konklusion: Jeg ville gå for databasen, men du kan helt sikkert også bruge en filstruktur. Jeg ville så nok gemme en fil for hver redirect, da du så bedre kan finde den requestede url frem. base64_encode() er en glimrende måde at løse problemet med specialtegn på.
Avatar billede askalot Mester
18. oktober 2013 - 19:23 #2
moddi100, tusind tak for din kommentar, det er stærkt værdsat!

Mht til hastighed ved brug af database, jeg ved ikke om det bare er noget jeg bilder mig ind, men jeg synes mit script går lidt langsommere hvis jeg skal i databasen, men det må jeg teste mig frem til. Hvis der ikke er nogen forskel..så går jeg for databasen. (Tak for base64_encode reminder.. havde jeg faktisk glemt..)

Anwways, så er jeg da ikke helt af sporet, om enten det bliver den ene eller anden løsning.

Tak!

(læg gerne svar)
Avatar billede askalot Mester
18. oktober 2013 - 19:53 #3
Ok, nu har jeg testet.. og desværre, hvis bare jeg connecter til databasen tager det omkring et sekund.

Måske er det fordi Apache kører på en MS/IIS server som både kører .net og php?
Avatar billede repox Seniormester
18. oktober 2013 - 20:27 #4
Apache og PHP på et Windows miljø er bare et no-go.

Du vil opleve en dramatisk ændring i et Linux/Apache/MySQL/PHP setup.
Avatar billede askalot Mester
18. oktober 2013 - 20:54 #5
PHP'en kører nu ellers fint, men mysql delen sutter..gad vide om det kan optimeres.

Jeg må ha fat i IT ;)
Avatar billede arne_v Ekspert
19. oktober 2013 - 02:06 #6
Der er ikke nogen grund til at MySQL skal vaere langsom for det.

Enten har du glemt at lave index paa den key du slaar op eller saa bruges den database af noget andet.
Avatar billede askalot Mester
19. oktober 2013 - 02:18 #7
Men jeg hverken indsætter eller henter data.. jeg laver kun en connect.

$db_host    = 'xx';
$db_user    = 'xx';
$db_pass    = 'xx';
$db_database    = 'xx';

$link = mysql_connect($db_host,$db_user,$db_pass);

    if ($link){
        print "connected";
    }
    else {
        print "failed";
   
    }


$dbIsConnected = mysql_select_db($db_database,$link);
mysql_close($link);
Avatar billede arne_v Ekspert
19. oktober 2013 - 02:18 #8
Der er ganske normalt at udvikle og unit teste PHP paa Windows.

Linux er stadig langt den mest brugte platform for production.

Men maaske vil Windows ogsaa bliver mere brugt der. MS er begyndt at supportere PHP (SQLServer extension for PHP inkl. PDO support, Azure support etc.).
Avatar billede askalot Mester
19. oktober 2013 - 02:21 #9
PHP'en kører fint hvis jeg fjerne ovenstående
Med mysql_connect er svartiden konsekvent på ca 1 sekund..ligemeget hvornår på døgnet jeg prøver
Avatar billede arne_v Ekspert
19. oktober 2013 - 02:22 #10
Det burde ikke taget et sekund at connecte.

Bruger du navn eller nummer til database server?
Avatar billede askalot Mester
19. oktober 2013 - 02:22 #11
Jeg mener det er en "extension".. (jeg har ikke sat det op/kender noget til det)
Avatar billede askalot Mester
19. oktober 2013 - 02:22 #12
navn
Avatar billede arne_v Ekspert
19. oktober 2013 - 02:22 #13
Hvis du bruger Apache og mod_php kunne du proeve persistent connections.
Avatar billede arne_v Ekspert
19. oktober 2013 - 02:23 #14
Og saa burde du nok skifte fra mysql extension til mysqli eller pdo extension ved lejlighed.
Avatar billede askalot Mester
19. oktober 2013 - 02:24 #15
Jeg har lavet et screenshot af php info
https://docs.google.com/file/d/0B1UzlPRmcOM1VHY1RWNfZ0JzZWs/edit?usp=sharing

siger det noget?
Avatar billede askalot Mester
19. oktober 2013 - 02:27 #16
msqli .. skal databasen sættes op specielt til det?, eller der det bare PHP interfacet?
Avatar billede arne_v Ekspert
19. oktober 2013 - 02:31 #17
mysqli er bare PHP interfacet - MySQL er ligeglad
Avatar billede askalot Mester
19. oktober 2013 - 02:32 #18
Jeg prøvede lige at med mysqli metoder istedet.. den connecter fint, men det stadig over et 1 sekund svartid
Avatar billede arne_v Ekspert
19. oktober 2013 - 02:37 #19
jeg forventede ikke at det ville hjaelpe paa dit her og nu problem - men det vil hjaelpe gevaldigt med at undgaa SQL injection senere
Avatar billede askalot Mester
19. oktober 2013 - 02:42 #20
Ok! =), tak for gode kommentarer, jeg vil sørge for at bruge msqli fremover hvis muligt =)
Avatar billede arne_v Ekspert
19. oktober 2013 - 03:35 #21
Har du proevet med nummer fremfor navn?

Har du proevet med persistent connection?
Avatar billede askalot Mester
19. oktober 2013 - 03:54 #22
Hey!, jeg brugte gethostbyname() til at få ip'en og nu er svar tiden 25 ms ..weey! jeg tror problemet er løst! =D
Avatar billede askalot Mester
19. oktober 2013 - 03:55 #23
TAK!
Avatar billede arne_v Ekspert
19. oktober 2013 - 04:39 #24
Saa daarlig DNS server.
Avatar billede moddi100 Seniormester
19. oktober 2013 - 10:07 #25
Du burde i princippet også kunne erstatte gethostbyname() med 127.0.0.1 - i hvert fald i de fleste tilfælde :)
Avatar billede askalot Mester
19. oktober 2013 - 14:56 #26
Det gjorde jeg også.. jeg _fandt_ ip'en med den function =)
Avatar billede moddi100 Seniormester
19. oktober 2013 - 16:07 #27
Ah super, der er ingen grund til at kalde funktionen hver gang, såfremt du altid kommer til at ligge på din server. Og når der er tale om 127.0.0.1 kan man vidst godt antage, at det alligevel vil virke på en anden server :)
Avatar billede askalot Mester
19. oktober 2013 - 16:34 #28
Nej, jeg ved =).. men det er nu heller ikke 127.0.0.1.

Jeg gætter på at hele ideen med "navnet" netop er, at man kan bruge dét alias, så de bagvedliggende ip'erne frit kan skifte.

Jeg arbejder i en relativ stor koncern, hvor servere bliver bliver flyttet fra tid til anden... det foregår alt sammen voerhovedet på mig, så jeg hænger bare på :P

..

Så hvis det pludselig holder op med at virke ved jeg hvorfor..
Hmm..jeg kunne lave en fallback der henter ip fra navnet, hvis ikke jeg får fat i db.

Det "sjove" er..det tager virtuelt ingen tid at få ip'en via gethostbyname , men at køre mySQL commandoer ..SÅ tager det pludselig et sekund pr kald.
Avatar billede moddi100 Seniormester
19. oktober 2013 - 16:43 #29
Så vil jeg klart anbefale gethostbyname() - det er bedre end at skulle skifte det manuelt.
Avatar billede askalot Mester
19. oktober 2013 - 16:48 #30
Ok, jeg tror jeg laver fallback løsningen (hvis ik jeg får fat i db via ip, bruger jeg gethostbyname) - der kommer ikke til at være det vilde "load" på det jeg laver alligevel..
Avatar billede askalot Mester
22. januar 2014 - 22:37 #31
Er der en der vil have nogle point, ellers lukker jeg
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