PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : $PHP_SELF ist leer ??? (bei include)



Torsten.E
25-04-2004, 16:51
Ich wollte die Variable $PHP_SELF verwenden, um meine Links zusammezubauen.

Jetzt ist das Teil leer. Sie wird jedoch in einer include-Datei aufgerufen.

Warum dass denn ?

Torsten.E

PS: Arbeitest Du immer GAERT ?

Gaert
25-04-2004, 17:46
Hallo,

versuch mal $_SYSTEM['PHP_SELF'] !

Gruß,

Gaert

PS: Nein ich arbeite nicht immer!

Torsten.E
26-04-2004, 08:37
Klappt leider nicht.

Sollte ich vielleicht noch erwähnen, dass ich den Aufruf in einer
Fuktion benötigte. Die Datei wird per require_once eingebunden
(sofern das eine Rolle spielt).

Torsten.E

undefined
26-04-2004, 08:42
Ja es spielt eine Rolle, je nach System (Windoof) funktionieren Superglobals nicht in Dateien die mit require oder include eingebunden werden. Verwende statt dessen getenv() Welche PHP Version verwendest du denn, der Bug ist schon ziemlich alt.

Torsten.E
26-04-2004, 08:46
und kein Windoof ;-)

Torsten.E

Gaert
26-04-2004, 08:53
Bitte mal die jeweileigen Codeteile Posten (dort wo du inlcudest und dort wo du PHP_SELF einsetzt).

Torsten.E
26-04-2004, 09:45
Hier das Start-Programm.



<?

session_name("ID"); // legt den ID-Namen fest (unabhängig von PHP.INI)
session_start();

// Liest zuerst die Session-Funktionen ein und
// Legt dann die Sprache fest damit die restlichen
// Dateien eingelesen werden können.

require_once("include/functions.php");
require_once("include/i_Session.php");
require_once("include/i_class.php");
require_once("include/i_menue.php");
require_once("include/language.php");

...............



Und hier der Teil aus i_Session.php




............

function i_sethref ($Link) {

return $_SERVER['PHP_SELF'].$Link;

}

..............

Torsten.E
26-04-2004, 11:50
Es muß die "global" Anweisung eingebunden werden, die
GLOBALE Variablen in einer Funktion "sichtbar" macht.

Verstehe ich zwar nicht warum das so ist, aber es funzt.

Und wenn da so ist, kann man die "global" Anweisung
generell für das ganze Programm irgendwo setzen. ?



function i_sethref ($Link) {

global $PHP_SELF;

return $PHP_SELF.$Link;

}


Torsten.E

Gaert
26-04-2004, 13:09
Eigentlich gibts für genau diese Sache die superglobalen Arrays wie z.B. $_GET, $_POST ... und eben auch $_SERVER - nur sehr merkwürdig, dass dieses Array bei dir nicht gefüllt ist.
Was kommt denn für ein Output bei einem print_r($_SERVER) ?
Wie sind deine register_globals Einstellungen in der php.ini ?

Übrigens:
Es ist sauberer <?php statt <? zu verwenden...

undefined
26-04-2004, 13:19
Das Problem hatte ich unter 4.* schon öfter manchmal hängt es mit der include Anweisung zusammen oder wenn die Dateien in der falschen Reihenfolge includiert werden. Ich würde wie schon erwähnt innerhalb der funktionen getenv() verwenden damit bist du auf der sicheren Seite.

Torsten.E
26-04-2004, 18:05
Hier mal den Link zur PHP.INI, vielleicht fällt euch ja was schlaues
dazu ein.

