Include Befehle ?? oder was .. brauche ich dazu

Alles, was PHP betrifft, kann hier besprochen werden.

Include Befehle ?? oder was .. brauche ich dazu

Postby cool_water_at » 06. June 2004 21:14

Hallo

ich baste gearde an einer homepage

das kernstück sol ein shop

sein

ich arbeite natrürlich mit

include befehlen!

wenn ich als inhalt

den shop ein fügen möchte (ist im untervereihnis shop/index.php)

komm folgende fehler meldung! :

Cannot redeclare class config

was muss ich tun?
cool_water_at
 
Posts: 2
Joined: 06. June 2004 21:07

Klassen können nicht doppelt deklariert werden

Postby TConnect » 06. June 2004 22:19

Hallo cool_water_at,

es sieht ganz so aus, als ob Du versuchst, eine bereits definierte Klasse noch einmal zu deklarieren. Und das geht nicht.

Gruß TConnect
TConnect
 
Posts: 100
Joined: 31. March 2004 22:26

Re: Klassen können nicht doppelt deklariert werden

Postby cool_water_at » 07. June 2004 01:06

welche lösungen gibt es

um so was ein zu fügen???

TConnect wrote:Hallo cool_water_at,

es sieht ganz so aus, als ob Du versuchst, eine bereits definierte Klasse noch einmal zu deklarieren. Und das geht nicht.

Gruß TConnect
cool_water_at
 
Posts: 2
Joined: 06. June 2004 21:07

Habe das gleiche problem

Postby Twisterchen » 09. June 2004 07:42

Bei mir kommt der selbe Fehler

nach umstieg von 1.3 auf 1.4.2 ist der fehler aufgetreten ohne im Script was geändert zu haben

bei mir steht im script nur
include("../funktion");

und in funktion steht
include("config.php");

so und wenn ich nun mein script aufrufe kommt folgende fehler Meldung
Fatal error: Cannot redeclare class config in C:\xampp\php\pear\Config.php on line 43

warum will er die Classe aus Pear includen und nicht die config in meinem root verzeichniss
ich will doch gar nicht die Config.php aus dem pear ich habe die Classe in meinem ganzen Projekt nicht mit eingebunden.


da ist doch irgend wo ein fehler in XAMPP den wiegesagt bei 1.3 kommt das nicht


Twisterchen :D
Twisterchen
 
Posts: 7
Joined: 09. June 2004 07:34

Wegen includefehler nochmal

Postby Twisterchen » 09. June 2004 11:31

Ich habe festgestellt das bei XAMPP 1.3 im /php/pear verzeichnis keine Config.php datei vorhanden ist aber dafür bei 1.4.2 die Datei vorhanden ist.

wieso includet er zuerst die aus dem pearverzeichnis und nicht die aus dem root verzeichnis

ich habe ja im root verzeichniss auch eine config.php nur die wird nicht includet sondern die aus dem pearverzeichniss

und darum der fehler
Cannot redeclare class config
is ja logisch

ist das normal das da ne config.php ist und wie kann mann den fehler umgehen denn auch eine pfadangabe mit $_SERVER["DOCUMENT_ROOT"]
bringt keine Lösung
ist das nun ein fehler von XAMPP???


Twisterchen
Twisterchen
 
Posts: 7
Joined: 09. June 2004 07:34

Re: Habe das gleiche problem

Postby Wiedmann » 09. June 2004 13:08

Twisterchen wrote:bei mir steht im script nur
include("../funktion");

und in funktion steht
include("config.php");


Öffne mal die Datei "funktion" und füge folgenden Code direkt vor der Zeile mit "include('config.php');" ein:
Code: Select all
echo '<pre>';
echo ini_get('include_path')."\n";
echo getcwd()."\n";
echo (file_exists('./config.php')) ? 'JA' : 'NEIN';
echo '</pre>';
exit;


Was wird ausgegeben?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby micha78347 » 09. June 2004 13:48

etwas grundlegends zum include(), falls noch keiner gepostet hat hier:

1) include() sind NICHT funktionsübergreifend,
das beudetet im klartext

habe ich einen script zb "page.php"

<?
include("page.inc.php");

/* un in diesem page.php habe ich noch eine funktion */

function f1 () {
/* code */
}

?>

dann muss in der function f1() das include("page.inc.php");
selbstverständlich NOCHEINMAL gesetzt werden!!


2) was jetzt fpr dich relevant ist:
nimmst du jetzt "page2.php" und darin steht:

include("page.php");

DANN kennt page2.php auch direkt die page.inc.php !!!
micha78347
 
Posts: 57
Joined: 07. June 2004 20:56

Hallo

Postby Twisterchen » 09. June 2004 14:07

Hallo

@ Wiedmann

die ausgabe ist:

.;C:\xampp\php\pear\
C:\xampp\htdocs\include
NEIN


die config.php existiert aber im root verzeichnis.

????????


@micha78347
ich habe doch das so wie du es beschrieben hast
root verzeichniss:
config.php
funktion.php
in funktion.php include ich config.php

und im verzeichniss include/
is ne log.php und in der include ich nur die funktion.php
dann ist doch die config.php automatisch mit includet oder nicht ????????





Twisterchen
Twisterchen
 
Posts: 7
Joined: 09. June 2004 07:34

Postby micha78347 » 09. June 2004 14:09

jop , die ist mit drin, und verbannt :)


und du darfst dann nicht hingehen und in page2.php die funktion f1()
nocheinmal schreiben,
weil die f1() ja schon existiert
micha78347
 
Posts: 57
Joined: 07. June 2004 20:56

Re: Hallo

Postby Wiedmann » 09. June 2004 14:18

