Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

define constants and include them in another file

Hallo,

ich habe ein problem mit defines.

Ich verwende eine globale datei nennen wir sie file_1.php um meine defines zu verwalten, da ich diese defines in mehreren anderen Dateien brauche.

Wenn ich nun diese Datei (file_1.php) mit require in file_2.php inkludiere, funktioniert das zwar, aber die defines funktionieren nicht.

file_1.php:

Code:                   In Zwischenablage kopieren (nur IE)
1">

file_2.php:
Code:                   In Zwischenablage kopieren (nur IE)
2">

Result:
Anstelle des definierten Wertes wird nur DEF1 ausgegeben.

WARUM???????

Wenn ich das define in file_2.php direkt vornehme, funktioniert es.
register_globals ist ON

Kann mir jemand erklären was ich falsch mache?


Danke
-=Charlie=-
Hier gehts zum Orginal Eintrag "define constants and include them in another file" im Forum

Antworten

Code:                   In Zwischenablage kopieren (nur IE)
3">

muss heissen:

Code:                   In Zwischenablage kopieren (nur IE)
4">

ohne leerzeichen vor der öffnenden Klammer


2.

Das ist total egal ob da nun 1 Leerzeichen oder 1000000 Leerzeichen stehen.
Das oben angegeben Beispiel funktioniert bei mir einwandfrei.


3.

Danke für die Tips.

Al3x, kannst Du bitte mal http://www.web-4-u.us/server_var.php nachsehen ob Du irgend etwas in meiner configuration siehst, was ich ändern muß?

Nachdem es bei Dir funktioniert, müßte es ja bei mir auch funktionieren.

Danke
-=Charlie=-


4.

Komisch das es bei mir mit Leerzeichen nicht funktioniert und ohne funktionierts.

Is schon klar das Php da keinen unterschied macht aber hab halt nur bei mir beobachten können das es so ist wie ich geschrieben hab ^^


5.

Also bei mir macht es keinen Unterschied ob ich kein, eines oder 10 Leerzeichen habe.

Ich glaube vielmehr, daß ich bei meiner configuration etwas herumdrehen muß.
Ich weiß nur nicht wo ?!?!?!

-=Charlie=-


6.

Ich wüßte nicht wie man seine PHP Conig so verunstallten könnte das es mit den Konstanten nicht mehr klappt. Kostanten sind eine Core Funktionalität von PHP und können eigentlich durch die Config nicht beeinflusst werden.

Schalt doch mal dein error reporting an.


7.

Also jetzt wird mir wahrscheinlich niemand glauben...
Ich habe mein Problem gelöst.

Die Datei, welche die defines enthält und inkludiert wird, daft nicht mit .php enden, sondern muß mit .inc ende.
Sobald ich die Datei auf filename.inc umbenannt habe, wurden meine defines auch sofort in der Datei verfügbar, in welcher ich filename.inc inkludiert habe.

Also wenn das nicht verrückt ist, dann weiß ich nicht was.
Und das ist natürlich in keiner Dokumentation zu finde.

Schmecks Dude.


Ich hoffe ich damit anderen viel Zeit sparen.


Happy New Year noch an alle und Danke für die Hilfeversuche.


-=Charlie=-


8.

Zitat:
Die Datei, welche die defines enthält und inkludiert wird, daft nicht mit .php enden, sondern muß mit .inc ende.
Sobald ich die Datei auf filename.inc umbenannt habe, wurden meine defines auch sofort in der Datei verfügbar, in welcher ich filename.inc inkludiert habe

also sowas höre ich zum erstenmal, sehr sehr seltsam!

johnpatcher


9.

Zitat:
Wenn ich das define in file_2.php direkt vornehme, funktioniert es.
register_globals ist ON

Langsam bezweifle ich das register_globals bei dir ON is ^^

Soviel ich weis legt eine .inc Datei doch (verbessert mich wenn ich falsch liege) genau solche Globalen Sachen fest.
Klar das das dann funktioniert aber solltest dem trotzdem mal näher auf den Grund gehen.

Bei mir läufts mit beiden Varianten.


10.

Michael88,

meine register_globals is on.
Wenn Du auf http://www.web-4-u.us/server_var.php gehst, dann suche einfach nach register_globals auf der Seite und Du wirst sehen, daß es ON ist.

Ich habe auch keine Tau warum das bei mir so ist.


Cheers
-=Charlie=-


11.

Zitat:
CharlieFLA postete
Also jetzt wird mir wahrscheinlich niemand glauben...
Ich habe mein Problem gelöst.

