Avatar billede michaeltryl Seniormester
29. december 2006 - 17:17 Der er 25 kommentarer og
1 løsning

include problem

jeg er ved at lave et community hvor amn nemt skal knne skigte layout. min mappe struktur er lige nu sådan
i roden har jeg mappen 'layout' og mappen 'menuer'
i mappen layout ligger header.php og footer.php
i mappen menuer ligger mine menuer.
i roden er index.php med følgende indhold
----
<?
include"layout/header.php";
?>

<a href="http://www.magiskclub.dk/">indhold her</a> hhser hysjhfgshj fshdgf sdhfg sdhfgs dfhg

<?
include"layout/footer.php";
?>
----

problemet er at i header.php og footer.php includer jeg alle menuer sådan
include"../menuer/venstre.php";

men når jeg åbner index.php er følgende fejl der hvor menuen burde være
Warning: include(../menuer/venstre.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\demo\layout\header.php on line 23

Warning: include() [function.include]: Failed opening '../menuer/venstre.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\demo\layout\header.php on line 23

ligger jeg derimod menuerne i layout mappen og includere dem sådan
include"venstre.php";
virker det fint.

er der en som har et bud på hvordan jeg kan have menuerne til at ligge i mappen menuer, eller er jeg nød til at have dem i samme mappe?
Avatar billede windcape Praktikant
29. december 2006 - 17:35 #1
at bruge ../ sammen med includes er temmelig ustabilt. Jeg vil anbefale at du gør følgende:

set_include_path(dirname(__FILE__)); i en fil du altid inkludere, f.eks. en config.php , og så bruger full path includes. dvs:

include 'demo/layout/header.php';
Avatar billede windcape Praktikant
29. december 2006 - 17:37 #2
du kan dog også bruge dette trick

<?php

chdir('../');
include 'layout/header.php';

....

include 'layout/footer.php';

?>
Avatar billede coderdk Praktikant
29. december 2006 - 18:04 #3
Lav f.eks. en "settings.php" i roden og lad den indeholde:

    $dir = dirname( __FILE__ ) . "/";
    ini_set( "include_path",
        ini_get("include_path") . ":" . $dir . "menuer:" . $dir . "layout" );

Så kan du:

<?
require("settings.php");
include("header.php");
?>

<a href="http://www.magiskclub.dk/">indhold her</a> hhser hysjhfgshj fshdgf sdhfg sdhfgs dfhg

<?
include("footer.php");
?>

I footer kan du rette "../menuer/venstre.php" til blot "venstre.php"

Ulempen er så at du skal navngive dine filer unikt... Nå ja, jeg adskiller stierne med : men på windows skal man bruge ;
Avatar billede michaeltryl Seniormester
29. december 2006 - 18:28 #4
Ulempen er så at du skal navngive dine filer unikt?

hvad mener du med dette coderdk som jeg læser det skal alle filer have unikke navn vil det så sige jeg ikke må have føgende
index.p´hp og layoyt/index.php altså have to filer i to forskellige mapper som hedder index?
Avatar billede windcape Praktikant
29. december 2006 - 18:34 #5
coderdk / michael

I skal bruge DIRECTORY_SEPARATOR istedet for "/" og PATH_SEPARATOR istedet for ":". Så slipper I for problemer med forskellige operativ-systemer :-)
Avatar billede windcape Praktikant
29. december 2006 - 18:36 #6
Desuden coderdk synes jeg din løsning er lidt meget hack, det er bedre praktik at bruge fulde stier (altså fra project_root).
Avatar billede windcape Praktikant
29. december 2006 - 18:36 #7
<?php

chdir('../layout/');
include 'header.php';

....

include 'footer.php';

?>

Dette burde også virke :p
Avatar billede michaeltryl Seniormester
29. december 2006 - 18:44 #8
windcape det virker ikke hvordan skal stierne i header.php så se ud jeg har prøvet med følgende
include"top-menu.php";
include"/top-menu.php";
include"../top-menu.php";
include"../menuer/top-menu.php";
Avatar billede coderdk Praktikant
29. december 2006 - 18:44 #9
windscape, Sludder - include_path er lavet til netop sådanne ting. Jeg har f.eks. meget kode som jeg deler over flere sites - Dette gør jeg ved brug af include_path. PEAR ligger også som default et andet sted, og include_path bliver ændret så man kan nå alle PEAR-klasser fra sine sites.

Jeg vidste der var en directory og path separator et sted, tak windscape :) Filen bliver så:

    $dir = dirname( __FILE__ ) . DIRECTORY_SEPARATOR;
    ini_set( "include_path",
        ini_get("include_path") . PATH_SEPARATOR . $dir . "menuer" .
        PATH_SEPARATOR . $dir . "layout" );


michaeltryl, Ja, navngiv filerne beskrivende så, f.eks. layout.index.php i stedet for index.php...

