---
title: "Upplägg och struktur i större webbprojekt"
type: "forum-thread"
url: "https://www.webforum.nu/amne/webbutveckling/173683-upplägg-och-struktur-i-större-webbprojekt"
topic: "Webbutveckling"
topic_url: "https://www.webforum.nu/amne/webbutveckling"
author: "learn"
published: "2008-08-27T15:17:16.000Z"
updated: "2008-08-29T08:53:03.000Z"
replies: 18
views: 1295
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/webbutveckling/173683-upplägg-och-struktur-i-större-webbprojekt"
---

# Upplägg och struktur i större webbprojekt

## #1 — learn, 2008-08-27T15:17Z

Håller på att starta upp ett "större" webbprojekt, typ ett community skulle man kunna säga. Sidan kommer i grunden bygga på PHP och MySQL.

Tänkte höra med er andra hur ni brukar lägga upp strukturen på projekt och då syftar jag främst på mapp- och filstrukturen.

Själv är jag inne på följande:

```
controls/
    config.php

graphic/
    button/
    icons/
    images/

GUI/
    body.php
    infosida.php
    kontaktsida.php
    startsida.php

inc/
    javascripts/
    php_classes/
    php_functions/

public_html/
    index.php

style/
    style.css
```

Kort sammanfattat: 