Die Datei, welche die defines enthält und inkludiert wird, daft nicht mit .php enden, sondern muß mit .inc ende.
Sobald ich die Datei auf filename.inc umbenannt habe, wurden meine defines auch sofort in der Datei verfügbar, in welcher ich filename.inc inkludiert habe.

Also wenn das nicht verrückt ist, dann weiß ich nicht was.
Und das ist natürlich in keiner Dokumentation zu finde.

OMG! Was sind denn das wieder für Fehlinformationen die hier verbreitet werden.
Die Endung .inc wird von manchen Programmierern zur einfach kennzeichnung von Include Datei genutzt. Damit tut sich der Programmierer leichter. Für PHP ist das volkommen egal ob die include/require Datei die Endung .php .inc .txt oder was weiß ich hat.
Anders siehts bei den Anfragen vom Webserver aus. Dort werden nur standarmässig Datein mit Endung .php über PHP verarbeitet andere werden einfach nur 1:1 ohne Bearbeitung ausgeliefert.

Das ganze klingt für mich sehr danach das jemand seine datei mittels z.B. http://www.example.com/def.php includiert. Das kann natürlich nur schiefgehen. Das würde dann auch erklären warum es mit der Endung .inc funktioniert hat.

Also Leute, tut uns alle einen gefallen und kommt nicht auf die Schwachsinnge Idee Include Datein mit der Endung .inc zu versehen. Außer ihr wisst was ihr tut. INC Dateien müssen/sollten immer in einen geschüchtzen Verzeichnis liegen, vorallem wenn sie sensible Daten enthalten. Deswegen verweden auch viele einfach die Endung .inc.php. Dadurch sieht der Programmierer immer noch das es sich um eine Includedatei handelt, aber nicht im Klartext von fremden Personen über den Webserver eingesehen werden kann.

Und setz mal in deine Datei

Code:                   In Zwischenablage kopieren (nur IE)
5">




12.

Hmmm...

Al3x Du hast recht, ich includiere über voll qualifizierte http link.
Ich dachte nicht, daß das einen unterschied macht.

Der Grund warum ich das mache ist folgender:
Mein Include file liegt auf der "unsecure" Domain (http://...) und die Datei wo ich das Include File einbinde liegt auf der "secure" Domain (https://....).
Die Directory Structur läßt es leider nicht zu mit ../../.. usw. im Verzeichnisbaum so weit hoch zu gehen, daß ich mit dieser Technik zu meinem Include Verzeichnis komme.
z.B.:
http://.... liegt auf /verz1/verz2/verz3/httpsdocs/index.php
https://... liegt auf /verz1/verz2/verz3/httpsdocs/index.php
mein include liegt auf /verz1/verz2/verz3/httpdocs/defines/

Wenn Du eine Lösung dafür hast, wäre ich dankbar dafür.


Cheers
-=Charlie=-


13.

Jetzt verstehe ich...
Da ich mit http:// includiert habe wird die zu inkludierende Datei zuerst vom parser verarbeitet und der Output dann inkludiert... mann bin ich ein idiot.
Wenn ich mit .inc inkludiere, dann schlägt der parser nicht zu.

Ich habe auch schon versucht mit lokalen Pfaden zu arbeiten, aber leider habe ich da folgenden Fehler beommen.
Zitat:
Warning: main(): open_basedir restriction in effect. File(/home/httpd/vhosts/web-4-u.us/httpdocs/defines/general.inc) is not within the allowed path(s): (/home/httpd/vhosts/web-4-u.us/httpsdocs:/tmp) in /home/httpd/vhosts/web-4-u.us/httpsdocs/txt/form_processing.php on line 22

Warning: main(/home/httpd/vhosts/web-4-u.us/httpdocs/defines/general.inc): failed to open stream: Operation not permitted in /home/httpd/vhosts/web-4-u.us/httpsdocs/txt/form_processing.php on line 22

Fatal error: main(): Failed opening required '/home/httpd/vhosts/web-4-u.us/httpdocs/defines/general.inc' (include_path='.:/usr/share/pear') in /home/httpd/vhosts/web-4-u.us/httpsdocs/txt/form_processing.php on line 22

Aber das Problem liegt ja jetzt local auf meinem server.
Ich glaube das werde ich lösen können.


Danke an alle für eure Tips
specially to Al3x

Thanks every1


Cheers
-=Charlie=-
Florida - USA


Hier gehts zum Orginal Eintrag "define constants and include them in another file" im Forum
 
phpforum.de | Impressum