Twisterchen wrote:@ Wiedmann
die ausgabe ist:
.;C:\xampp\php\pear\
C:\xampp\htdocs\include
NEIN

die config.php existiert aber im root verzeichnis.

Das aktuelle Verzeichnis an der Stelle ist aber "C:\xampp\htdocs\include" und nicht "C:\xampp\htdocs". Include-Dateien werden bei dir entweder im aktuelen Verzeichnis gesucht, oder im PEAR-Verzeichnis.

Wenn dein Script in "C:\xampp\htdocs" liegt, solltest du herausfinden wodurch (welchen Befehle) das Arbeitsverzeichnis gewechselt wird.

Ansonsten kannst du auch aus:
include('config.php');
ein:
include('../config.php');
machen.

Würde aber trotzdem überprüfen, wo und warum das Verzeichnis gewechselt wird.

NACHTRAG:
haben deinen Post nochmal gelesen:
ich dachte der Include ist in dem Script drin im Hauptverzeichnis...
Tatsächlist ist der ja im Script log.php im Verzeichnis "/include/". Rufst du das Script log.php direkt auf, oder ist das auch irgendwo inkludiert?

MERKE:
Das aktuelle Verzeichnis ist immer das vom aktuellen Script. Inkludierst du ein Script in einem anderen Verzeichnis, is für das inkludierte Script auch das Verzeichnis vom Hauptscript gültig.
Last edited by Wiedmann on 09. June 2004 14:23, edited 1 time in total.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

@micha

Postby Twisterchen » 09. June 2004 14:20

das ist ja auch nicht mein problem

das da ne funktion währe die irgendwie in konflikt steht

sondern der includet die config.php aus dem pearverzeichnis





@ Wiedmann

das script wird ja in
c:/xampp/htdocs/include/
aufgerufen
http://localhost/include/log.php

und in log.php
wird includet:
include("../funktion");
und in funktion wird includet
include("config.php");


Twisterchen
Twisterchen
 
Posts: 7
Joined: 09. June 2004 07:34

Re: @micha

Postby Wiedmann » 09. June 2004 14:28

@ Wiedmann

das script wird ja in
c:/xampp/htdocs/include/
aufgerufen
http://localhost/include/log.php


Lese meinen NACHTRAG von gerade.
du rufst das Script "/include/log.php" auf. Darin machst du einen include von "../funktion.php". Für alle Befehle IN "funktion.php", auch der include-Befehl, ist weiterhin "/include" das aktuelle Verzeichnis. Da gibt es aver keine "config.php". also sucht er weiter und findet eine in PEAR.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

@ Wiedmann

Postby Twisterchen » 09. June 2004 14:34

nein das script wird direkt aufgerufen

siehe Beitrag vorher

http://localhost/include/log.php


noch mal was zu erklährung
ich habe seit gestern am script nichts verändert
sondern nur die XAMPP version gewechselt
1.3 auf 1.4.2

Ich habe festgestellt das bei XAMPP 1.3 im /php/pear verzeichnis keine Config.php datei vorhanden ist aber dafür bei 1.4.2 die Datei vorhanden ist.


das heist die config.php stöhrt im pearverzeichniss aber warum bei anderen scripten im root verzeichniss wird die richtige config.php aufgerufen.

( ich habs versucht wenn ich die Config.php aus dem Pear verzeichniss lösche, dann lässt sich auch die log.php richtig aufrufen)


NACHTRAG:
nochmal

/htdocs/
funktion.php
config.php
/htdocs/include/
log.php

so in log.php ruf ich include("../funktion.php"); auf weil eine verzeichnisseben höher

in funktion.php ruf ich nur mit include("config.php"); auf weil verzeichnisseben gleich.

also ist doch der aufruf in funktion.php nicht in /include sonder im root
/htdocs da wo auch die funktion und config liegt.



Twisterchen
Last edited by Twisterchen on 09. June 2004 14:49, edited 1 time in total.
Twisterchen
 
Posts: 7
Joined: 09. June 2004 07:34

Postby Wiedmann » 09. June 2004 14:43

:-( willst du es nicht verstehen was ich schreibe, oder kannst du es nicht....

- \htdocs\: funktion.php config.php
- \htdocs\include\: log.php

wenn du in log.php die Datei "funktion.php" inkludierst:
include ('../funktion.php');

Und du in "funktion.php" die Datei "config.php" inkludieren willst, dann muß in
"funktion.php" folgendes stehen:
include ('../config.php');

Da für den Include-Befehl in "funktion.php" das aktuelle Verzeichnis "\htdocs\include\" ist, und NICHT "\htdocs\"!

Unabhängig davon was du da testest...

Erinnerst du dich an meinen verherigen Code?
mach aus:
echo (file_exists('./config.php')) ? 'JA' : 'NEIN';
ein:
echo (file_exists('../config.php')) ? 'JA' : 'NEIN';

Was passiert?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

@ Wiedmann

Postby Twisterchen » 09. June 2004 14:54

das kommt und die log.php lässt sich aufrufen ok
.;C:\xampp\php\pear\
C:\xampp\htdocs\include
JA

aber
alle anderen scripte im root verzeichniss die auch die funktion.php benutzen können aber dann nicht mit ../config.php weil höher wie htdocs geht ja nicht und es kommt folgende fehlermeldung.

Warning: main(../config.php): failed to open stream: No such file or directory in C:\xampp\htdocs\function.php on line 42

Warning: main(): Failed opening '../config.php' for inclusion (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\function.php
on line 42


was nun sprach Zeus

twisterchen
Twisterchen
 
Posts: 7
Joined: 09. June 2004 07:34

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 1 guest