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 ?
Druckbare Version
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 ?
Hallo,
versuch mal $_SYSTEM['PHP_SELF'] !
Gruß,
Gaert
PS: Nein ich arbeite nicht immer!
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
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.
und kein Windoof ;-)
Torsten.E
Bitte mal die jeweileigen Codeteile Posten (dort wo du inlcudest und dort wo du PHP_SELF einsetzt).
Hier das Start-Programm.
Und hier der Teil aus i_Session.phpPHP-Code:
<?
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");
...............
PHP-Code:
............
function i_sethref ($Link) {
return $_SERVER['PHP_SELF'].$Link;
}
..............
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. ?
Torsten.EPHP-Code:
function i_sethref ($Link) {
global $PHP_SELF;
return $PHP_SELF.$Link;
}
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...
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.
Hier mal den Link zur PHP.INI, vielleicht fällt euch ja was schlaues
dazu ein.
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
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:
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
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
PHP-Code:
<FilesMatch "\.(php|html?)$">
php_flag register_globals Off
</FilesMatch>
> Verstehe ich zwar nicht warum das so ist, aber es funzt.
ganz einfach, falls du ne funktion in der art hast:
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.PHP-Code:
function x($var) {
$t=0;
while ($i <= $var ) {
$t+=$i;
$i++;
}
}
Sowas beugt halt programmierfehlern vor.