php.ini, register_globals=on, aber doch off ?

Thommy

Thommy

Aktives Mitglied
Thread Starter
Dabei seit
23.06.2003
Beiträge
1.887
Reaktionspunkte
0
Hi,

ich habe einen Apache Webserver + phpMyadmin, Mysql und natürlich PHP.
Wenn ich nun in der php.ini die register_globals auf "on" setze, ist es dann aber trotzdem off! Ich habe dazu zum Test eine kleine PHP Datei die folgendes enthält:

echo $_GET[test];
echo $test;
phpinfo();

Damit will ich nur testen, ob die globals wieder an sind, $_GET[test] wird natürlich richtig ausgegeben, allerdings $test nicht. Mit der phpinfo schau ich dann nach, ob meine Einstellungen übernommen wurden. Bei allen vorherigen Änderungen, war die Änderung dann auch richtig in der phpinfo verzeichnet. Allerdings scheint er die register_globals zu ignorieren ... denn sie stehen in der phpinfo auf "off". Das kann doch nicht sein?! Die sind 100% auf on gesetzt.
Ist dieser Wert noch von anderen Einstellungen abhängig oder wie krieg ich diese blöden globals an? :)

Vielen Dank
Gruß
Thomas
 
hallo

ich vermute das es ein versionproblem von php ist.

$_GET ist eine "super"variable die nur ab eine bestimmte version von php (glaube 4.x) unterstutzt wird. um das auszuprobieren würde ich ein test machen und die alte schreibform $HTTP_GET_VARS[$test] einbinden ()natürlich nicht vergessen sie als global aufzurufen(global $HTTP_GET_VARS; ).
falls es klappt dann ist es ein versionsproblem... lösung: alte schreibweise oder update.

lg
bb
 
PHP:
<?php
$_GET["test_neu"]="neue version, globals on!!!";

test();
phpinfo();

function test()
{
global $HTTP_GET_VARS;

$HTTP_GET_VARS["test_alt"]="alteversion, globals on!!!";

if (empty($_GET["test_neu"] AND $HTTP_GET_VARS["test_alt"]))
print("globals OFF !!!");
else
print("".$_GET["test_neu"]."ps die alte schreibweise funktioniert bei der neuen version auch: ".$HTTP_GET_VARS["test_alt"]."");

}
?>

hoffe es hilft
 
Zuletzt bearbeitet:
Hi,

erstmal vielen dank für deine Mühe! Aber ich glaube ich hab mich irgendwie krumm ausgedrückt, sorry :) Die _GET und HTTP_GET_VARS funktionieren ja, und genau das ist mein Problem :)

z.b.: index.php?test=hallo

Wenn in der php.ini die register_globals = on, sind, dann müsste ein echo von $test auch "hallo" ergeben, aber das tuts ja bei mir nur mit _GET[test] etc.
Leider habe ich viele Skripte die register_globals benötigen ...also die ohne _GET und HTTP_GET_VARS arbeiten.
Daher meine Frage, was ich da falsch gemacht habe, denn in der php.ini sind die register_globals auf on, nur wird die angabe aus irgendeinem grund ignoriert..
 
Leider habe ich viele Skripte die register_globals benötigen ...also die ohne _GET und HTTP_GET_VARS arbeiten.
hm verstehe ich nicht :)

also du kanns über get keine variable überschreiben sondern nur eine get variable.

also in der index.php müsste sowas sein:


$test=$_GET["test"];

echo $test;
 
Original geschrieben von bondiblue

$test=$_GET["test"];

echo $test; [/B]
&nbsp;
register_globals sind ja dafür da, das übergebene variablen, in der php datei sofort als gleichnamige variable bereitstehen. also index.php?test=hallo würde halt sofort als $test mit inhalt "hallo" bereitstehen, ohne $_GET etc.
Genau das geht ja bei mir nicht, bei mir gibt es keine Variable $test. Ich hab halt scripte die mit vielen Variablen in Formularen arbeiten, und da ich keine Lust habe die umzuschreiben und alles mit $_GET[variabelname] zu betiteln, brauche ich die register_globals. und die sind in der php.ini auf "on" gestellt, nur wird es ignoriert und es ist trotzdem off, so dass $test nicht existiert.
 
