[GastForen Programmierung/Entwicklung PHP und MySQL require_once geht nicht, require aber schon

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

require_once geht nicht, require aber schon

sejau
Beiträge gesamt: 298

19. Dez 2011, 18:31
Beitrag # 1 von 5
Bewertung:
(2852 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen

Ich möchte beim Bauen eines WP-Themes auf ein config.php file zurückgreifen. Dort dirn möchte ich gewissen Variablen definieren, die ich dann brauche beim Umzug auf den Webserver.
Um auf diese Variablen zurückzugreifen, versuchte ich die config.php
per require_once
einzubinden.
Leider passiert dann aber nichts.

Wenn ich hingegen
Code
require 'config.php'; 

benutze klappt es wunderbar.

Ich glaube es liegt daran, dass die config.php schon eingebunden wurde, als ich da noch gar nichts drin hatte.

Man müsste also irgendwie erreichen, dass das config.php erneut 'geladen' wird.
Also ich nehme an, dass es daran liegt..
Leider habe ich nicht so viel Erfahrung mit require_once...

Kann mir jemand sagen, ob das geht? und falls wie?

Wäre echt super.

Vielen Dank.


Ach, und noch etwas;
Ich versuchte
Code
require 'config.php'; 

in den header.php zu stecken.

Nun habe ich ein Page-Template

worin ich zuerst
Code
get_header(); 

aufrufe, (und darin sollte ja mein config.php eingeschlossen werden)

und danach weiter unten wollte ich auf eine in config.php definierte Variable zugreifen.
Leider geht das dann nicht.
Das require muss am selben Ort stehen.
Ist das normal und weshalb ist das so?
Wäre echt super, wenn mich da jemand aufklären könnte.

(Dieser Beitrag wurde von sejau am 19. Dez 2011, 18:35 geändert)
X

require_once geht nicht, require aber schon

crisies
  
Beiträge gesamt: 135

20. Dez 2011, 02:38
Beitrag # 2 von 5
Beitrag ID: #486621
Bewertung:
(2826 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi sejau,

also require_once bindet das ganze halt nur einmal ein. wenn das nun bereits an einem anderen punkt eingebunden wird, geht das dann kein zweites mal. mit require wird es immer wieder eingebunden. wenn es nun ein generelles config.php gibt, würde ich halt ein zweites config_server.php oder so machen und es anderselben stelle wie das eigentliche config.php einbinden.

das probleme mit den Variabeln hat klar mit dem variablen scope zu tun. wenn darin lokale variabeln vorkommen und es über eine funktion get_header() via require includiert wird, sind diese Werte auch nur in dieser Funktion vorhanden ;) und nicht vorher und auch nicht nachher ;)

Vermutlich müsstest Du diese Variabeln halt als Konstanten via define() oder ähnliches in deinem eigenen config_xy.php definieren, dadurch erhält diese einen globalen scope. unter der folgenden url oder auch über die php doku findest Du ein bisschen mehr dazu ;)

http://www.mycomputerforum.com/...s/php_variables.html

gruss
chris.w.