**controls/** innehåller PHP-filer som styr sajtens inställningar och vilka filer som ska inkluderas vart etc
**graphics/** all grafik
**GUI/** själva gränssnittet, allt som besökaren ser
**inc/** allt det bakomliggande, klasser och funktioner etc
**public_html/** Hit pekar domänen och här ligger endast index.php som sedan inkluderar resten av sajten
**style/** Alla stylesheets

Jag har försökt tänka lite [MVC](http://en.wikipedia.org/wiki/Model-view-controller).

Vad tycker ni om detta upplägg? Jag vet att sånt här kan vara lite individuellt men det kanske finns några allmänna riktlinjer i alla fall?

Sedan så undrar jag lite över det faktum att hela min sajt i detta fall ligger utanför sid-rooten. Smart säkerhetsmässigt tycker jag, ingen kommer ju då åt mina filer på annat sätt än att besöka sidan. Men detta ser man ju väldigt sällan, varför? Det måste ju finnas en anledning.

Permalänk: https://www.webforum.nu/p/173683

## #2 — Denkan, 2008-08-27T15:34Z

Du vill inte att någon ska komma åt dina bilder och stilmallar heller?

Permalänk: https://www.webforum.nu/p/2135589

## #3 — emission, 2008-08-27T16:20Z

Allt som ska ut till klienten (css, bilder, html, javascript) måste ju ligga tillgängligt

Permalänk: https://www.webforum.nu/p/2135594

## #4 — learn, 2008-08-27T21:27Z

> **emission skrev:**
>
> Allt som ska ut till klienten (css, bilder, html, javascript) måste ju ligga tillgängligt

Måste det? Kan man inte skriva t.ex. \<img src="../graphics/images/bild.jpg" /\> ?

Eller gäller det bara server side (PHP)?

Jag vill gärna se hur andra lägger upp det också, kom gärna med exempel. :)

Permalänk: https://www.webforum.nu/p/2135647

## #5 — Gislaved, 2008-08-27T21:58Z

> **learn skrev:**
>
> Måste det?

Ja.

Permalänk: https://www.webforum.nu/p/2135651

## #6 — überfuzz, 2008-08-27T22:14Z

Men du, hur tänker du dig att någon ska kunna se något på din sida om inget är tillgängligt..?  :OO

Permalänk: https://www.webforum.nu/p/2135652

## #7 — Ledel, 2008-08-27T22:19Z

När du inkluderar säg en bild på din sida kommer besökaren att fråga efter bildadressen. Om den då frågar din server och får svaret "Nej, bilden finns inte" kommer bilden inte visas. Det här svaret kommer besökaren att få, eftersom du gömt bilderna utanför sidan.

Permalänk: https://www.webforum.nu/p/2135653

## #8 — rhdf, 2008-08-27T22:29Z

jag skulle nog använt en liknande struktur,med skillnaden att jag skulle flyttat in allt i webroot.

Permalänk: https://www.webforum.nu/p/2135656

## #9 — learn, 2008-08-27T23:08Z

Ok, stupid me, klart det är så!   :r 

> **rhdf skrev:**
>
> jag skulle nog använt en liknande struktur,med skillnaden att jag skulle flyttat in allt i webroot.

Allt? Räcker det inte att lägga bilder, css och js i rooten?

Permalänk: https://www.webforum.nu/p/2135659

## #10 — colione, 2008-08-28T06:21Z

```
application/
   controllers/ <- logik
   models/ <- datahämtning
   views/
      scripts/ <- templates
library/ <- framework
public/ <- index.php, js, css, bilder
```

Permalänk: https://www.webforum.nu/p/2135666

## #11 — learn, 2008-08-28T14:49Z

Men om jag vill ha allt utanför rooten så kan man väl lösa det enligt följande:

```php
// Hämta javascript
readfile("../lib/javascripts/function.js");

// Hämta CSS
readfile("../style/style.css");

// Visa bild
echo '<img src="../controls/img.php?image=bild.jpg" />';
```

Img.php ser ut så här:

```php
header('Content-Type: image/jpeg');
imagejpeg($_GET["image"]);
```

Eller hur?

Permalänk: https://www.webforum.nu/p/2135722

## #12 — colione, 2008-08-28T15:10Z

Det känns som en onödig belastning på servern. Varför skulle du vilja göra något sådant?

Permalänk: https://www.webforum.nu/p/2135725

## #13 — spango, 2008-08-28T15:13Z

> **learn skrev:**
>
> Sedan så undrar jag lite över det faktum att hela min sajt i detta fall ligger utanför sid-rooten. Smart säkerhetsmässigt tycker jag, ingen kommer ju då åt mina filer på annat sätt än att besöka sidan. Men detta ser man ju väldigt sällan, varför? Det måste ju finnas en anledning.

Jag förstår hur du tänker, men det är ingen vidare idé att göra på det viset. För CSS- och JS-filer kommer dina användare få längre laddningstider och du kommer utnyttja mer trafik (iom att användarna inte kan cacha de här filerna). 

Bilderna kan cachas av webbläsaren, men det är fortfarande en ganska sådär idé att skicka över dem själv om du inte har någon väldigt, väldigt specifik anledning, eftersom webbservern kan ha en intern cache och således inte behöva läsa filerna från disk varje gång.

Sen är faktiskt din lösning klart *sämre* ur säkerhetssynpunkt än att ha bildfilerna under webbroten, på grund av en bugg i img.php - du kollar inte indatan. Anropar man *img.php?image=../controls/config.php* kommer din konfigfil (komplett med lösenord till databas etc, antar jag) skickas genom till besökaren. Har för mig att Adobe blev av med sina privata SSL-nycklar någon gång genom ett liknande hack. Såna här buggar är fantastiskt lätta att producera när man sitter och kodar, så i allmänhet gäller att mindre kod = färre buggar = säkrare kod.

Permalänk: https://www.webforum.nu/p/2135726

## #14 — learn, 2008-08-28T15:26Z

> **colione skrev:**
>
> Det känns som en onödig belastning på servern. Varför skulle du vilja göra något sådant?

Mest för att gå en snygg struktur :) Jag tycker alla javascript hör till "biblioteket" (lib) likväl som php-funktioner och klasser.

Kanske jag ska lägga allt i webbrooten ändå? Eller andra förslag/tips?

> **spango skrev:**
>
> Jag förstår hur du tänker, men det är ingen vidare idé att göra på det viset. För CSS- och JS-filer kommer dina användare få längre laddningstider och du kommer utnyttja mer trafik (iom att användarna inte kan cacha de här filerna).
> 
> Bilderna kan cachas av webbläsaren, men det är fortfarande en ganska sådär idé att skicka över dem själv om du inte har någon väldigt, väldigt specifik anledning, eftersom webbservern kan ha en intern cache och således inte behöva läsa filerna från disk varje gång.
> 
> Sen är faktiskt din lösning klart sämre ur säkerhetssynpunkt än att ha bildfilerna under webbroten, på grund av en bugg i img.php - du kollar inte indatan. Anropar man img.php?image=../controls/config.php kommer din konfigfil (komplett med lösenord till databas etc, antar jag) skickas genom till besökaren. Har för mig att Adobe blev av med sina privata SSL-nycklar någon gång genom ett liknande hack. Såna här buggar är fantastiskt lätta att producera när man sitter och kodar, så i allmänhet gäller att mindre kod = färre buggar = säkrare kod.

Hmm, ok. Angående säkerheten så visade jag självklart inte en färdig img.php. Kontrollerna fanns inte med.   :) 

Fler får gärna komma med exempel på strukturer.

BTW: colione, vad lägger du i din mapp "controllers"? Vad exakt menar du med "logik"? Ge gärna exempel.

**R: Det finns ju en anledning till att jag vill ha vissa filer utanför webbrooten. Man ska inte kunna komma åt dem via t.ex. <https://www.sidan.se/GUI/users.php>**

Permalänk: https://www.webforum.nu/p/2135728

## #15 — spango, 2008-08-28T15:56Z

> **learn skrev:**
>
> Mest för att gå en snygg struktur :) Jag tycker alla javascript hör till "biblioteket" (lib) likväl som php-funktioner och klasser.

Nja, håller inte riktigt med där. Javascript är ju en resurs som använda av användargränssnittet, precis som bildfiler, och ska inte blandas med kod som utför applikationslogik eller snackar med databasen. 

> **learn skrev:**
>
> Kanske jag ska lägga allt i webbrooten ändå? Eller andra förslag/tips?

Det är en bra tanke från början, men om en fil ska kommas åt direkt av en klient (=webbläsare) kan den lika gärna ligga under webbroten. Includefiler kan förstås ligga utanför, det är en rätt bra praxis.

> **learn skrev:**
>
> Hmm, ok. Angående säkerheten så visade jag självklart inte en färdig img.php. Kontrollerna fanns inte med.   :)

Nänä, men faktum kvarstår att mer kod = fler buggar = osäkrare kod. När den dessutom gör allting segare finns det ingen anledning att sätta sig ner och skriva den ;)

Permalänk: https://www.webforum.nu/p/2135729

## #16 — learn, 2008-08-28T18:00Z

Tack spango, jag håller med och lägger nu bilder, css och javascripts i webbrooten.

När vi ändå pratar om seghet och laddningstid:

Kan jag eller bör jag inte inkludera alla min php-klasser, php-funktioner, javascripts och stylesheets på alla sidor trots att de kanske inte används just på aktuell sida?

```php

echo "<html>\n";
echo "<head>\n";

// All the classes
include "../lib/php_classes/class1.php";
include "../lib/php_classes/class2.php";
include "../lib/php_classes/class3.php";
...

// All the functions
include "../lib/php_functions/function1.php";
include "../lib/php_functions/function2.php";
include "../lib/php_functions/function3.php";
...

// All the javascripts
echo "<script type=\"text/javascript\" src=\"js/javascript1.js\"></script>";
echo "<script type=\"text/javascript\" src=\"js/javascript2.js\"></script>";
echo "<script type=\"text/javascript\" src=\"js/javascript3.js\"></script>";
...

// All the stylesheets
echo "<link rel=\"stylesheet\" href=\"styles/style1.css\" type=\"text/css\" />";
echo "<link rel=\"stylesheet\" href=\"styles/style2.css\" type=\"text/css\" />";
echo "<link rel=\"stylesheet\" href=\"styles/style3.css\" type=\"text/css\" />";
...

echo "</head>\n";
echo "<body>\n";

echo "En fin sida som kanske inte använder allt som inkluderats. Går det långsamt då eller?\n"

echo "</body>\n";
echo "</html>\n";
```

Påverkar det prestandan nämnvärt? Är det värt mödan att hålla på och kontrollera alla sidor? Hur brukar ni göra?

Permalänk: https://www.webforum.nu/p/2135747

## #17 — spango, 2008-08-29T07:25Z

Script- och CSS-filer cachas i webbläsaren och behöver alltså bara laddas första gången man besöker en sida. Om sidans användarmönster innebär att besökarna kommer in från t.ex. en sökmotor, kollar på en sida, och sen inte fortsätter någon vart, är det kanske inte helt optimalt att inkludera allt, eftersom det gör att sidan laddar segare = irriterade användare = mindre sannolikt att de återkommer. Det finns dock ingen nackdel med att bara inkludera det du behöver.

Vad gäller PHP-includes är det lite annorlunda. De måste inkluderas varje gång någon laddar en sida. Disk-I/O är alltid långsamt, och det kommer dra något mer minne, men den främsta anledningen till varför du vill undvika det är för att det blir lättare att få överblick över vad en fil gör om den bara inkluderar det den behöver. Som regel kan man väl säga att en fil ska inkludera exakt det som behöver inkluderas, varken mer eller mindre.

Permalänk: https://www.webforum.nu/p/2135821

## #18 — doggelito, 2008-08-29T07:53Z

Jag kan inge php men i .net så kan man göra en usercontrol som visar ex. ett formulär.
I denna UC kan man sedan i loaden inkludera stylesheetet. Det innebär att stylesheetet bara visas på de sidor som använder UC:n. Det går säker att göra i php med! :)

Sen ang. mappstruktur så gillar jag ordet "Media" som huvudmapp för bilder, dokument, filmer osv.

Permalänk: https://www.webforum.nu/p/2135825

## #19 — learn, 2008-08-29T08:53Z

Ok, då lägger jag en fil include.php i controlls-mappen. Den filen får sedan hålla koll på vad som behövs på vardera sida, typ så här:

```php
// include.php

echo "<link rel=\"stylesheet\" href=\"styles/general.css\" type=\"text/css\" />"; 

if ( $page == 'startsida' )
{
    echo "<link rel=\"stylesheet\" href=\"styles/style1.css\" type=\"text/css\" />"; 
    echo "<script type=\"text/javascript\" src=\"javascripts/javascript1.js\"></script>";
    include "../inc/php_classes/class.enklass.php";
}

elseif ( $page == "kontakta" )
{
    echo "<link rel=\"stylesheet\" href=\"styles/style2.css\" type=\"text/css\" />"; 
    echo "<script type=\"text/javascript\" src=\"javascripts/javascript2.js\"></script>";
    include "../inc/php_classes/class.enannanklass.php";
}

else
{
    ...
```

Högst upp inkluderar jag sådant som är generellt och behövs på alla sidor.

Nu tycker jag det börjar likna något (exempel):

```

controls/
    config.php
    include.php

GUI/
    body/
        body.php
        footer.php
        header.php
    pages/
        infosida.php
        kontaktsida.php
        startsida.php

inc/
    php_classes/
        class.user.php
    php_functions/
        function.array.php

public_html/
    graphic/
        logo.jpg
    javascripts/
        showHideObj.js
    styles/
        general.css
        body.css
    index.php
```

Invändningar?

Fortsätt gärna ge mig fler exempel på hur ni lägger upp det. Det ger bra inspiration!

Permalänk: https://www.webforum.nu/p/2135830

---

Tråden på webben: https://www.webforum.nu/amne/webbutveckling/173683-upplägg-och-struktur-i-större-webbprojekt