Welche php.ini hast Du denn editiert - bzw. wie hast Du sie editiert?

Wenn allerdings in der phpinfo()-Ausgabe drinsteht, dass die Globals "on" sind, solltest Du
alle richtig gemacht haben. Dann kann es ja höchstens noch ein Fehler in der Installation
sein. Stichwort: Neuinstallation!?
 
hallo

wenn phpinfo() register_globals= on ausgibt, dann sind die globals on

hm ich weiss nicht welchem buch du das entnommen hast aber folgende frage: warum gibt es variablen UND globale variablen? wie unterscheiden sie sich? bzw wie kann php die unterscheiden? meine meinung: php unterscheidet durch die schreibweise:

normale variable= $irgendwas
globale variable= $_GET["irgendwas"] oder $HTTP_GET_VARS["irgendwas"]

liebe grüsse
bondiblue
 
... und wenn sie sich unterscheiden dann aus einem bestimmten grund: php behandelt sie unterschiedlich....
 
@thommi:

wenn register_globals auf on steht, heisst das nicht, dass du Variablen aus dem query String per $variable aufrufen kannt!
register_globals ermöglicht dir, variablen aus dem Query-String per $_GET[variable] aufzurufen, nicht mehr und nicht weniger!

Wenn du register_globals auf "off" stellst, wird auch die erste zeile deines Skriptes (echo $_GET[test]; ) nicht mehr gehen!


achso: "bondi recht geb"
 
Original geschrieben von lun_IX
Wenn du register_globals auf "off" stellst, wird auch die erste zeile deines Skriptes (echo $_GET[test]; ) nicht mehr gehen!
&nbsp;

Tut es doch! Globale Variablen sind, wie der Name schon sagt global,
und damit auch global zu erreichen. Soll heißen, wenn Du die register_
globals auf "on" stellst, kannst Du mit globalen Variabeln arbeiten,
ohne über $_GET respektive $_POST zu gehen.

Der Unterschied zwischen Globalen Variablen und $_GET / $_POST hat
mit dem allgegenwertigen Thema "Sicherheit" zu tun. Wen Du mit
Globalen Variablen arbeitest und diese z.B. per URL an ein anderes
Skript übergibst, kann man diese abfangen und ändern. Bei $_POST /
$_GET ist dies hingegen nicht möglich.


Ich bleibe daher bei meiner Vermutung, dass es sich bei Dir um einen
generellen Installations-Fehler handelt, der wohl nur durch eine Neu-
installation behoben werden kann.
 
@delmar:

okay, wenn das so wäre, hätte ein Skript bei einem Kunden auch ohne register_globals="on" funktionieren müssen, hat es aber nicht!

und wenn ich mir hier ein Testskript schreibe, und das ausprobiere, geht es auch nicht....?!

Ich mein, ich möchte dir ja gerne glauben, aber mein Apache hier sagt was anderes... :rolleyes:

Kann sein, dass es auch wieder was mit den Versionen zu tun hat, keine Ahnung, ich weiss nur, dass ich Variablen per $_GET[] oder POST nur dann auf der aufgerufenen Seite empfangen kann, wenn die globals "on" sind....
alles andere wäre mir auch total neu (ich programmiere PHP aber auch erst seit 2 Jahren.... und sitze grad an einem 4000 Zeilen Projekt, wo ca. 300 Variablen per Post übergeben werden...)


edit: und ausserdem werden doch gerade bei "GET" die Variablen über den Query-String, also die URL übergeben.... also wäre es auch ohne register_globals="on" unsicher.....
 
Hm ... na toll, Du bringst mich jetzt ganz durcheinander! :)