als Antwort auf: [#486611]

require_once geht nicht, require aber schon

sejau
Beiträge gesamt: 298

28. Dez 2011, 22:05
Beitrag # 3 von 5
Beitrag ID: #487031
Bewertung:
(2730 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Super danke das mit dem globale Scope muss ich dann noch etwas vertiefen.

Beim require ist mir etwas noch nicht klar;
Wenn ich nun die php-Datei verändere, welche per require_once eingebunden wird, wie bringe ich dann das System dazu, die neue Datei zu laden?

Und was passiert hier:
ich binde nun zB. im header.php
eine php-Datei mit require_once ein.
den header wiederum binde ich ebenfalls in eine php-Datei ein (bspw: page.php).
In der page.php möchte ich nun auf etwas zurückgreifen, das in der datei (mit require_once eingebunden) drinsteht.
ich nehme an, dass dieser inhalt eben wegen dem variablen scope nicht zur verfügung steht.

kann ich dann in der page.php nun wiederum require_once anwenden, um auf die variable zurückzugreifen zu können?

So wie ich das verstanden habe, kann ich ja dann nicht mehr anfordern, weil die datei bereits im header.php eingebunden wurde.

mit require_once wollte ich jedoch verhindern, dass bei jedem mal laden immer wieder eingebunden werden muss. passiert dies überhaupt, oder wird bei jedem mal laden wieder eingebunden?

ich wäre dankbar für einen kleinen denkanstoss in dieser richtung.
merci

gruss

sejau


als Antwort auf: [#486621]

require_once geht nicht, require aber schon

crisies
  
Beiträge gesamt: 135

29. Dez 2011, 02:06
Beitrag # 4 von 5
Beitrag ID: #487042
Bewertung:
(2709 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi sejau

Zitat Wenn ich nun die php-Datei verändere, welche per require_once eingebunden wird, wie bringe ich dann das System dazu, die neue Datei zu laden?


Die sollte immer "neu" geladen werden, ausser das verwendete System oder der Server haben ein Cache-System eingebaut.

Zitat ich binde nun zB. im header.php
eine php-Datei mit require_once ein.
den header wiederum binde ich ebenfalls in eine php-Datei ein (bspw: page.php).
In der page.php möchte ich nun auf etwas zurückgreifen, das in der datei (mit require_once eingebunden) drinsteht.
ich nehme an, dass dieser inhalt eben wegen dem variablen scope nicht zur verfügung steht.


Korrekt, müsste als in der Datei welche über require_once eingebunden wird, in einem globalen Scope definiert werden, damit diese Variabel auch ausserhalb zur Verfügung steht. Versuche doch die Variabel mit define() oder global zu deklarieren, wäre ja eh eher eine Konstante und keine die sich verändert.

Zitat kann ich dann in der page.php nun wiederum require_once anwenden, um auf die variable zurückzugreifen zu können?


Nein, entweder den Variabeln Scope in der eingebundenen Datei ändern oder die gewünschte Variabel in der Datei page.php definieren oder über den globalen Scope aufrufen.

Zitat Super danke das mit dem globale Scope muss ich dann noch etwas vertiefen.

Beim require ist mir etwas noch nicht klar;
Wenn ich nun die php-Datei verändere, welche per require_once eingebunden wird, wie bringe ich dann das System dazu, die neue Datei zu laden?

Und was passiert hier:
ich binde nun zB. im header.php
eine php-Datei mit require_once ein.
den header wiederum binde ich ebenfalls in eine php-Datei ein (bspw: page.php).
In der page.php möchte ich nun auf etwas zurückgreifen, das in der datei (mit require_once eingebunden) drinsteht.
ich nehme an, dass dieser inhalt eben wegen dem variablen scope nicht zur verfügung steht.

kann ich dann in der page.php nun wiederum require_once anwenden, um auf die variable zurückzugreifen zu können?

So wie ich das verstanden habe, kann ich ja dann nicht mehr anfordern, weil die datei bereits im header.php eingebunden wurde


Korrekt, eingebunden wäre die ja schon und kann desshalb kein zweites mal eingebunden werden.

Zitat mit require_once wollte ich jedoch verhindern, dass bei jedem mal laden immer wieder eingebunden werden muss. passiert dies überhaupt, oder wird bei jedem mal laden wieder eingebunden?


Damit wird nur verhindert, das eine bereits eingebundene Datei, nicht nochmals eingebunden wird. Beim Laden werden die Dateien immer "neu" eingebunden ausser es wird auf dem Server irgendwas gecachet.

Ich würde die Variabel entweder in der Datei setzen, wo die auch gebraucht wird, oder wenn die eben an mehreren Stellen und in mehreren Dateien gebraucht wird, den korrekten Scope verwenden beim setzen und lesen der Variabel.

gruss
chris.w.


als Antwort auf: [#487031]

require_once geht nicht, require aber schon

sejau
Beiträge gesamt: 298

29. Dez 2011, 02:11
Beitrag # 5 von 5
Beitrag ID: #487043
Bewertung:
(2708 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Super! Vielen Dank für die ausführliche Antwort.
Schätze das echt sehr.
Gruss und guten Rutsch.


als Antwort auf: [#487042]
X