En anden ting ved include_path er at hvis du f.eks. har /sti/her i din path, og du har et directory inde i det, der hedder classes, altså /sti/her/classes så kan du include test.class.php sådan:

require("classes/test.class.php");
Avatar billede windcape Praktikant
29. december 2006 - 18:48 #10
michaeltryl: lyder underligt , da chdir('../') virker fint nok for mig til samme formål.

coderdk det grimme ved den måde du bygger det op på er jo netop at man ikke må have identiske navne.

include_path bør sættes statisk i forvejen, eller også kan man skrive en loadFile() class, ligesom de f.eks. har gjort i Zend Framework.

Jeg bruger f.eks.
<?php

require 'app/Models/NewsModel.php';

class NewsView {
....
}

?>

hvor at filen ligger i app/Views/NewsView.php , og det virker fint :-)

Jeg bruger så chdir('../'); for at include min config.php til min admin mappe som er HTTP beskyttet.
Avatar billede windcape Praktikant
29. december 2006 - 18:50 #11
Men igen, sidstnævne er smag og behag for ens måde at opbygge en application på.

Alle metoderne virker korrekt nok :-)
Avatar billede michaeltryl Seniormester
29. december 2006 - 19:00 #12
windcape
jeg har min index.php som ser sådan ud
<?

chdir('../layout/');
include 'header.php';
?>
....
<?
include 'footer.php';
?>

og i min header er der bla.
<?
include"../menuer/top-menu.php";
?>

er der noget forkert her
Avatar billede coderdk Praktikant
29. december 2006 - 19:01 #13
"coderdk det grimme ved den måde du bygger det op på er jo netop at man ikke må have identiske navne."

Der er da ikke noget grimt i give sine filer fornuftige navne ;)

Hvorom alting er, så er der flere måde at gøre det på - Og de virker :)
Avatar billede windcape Praktikant
29. december 2006 - 19:02 #14
nøj, ikke rigtig

prøv at gøre dette her:

<?php
chdir('../layout/');
echo getcwd(); // fortæller dig hvad working directory er.

include 'header.php';
....

?>
Avatar billede michaeltryl Seniormester
29. december 2006 - 19:03 #15
C:\wamp\www\demo
Avatar billede michaeltryl Seniormester
29. december 2006 - 19:04 #16
ups jeg var lkidt for hurtig
echo giver C:\wamp\www\demo

forresten får jeg disse fejl
Warning: chdir() [function.chdir]: No such file or directory (errno 2) in C:\wamp\www\demo\layout.php on line 21
C:\wamp\www\demo
Warning: include(header.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\demo\layout.php on line 24

Warning: include() [function.include]: Failed opening 'header.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\demo\layout.php on line 24
....
Warning: include(footer.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\demo\layout.php on line 28

Warning: include() [function.include]: Failed opening 'footer.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\demo\layout.php on line 28
Avatar billede windcape Praktikant
29. december 2006 - 19:05 #17
prøv lige

chdir('../');
chdir('layout/');
echo getcwd();

, giver ikke helt mening at php ikke kan håndtere 2 dir skift på een gang.
Avatar billede windcape Praktikant
29. december 2006 - 19:06 #18
interassant :) prøve lige det sidstenævnte også, så kigger jeg når pizzaen er færdig.
Avatar billede michaeltryl Seniormester
29. december 2006 - 19:09 #19
<?
chdir('../');
chdir('layout/');
echo getcwd();
include 'header.php';
?>
....
<?
include 'footer.php';
?>

der giver echo C:\wamp\www
og samme fejl
Avatar billede windcape Praktikant
29. december 2006 - 19:28 #20
øhh... chdir('../'); skal jo slet ikke være der så :-) Troede du var i en undermappe siden du brugte ../ i det oprindelige spørgsmål.
Avatar billede coderdk Praktikant
29. december 2006 - 19:29 #21
Virker der i windows eller skal man skrive chdir("..\\layout"); ?
Avatar billede windcape Praktikant
29. december 2006 - 19:30 #22
Jeg kører Windows, så ja, det vil jeg mene det gør :)
Avatar billede michaeltryl Seniormester
29. december 2006 - 19:35 #23
det var måske forklaret lidt kryptisk mit første spørgsmål, men det virker nu kom med et svar så får i begge point.
og lige et under spørgsmål. denne løsning
chdir('layout/');
echo getcwd();
include 'header.php';
?>
....
<?
include 'footer.php';
?>
går jeg ud fra også virker når jeg uploader til en server
Avatar billede windcape Praktikant
29. december 2006 - 19:36 #24
Burde den ja :-) (huske at fjerne echo getcwd(); medmindre du gode kan lide at få den information vist hele tiden :p).

Og et svar fra mig.

<.o)- Godt nytår
Avatar billede coderdk Praktikant
30. december 2006 - 00:18 #25
Ingen til mig, ellers tak :)
Avatar billede michaeltryl Seniormester
30. december 2006 - 11:50 #26
tak for hjælpen
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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging