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
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.
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.
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.
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
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 ;)
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?
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?
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.
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.