www.ifta-gmbh.com/info.php (http://www.ifta-gmbh.com/info.php)

Fällt mir gerade noch was ein. Formularvariablen sehe ich die mit $GLOBALS['vname']
die Variable aber welche ich mit

http://www.myprogramm.de?variable=wert

übergebe sehe ich nicht, habe ich da was falsch verstanden.


Torsten.E

Gaert
27-04-2004, 08:13
Sorry, aber den letzen Teil habe ich nicht geblickt... wie kommst du darauf, dass du auf Formularvariablen mit $GLOBALS[] zugreifen kannst?

Post Daten stehen in $_POST[] (Formular mit method="post"), Get Daten (über URL oder Forumular mit method="get") stehen in $_GET[] - Cookie Daten in $_COOKIE[] und alles zusammen in $_REQUEST[]...

Die ausgabe von phpinfo() sieht eigentlich ganz ok aus - bis auf das register_globals = on :mad:

Torsten.E
27-04-2004, 17:09
Hey Gaert,

ich habe Deine Erklärung bezüglich REGISTER=ON/OFF gelesen und stimme Dir zu 100% zu. Da ich seit 16 Jahren programmiere bin ich ebenfalls voll gegen GLOBALE-Variable soweit als möglich. !!!!

Nur haben wir bei uns auch POSTNUKE am laufen und auch für unsere Kunden und für das Teil muß REGISTER = ON gesetzt sein, sofern ich das richtig im Kopf habe.
Ansonsten würde ich das Teil auch abschalten.

UND: Wenn auf die Variablen mit $_GET, $_POST, etc. zugegriffen wird, spielt es glaube ich auch keine so große Rolle ob REGISTER=ON ist.

Torsten.E

undefined
27-04-2004, 17:21
Nun ja - das Problem hat Gaert schon angedeutet, je nach anderer Software die bei dir noch läuft kann es die die ganze Seite zerhämmern weil die Variablen überschrieben werden.
Ich würde dir empfehlen und wenn möglich das ganze mit htaccess zu Steuern


<FilesMatch "\.(php|html?)$">
php_flag register_globals Off
</FilesMatch>

msi
27-04-2004, 19:32
> Verstehe ich zwar nicht warum das so ist, aber es funzt.

ganz einfach, falls du ne funktion in der art hast:



function x($var) {
$t=0;
while ($i <= $var ) {
$t+=$i;
$i++;
}
}


also $i nicht vorbelegt hast und es wurde schon vorher also außerhalb der funktion $i benutzt ist $i nicht 0 und die ganze funktion verhält sich anderst.
Sowas beugt halt programmierfehlern vor.

Torsten.E
27-04-2004, 22:58
Ich weis was Du meinst und kenne auch die Argumentation pro/contra globale Variablen. Ich persönlich bin auch dagegen.

Aber wenn Du Kunden hast die solche Teile wie POSTNUKE (pro und contra will ich nicht erörtern) einsetzen, dann bleibt Dir halt nichts anderes als solche "Schalter" zu setzen.

In dieser Hinsicht bin ich auch sehr konservativ, und zwar deshalb, weil ich kein Newbie im Bereich Programmierung bin (16 Jahre Erfahrung).

Ja GAERT (weil er mit liest), ich frag hier zwar viel, aber deshalb weil ich PHP und MySQL im Crash-Kurs lernen will/muß um schnell zu Ergebnissen kommen.
Und da liegt der Vorteil der Erfahrung. Man kenn die Syntax und die Eigenheiten einer Programmiersprache/Skriptes zwar noch nicht genau (deshalb die vielen Fragen), aber wie man sowas umsetzt ist immer das selbe.

An dieser Stelle mal ein Lob an alle, die hier aktiv mitmachen.

Torsten.E

Torsten.E
29-04-2004, 15:42
Zitat GAERT:

Post Daten stehen in $_POST[] (Formular mit method="post"), Get Daten (über URL oder Forumular mit method="get") stehen in $_GET[] - Cookie Daten in $_COOKIE[] und alles zusammen in $_REQUEST[]...

Gibt es auch einen Angabe speziell für die SESSION-Variablen ?

Pingu
29-04-2004, 15:46
Original geschrieben von Torsten.E
Gibt es auch einen Angabe speziell für die SESSION-Variablen ?
Siehe Dokumentation: http://www.php.net/manual/de/ref.session.php

Anmerkung: Seit PHP 4.1.0 steht $_SESSION genau wie $_POST, $_GET, $_REQUEST und so weiter, als globale Variable zur Verfügung. Im Gegensatz zu $HTTP_SESSION_VARS ist $_SESSION immer global. Deshalb brauchen Sie für $_SESSION nicht das Schlüsselwort global zu verwenden. Bitte beachten Sie, dass in dieser Dokumentation nun überall $_SESSION verwendet wird. Sie können $_SESSION durch $HTTP_SESSION_VARS ersetzen, wenn Sie Letzteres bevorzugen. Beachten Sie auch, dass Sie Ihre Session mit session_start() starten müssen, bevor die Verwendung von $_SESSION zur Verfügung steht.

Pingu

Torsten.E
29-04-2004, 16:19
Ja das ist mir auch lieber so, dann weis ich
im Quellcode nämlich auch, woher die Variable
kommt. (besser als $GLOBALS)

Danke

Torsten.E