php includes?

Tags:    php

Hej udvilkere,

Jeg er helt ny når det kommer til php, og er allerede nu stødt på et problem.


Jeg har en filstruktur hvor jeg har brug for at inkludere filer i andre filer.

Problemet ligger i at hvis man får fat i filen igennem de filer den skal inkluderes igennem, virker include fin nok, men når jeg så går direkte til filen i browseren, er det den forkerte sti til include filen.

Hvis jeg f.eks. har mappestruktur som følger:
admin
--includes
----verify.php
--modules
----articles
------create.php
------edit.php
----articles.php
--index.php

Det jeg gør her så er, at jeg i min index.php inkluderer modules/articles.php
i modules/articles.php inkluderer jeg så hhv. create.php og edit.php.

Stierne (når det virker) i alle tre filer til verify.php er include "includes/verify.php";

Problemet er jo så bare, at når jeg skal have fat i includen når man går direkte til admin/modules/articles/edit.php kommer der fejl eftersom det burde være include "../../includes/verify.php";

Er der nogen der ved hvad jeg kan gøre ved dette problem? tjekke hvilken url man er på eller sådan noget?

På forhånd tak



Indlæg senest redigeret d. 25.04.2010 01:24 af Bruger #8773
9 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Hvis alt kører igennem din index.php fil er der vel ingen grund til at tillade folk at komme direkte til en anden fil?

definer en konstant i toppen af din index.php-fil, fx define('ROOTLEVEL', TRUE); og tjek om den er defineret i alle dine andre filer -- hvis den ikke er, så redirecter du til index.php



burde vel være "includes/verify.php"

alt bestemmes ud fra index.php hvis dette er din "hoved fil"



Ja, fjern alt echo før du sender en header.



burde vel være "includes/verify.php"

alt bestemmes ud fra index.php hvis dette er din "hoved fil"


Ja - som jeg skrev, er det også det jeg har gjort.

Problemet er, at hvis folk kommer DIREKTE til den anden fil, virker den include jo naturligvis ikke eftersom det er relativt til index.php.

Så tænker at der måske er noget med en try...catch eller sådan et eller andet jeg skal have fat i? Hvor hvis den ene ikke kan inkluderes uden fejl, prøver den med den anden?



Hvis alt kører igennem din index.php fil er der vel ingen grund til at tillade folk at komme direkte til en anden fil?

definer en konstant i toppen af din index.php-fil, fx define('ROOTLEVEL', TRUE); og tjek om den er defineret i alle dine andre filer -- hvis den ikke er, så redirecter du til index.php


Nu får jeg så problemer med at header allerede er sendt, eftersom der er flere filer der bliver inkluderet i index.php.

Er der noget jeg kan gøre ved det?



Ja, fjern alt echo før du sender en header.


Det bliver bare lidt svært når de includes jeg snakker om (edit og det) jo først kommer lidt længere nede i index.php..

Vil det være ideelt at smide dem i funktioner og inkludere dem øverst i index.php i stedet?



Tommelfingerregel: Lad være at echoe noget som helst før du er færdig med at beregne PHP-kode: din bruger får det alligevel ikke at se før.

Smid alt hvad du har af output ind i variabler i starten af scriptet, og echo de variabler de rigtige steder i slutningen af scriptet.



Tommelfingerregel: Lad være at echoe noget som helst før du er færdig med at beregne PHP-kode: din bruger får det alligevel ikke at se før.

Smid alt hvad du har af output ind i variabler i starten af scriptet, og echo de variabler de rigtige steder i slutningen af scriptet.


Som sagt er jeg helt ny i php, og ved ikke så meget om kodestrukturen endnu, men den måde jeg er ved at lave mit script på er, at jeg egentligt kun kører i min index.php kode, og så bliver de andre forskellige filer inkluderet alt efter hvilke paremetre man sender i URL'en.

Jeg har jo altså derfor smidt mine includes derned hvor jeg gerne vil vise indholdet fra f.eks. edit.php, men det gør jo så også at noget html fra index.php vil blive vist før.

Hvordan skal jeg ellers kunne hente edit.php?



nevermind, flyttede lidt rundt på koden, så virkede det fint ;)
- points går til Per Sikker Hansen, fordi jeg endte med at bruge define() ;)

- tak for svarene allesammen



t