Jetzt bin ich verunsichert und muss zu Hause erst noch mal nach-
schauen und das überprüfen ... :(

:D
 
hihi, sorry! das wollte ich nicht!

und vor allem hab ich grad den neusten Apache getestet und du hast recht! :eek:
globals sind off und trotzdem komm ich mit $_GET[] an eine per ?var=test übergebene Variable ran.... hui....


Dickes Sorry!


@Thommy: hast du den Apache neu gestartet, nachdem du die Globals auf on gestellt hast?
 
peinlich peinlich... sorry Jungs! :(
 
Also, mal schauen

Meine Version: php 4.3.2

echo $_GET['test'];
echo $HTTP_GET_VARS['test'];
echo $test;

$_GET und $HTTP_GET_VARS gehen immer egal ob "on" oder "off"

$test selbst wird aber nur angezeigt wenn "on".

Der Wechsel zwischen "on" und "off" geht aber nur wenn ich den Server neu starte, zumindest unter Windows, sonst liest php die neuen Werte anscheinen nicht ein.

Was die sichere Übertragung angeht verwende anstatt _GET dann doch _POST, da kann dir keiner "so leicht" hineinfunken.

Andere Möglichkeit wäre in die .htaccess "php_flag register_globals on" einzutragen, das hat dann Prirorität - wenn du die Rechte im Apache dafür hast.
 
Unter Mac OS muss der Apache auch neu gestartet werden, um neue
Konfigurationen zu übernehmen.

@lun_IX: Ist ja nicht so schlimm. Bin nur froh, dass ich doch nicht an
mir zweifeln muss! :D
 
gut das ich erstmal zuende gelesen habe ... wollte gleich los protestieren *g* aber hat sich ja geklärt... aber mein problem besteht immer noch..... aaaalso:

Es gibt nur EINE php.ini auf dem system, andere änderungen in der php.ini wurden also auch gleich akzeptiert und ausgeführt. Ich habe auch den apache immer neu gestartet.
ich WILL ja gerne die register_globals=on haben, SIND SIE AUCH (in der php.ini)! Nur steht in der phpinfo() das sie trotzdem OFF sind. daher meine Frage, woran das liegen könnte, ob ich irgendwo noch was anderes einstellen muss.
Wäre vielleicht auch hilfreich wenn ihr den Abschnitt "data handling" (o.ä.) aus eurer php.ini hier reinkopieren könntet.... vielleicht seh ich dann ja was ich falsch gemacht habe. Andernfalls hilft wohl echt nur eine Neuinstallation.
 
wo änderst du denn die php.ini, also ich mein, wo in deinem System liegt die?
Bist du überhaupt als root eingeloggt? (sonst kannst du die ja nicht abspeichern...

bei mir liegt die richtige php.ini in /private/etc/php.ini , unter linux liegt sie in /etc/php.ini und auf nem Windows Rechner unter "pfad zu windows"\php.ini


phpinfo muss das anzeigen, wenn du es richtig geändert hast!
 
ja, das ist alles klar .... meine ist in usr/local/php/lib
in deinem verzeichnis ist bei mir nur eine "php.ini.default".

Änderungen in meiner php.ini (/usr/local/php/lib) werden ja auch umgesetzt, also ist es die richtige. Alles wird umgesetzt außer die register_globals, die bleiben trotzdem OFF!

; Data Handling ;
;;;;;;;;;;;;;;;;;
;
; Note - track_vars is ALWAYS enabled as of PHP 4.0.3

; The separator used in PHP generated URLs to separate arguments.
; Default is "&".
;arg_separator.output = "&amp;"

; List of separator(s) used by PHP to parse input URLs into variables.
; Default is "&".
; NOTE: Every character in this directive is considered as separator!
;arg_separator.input = ";&"

; This directive describes the order in which PHP registers GET, POST, Cookie,
; Environment and Built-in variables (G, P, C, E & S respectively, often
; referred to as EGPCS or GPC). Registration is done from left to right, newer
; values override older values.
variables_order = "EGPCS"

; Whether or not to register the EGPCS variables as global variables. You may
; want to turn this off if you don't want to clutter your scripts' global scope
; with user data. This makes most sense when coupled with track_vars - in which
; case you can access all of the GPC variables through the $HTTP_*_VARS[],
; variables.
;
; You should do your best to write your scripts so that they do not require
; register_globals to be on; Using form variables as globals can easily lead
; to possible security problems, if the code is not very well thought of.
register_globals = "On"

; This directive tells PHP whether to declare the argv&argc variables (that
; would contain the GET information). If you don't use these variables, you
; should turn it off for increased performance.
register_argc_argv = "on"

; Maximum size of POST data that PHP will accept.
post_max_size = 8M

; This directive is deprecated. Use variables_order instead.
gpc_order = "GPC"
 
Zurück
Oben Unten