variable mit url übergeben
hubertus
- php
Einen schönen Mittag,
Ich habe gerade feststellen müssen, nachdem ich unsere Homepage auf den Server geladen habe, dass dieser meine Verlinkung (ich habe das System index.php?mod=Beispiel und dann wird in der index.php der Inhalt über die Variable geladen) nicht akzepiert.
Der Server unterstützt php, die Verlinkung funktioniert auch (habe es auf einem anderen Server getestet).
Warum funktioniert es dann auf unserem richtigen Server nicht?
Wie könnte ich es machen, dass die Varibalen doch übergeben werden (ich möchte aber das System beibehalten)?
Mit freundlichen Grüßen
Hubertus
Hallo!
Wie "fängst" du denn die variablen auf? Etwa so sollte es sein, weil vermutlich (was richtig ist), register_globals deaktiviert ist.
$mod = $_GET['mod'];
Hallo,
genau so habe ich sie nicht "empfangen".
$mod = $_GET['mod'];
Habe es nun so gemacht und nun tut es.
Danke für die kompetente und schnelle Hilfe!
Mit freundlchen Grüßen
Hubertus
Hi!
$mod = $_GET['mod'];
Habe es nun so gemacht und nun tut es.
Laß diesen Unsinn.
Es ist nicht nötig, den Inhalt einer Variablen noch einmal in einer anderen zu speichern.
Das ist nur Speicherverschwendung.
Arbeite einfach mit $_GET['mod'] und vergiss $mod.
Und informiere dich unbedingt über die Einstellung register_globals in der php.ini.
Möglicherweise gibt es noch ein paar andere Variablen in deinem Script, die es jetzt nicht mehr gibt.
Eventuell versuchst du irgendwo den Wert von $PHP_SELF zu nutzen, wo es $_SERVER['PHP_SELF'] heißen müßte, o.ä..
Schöner Gruß,
rob
Es ist nicht nötig, den Inhalt einer Variablen noch einmal in einer
anderen zu speichern.
Das können wir als Außenstehende wohl kaum beurteilen.
Das ist nur Speicherverschwendung.
Nicht unbedingt. Schon mal etwas von 'copy-on-write' gehört?
Grüße
Hi!
Das können wir als Außenstehende wohl kaum beurteilen.
Sicherlich könnte es Fälle geben, wo das Kopieren eventuell sinvoll wäre. Aber nach der gegebenen Beschreibung, scheint mir die Sache recht klar zu sein:
Das Script funktioniert nicht mehr, weil auf dem neuen Server register_globals auf off gestellt ist.
Anstelle jetzt zu Beginn seines Scriptes $var = $_POST['var'];
zu schreiben, wäre es viel sinnvoller, direkt mit $_POST['var'] zu arbeiten.
Das ist nur Speicherverschwendung.
Nicht unbedingt. Schon mal etwas von 'copy-on-write' gehört?
Ja, Copy-On-Write ist mir bekannt, aber ich sehe nicht, was das mit diesem Script zu tun hat.
Schöner Gruß,
rob
Sicherlich könnte es Fälle geben, wo das Kopieren eventuell
sinvoll wäre.
Und genau daran wollte ich auch nur erinnern. Mir stößt es etwas
säuerlich auf, wenn aus dem Blauen heraus irgendwelche scheinbar
absoluten Thesen in den Raum gestellt werden. Auf den Begriff
des Kopierens komme ich weiter unten noch mal zurück.
Das Script funktioniert nicht mehr, weil auf dem neuen
Server register_globals auf off gestellt ist.
Das war zumindest eine sehr wahrscheinliche Möglichkeit; auf
diesen Teil Deines Beitrages habe ich mich allerdings gar nicht
bezogen.
[...] wäre es viel sinnvoller, direkt mit $_POST['var'] zu arbeiten.
Falls es bei einer einfachen Struktur und überschaubaren Bezeichnern
bleibt, und falls die hier referenzierten Daten noch modifiziert werden,
könnte es sich - unter Einbeziehung aller Aspekte, wie Lesbarkeit,
Datensicherheit, Portierbarkeit und, ja, Performance - lohnen, direkt
mit den Referenzen in den Superglobalen zu arbeiten (was auch bei mir
häufig der Fall ist), aber weder Du noch ich können dazu aus unserer
Position heraus eine definitive Aussage bezüglich eines uns unbekannten
Skriptes treffen.
Das ist nur Speicherverschwendung.
Nicht unbedingt. Schon mal etwas von 'copy-on-write' gehört?
Ja, Copy-On-Write ist mir bekannt, aber ich sehe nicht, was das
mit diesem Script zu tun hat.
PHP benutzt hauptsächlich zwei Mechanismen, um den Speicher für Variablen
zu verwalten: die Referenzzählung ('reference counting') in Verbindung mit
einer Symboltabelle, und eben jenes 'copy-on-write'. Letzteres bewirkt,
daß neuer Speicher nicht schon bei Erteilung eines Alias zugeordnet wird,
sondern erst dann, wenn sich die Daten an der zugeordneten Speicheradresse
ändern:
$alt = 'Ein Test.';
$neu = $alt; // A
A) Ein Alias/Link/eine Referenz (wie auch immer Du es nennen möchtest)
names '$neu' wird für die Speicherstelle eingerichtet, auf die auch '$alt'
verweist. Der Inhalt wird nicht kopiert, der Symboltabelle wird für die
Adresse lediglich ein weiterer Anker und ein neuer Referenzwert hinzugefügt.
$neu = 'Ein weiterer Test.'; // B
B) Die nun abweichenden Daten werden an eine zur Verfügung stehende
Speicheradresse geschrieben und nun exklusiv über '$neu' referenziert,
das Alias '$neu' wird aus dem Eintrag der Symboltabelle für '$alt'
entfernt, und dessen Referenzwert zurückgesetzt.
Stark vereinfacht, natürlich. Der Punkt ist: bei 'A' wird weder kopiert
noch irgendein Zeiger verändert. Das geschieht - wenn überhaupt - erst
bei Modifikation der Daten in '$neu' - somit kann hier also auch nicht
von Speicherverschwendung die Rede sein.
Grüße
Hi hubertus,
Warum funktioniert es dann auf unserem richtigen Server nicht?
Wie könnte ich es machen, dass die Varibalen doch übergeben werden (ich möchte aber das System beibehalten)?
Wie greifst du auf "mod" zu? Ich tippe auf register_globals on/off.
Diese Einstellung wird unterschiedlich sein in deinen verschiedenen Serverumgebungen.
ciao
romy
Könntest du eventuell den genaueren Code posten, damit ich dir besser helfen kann.
Welcher Provider?
Handelt es sich um ein CMS?