Avatar billede Xelot Nybegynder
26. december 2009 - 21:13 Der er 6 kommentarer og
1 løsning

Overgang fra gammel PHP til PHP5

Hey..

Jeg er en newbie i den gamle skole af PHP, og nu har jeg fået et webhotel hvor man er tvangsindlagt til at køre PHP5.

Problemet er at jeg i den gamle PHP har brugt følgende kode til at bestemme side-skift i mine webdesign:

Jeg har en index.php
I den index fil har jeg lagt følgene ind:

<?
if ($page){
include "$page";
}
else
{
include "frontpage.php";
}
?>

I menuen har jeg så linket til siderne således:
www.domæne.dk/index.php?page=forside.php
www.domæne.dk/index.php?page=kontakt.php
www.domæne.dk/index.php?page=computer.php
osv..

Men denne funktion kan man ikke bruge i PHP 5..

Hvordan gør man så ?
Avatar billede repox Seniormester
26. december 2009 - 21:21 #1
Det er sjovt du bruger ord som 'tvangsindlagt' om forbedringer?

Never the less; søg på register globals i google.

Den hurtige løsning:


<?

  if(isset($_GET["page"]) && file_exists($_GET["page"]))
    $page = $_GET["page"];
  else
    $page = "frontpage.php";
   
  include($page);
?>

Avatar billede showsource Seniormester
27. december 2009 - 00:22 #2
include("../../script.php");
eller
include("http://badhost/badscript.php");

is_file() tjekker om det er en fil.
file_exists() tjekker ikke om det er en fil eller et dir.

Men begge kan returnere sand med en url.

definer altid en var inden du includer.

define("MINVAR", "noget");
include($page);

i filen som includes, bruger du så

if(!defined("MINVAR")) {
exit;
}

// resten af includefil

Og som repox er inde på, er det register_globals som er "problemet"

Du kan, hvis du kan bruge .htaccess bruge flg.

php_value register_globals Off

for at bruge $page og ikke $_GET["page"]

Men du kan ligeså godt begynde på den rigtige måde.
Avatar billede showsource Seniormester
27. december 2009 - 00:23 #3
file_exists() tjekker om et dir eller fil findes .....
Avatar billede repox Seniormester
27. december 2009 - 12:18 #4
Det er - som showsource er inde på - nødvendigt at have en god sikkerhed på et setup som det du benytter.
Metoderne er mange og blandt andet at bruge en 'safety-constant' er en ganske udmærket metode, men kan ikke anvendes i aktuelle tilfælde.

En metode du kan sikre dig på at det inkluderede indhold er fra din egen server er ved at sikre dig at du altid henter fra den samme mappe og at filen skal eksistere heri.



<?php

  $page = "frontpage.php";
  if(isset($_GET["page"]))
  { 
    $tmpPage = $_GET["page"];
    $tmpPage = end(explode("/", $tmpPage)); // i tilfælde af nogen ville forsøge at inkludere en side over http
    if(file_exists("sti/til/filer/".$tmpPage))
      $page = $tmpPage;
  }

  include($page);

?>

Avatar billede Xelot Nybegynder
27. december 2009 - 12:20 #5
Jeg nøjes bare med den lette måde.. :)

Skriver du lige et svar.. ?
Avatar billede Xelot Nybegynder
27. december 2009 - 12:23 #6
... altså repox :)
Avatar billede repox Seniormester
27. december 2009 - 12:26 #7
Det fik du her
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