webForumDet fria alternativet

Sökväg i include... Konstigt/jobbigt!!

PHP

11 svar · 640 visningar · startad av learn

Medlem sedan jan. 20051 130 inlägg
Frågan#1

Ett mycket märkligt problem!

Jag har en sidstruktur innehållande mappar och filer. En index-fil som includar de andra delarna av sidan.

Så här ser mappstrukturen ut:


-[root]
---[css]
-----style.css
---[tester]
-----test.php
---[bilder]
-----logotyp.gif
-----foto.jpg
---[sidor]
-----ensida.php
-----[undersidor]
-------sida.php
---[public_html]
-----index.php

Det är index.php i mappen public_html som är "huvudsidan". Där inkluderas bl.a. filen sida.php som ligger i sidor/undersidor.

Det som nu är mkt konstigt och jobbigt är att de filer jag includar i sida.php "ärver" index.phps förhållande till rooten. Alltså: om jag i t.ex. sida.php (som är includad i index.php) vill includa filen test.php så blir inte sökvägen ".../.../tester/test.php" utan "../tester/test.php".

Jag tycker detta är riktigt jobbigt. Dels för att min editor (Zend Studio) klagar på sökvägen, och dels för att det är svårt att hålla reda på alla sökvägar när de "inte stämmer".

Finns det något man kan göra??

Snälla hjälp mig! :o :o

Tack!

Medlem sedan mars 20007 896 inlägg
#2

Ja, det finns något man kan göra.

Ändra din include_path i php.ini till en mapp där du har dina inkluderingsfiler. Att sprida ut allt som du gör ser jag ingen som helst anledning till egentligen? Skapa en inkluderingsmapp som du lägger till din include_path, och sen skapar du (om du måste/vill separera mer på filerna) mappar i den mappen istället.

http://se.php.net/manual/en/ini.core.php#ini.include-path

Medlem sedan jan. 20051 130 inlägg
#3

Aha, ok... Jag trodde det var att rekommendera. Att separera och sortera upp koden, lägga filer med funktioner i en mapp och klasser i en annan etc för att få en "renare" struktur.

Hur brukar ni andra göra? Tips på projektupplägg?

Spin, det du skriver kräver väl att jag har tillgång till webbhotellets php.ini-fil...?

Medlem sedan juni 20014 421 inlägg
Medlem sedan jan. 20051 130 inlägg
#5

Jo jo, men...

learn skrev:

Jag trodde det var att rekommendera. Att separera och sortera upp koden, lägga filer med funktioner i en mapp och klasser i en annan etc för att få en "renare" struktur.

Hur brukar ni andra göra? Tips på projektupplägg?

Tipsa gärna också om några bra länkar i ämnet, jag vet inte riktigt vad jag ska söka efter.

Medlem sedan nov. 20014 054 inlägg
#6

learn skrev:

Aha, ok... Jag trodde det var att rekommendera. Att separera och sortera upp koden, lägga filer med funktioner i en mapp och klasser i en annan etc för att få en "renare" struktur.

Hur brukar ni andra göra? Tips på projektupplägg?

Spin, det du skriver kräver väl att jag har tillgång till webbhotellets php.ini-fil...?

Själv brukar jag dela upp i ungefär följande mappstruktur

/inc
/inc/classes/
/inc/interfaces/ICustomer.php
/inc/classes/bll (business logic layer) ex. Customer.php
/inc/classes/dll (data logic layer) ex. CustomerData.php

/images
/icons

/css

/*.php (gränssnitt)

Medlem sedan jan. 20051 130 inlägg
#7

Fredde Mannen skrev:

Själv brukar jag dela upp i ungefär följande mappstruktur

/inc
/inc/classes/
/inc/interfaces/ICustomer.php
/inc/classes/bll (business logic layer) ex. Customer.php
/inc/classes/dll (data logic layer) ex. CustomerData.php

/images
/icons

/css

/*.php (gränssnitt)

OK, men då borde du ju få samma problem som jag om du ska includa en fil i t.ex. Customer.php som i sin tur är includad högre upp i hierarkin. Eller hur?? Föresten, varför lägger du bll och dll i mappen för klasser? Vart lägger du funktioner (php och js)?

Är det fler som skulle kunna dela med sig av sina strukturer? Intressant att se! :bire

Medlem sedan nov. 20014 054 inlägg
#8

För att Customer.php är ex.

 
/* innehåller metoder (funktioner) för användning i UI, beräkningar av olika slag..*/
class Customer {...}

och i dll är ex CustomerData.php

 /* hanterar insättning/hämtning av data från någon form av datakälla (dock bara det som gäller entiteten Customer.) */
class CustomerData {...}

I / lägger jag samtliga UI-filer. Dessa består av anrop till klasserna i mappen /inc/bll, bll gör anrop till klasserna i dll. UI kommunicerar med bll, som i sin tur kommunicerar med dll och vice versa. Jag har dessutom en mapp som jag kallar för /js där alla javascript filer hamnar i givetvis.

UI-filerna (ex. index.php) inkluderar nödvändiga JS-filer, CSS-filer, bild-filer, samt inkluderar en fil som ligger i /inc som jag brukar kalla för något passande ex. bll_include.php

Då får filen /index.php alla funktionalitet som de olika klasserna i /inc/bll har (så länge metoderna är public dvs).

Så sätter jag include_path till inc
Ex.

 
include "bll_include.php";

if($_POST['new']) {
  $customerId = 0;
  $customer = new Customer();
  $customer->setCustomername($_POST['customername']);
  $customer->setCustomeraddress($_POST['customeraddress']);

  // save and return customerid.
  $customerId = $customer->save();
}

eller ex /customers/show_all_customers.php

  include "bll_include.php";
  $customer = new Customer();
  $listCustomers = $customer->getAll();

  // do something with $listCustomers;

Men hänsyn till eventuella fel. :)

Medlem sedan jan. 20051 130 inlägg
#9

Tack för din beskrivning. Finns det några bra sidor i detta ämne? Ge mig gärna någon länk.

Medlem sedan jan. 20051 130 inlägg
#10

Jag använder denna istället: chdir

Tycks funka riktigt bra!

Några invändningar? :)

Medlem sedan jan. 20051 130 inlägg
#11

Ingen? Ska jag köra på det eller finns några nackdelar?

Medlem sedan jan. 20051 130 inlägg
#12

Ok, bra!

267 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)