header("Location: .....

Bash, Shell, PHP, Python, Perl, CGI
moppi
Posts: 368
Joined: 2003-02-15 11:16

header("Location: .....

Post by moppi » 2004-06-29 17:43

Hallo,

ich habe ein Problem mit folgendem:

Code: Select all

header("Location: index.php");
Der Browser soll die inde.php aufrufen, wenn vorheriger Code abgearbeitet ist. Davor wird auch ein Cookie gesetzt. Leider funktioniert das mal und mal nicht. Ich suche Fehler finde jedoch keinen.
Zum Einsatz kommt PHP 4.2.2.

Hat jemand eine Hilfestellung?

legato
Posts: 115
Joined: 2004-06-03 12:40

Re: header("Location: .....

Post by legato » 2004-06-29 18:44

Du meinst vermutlichdie allseits bekannte Fehlermeldung á la "Headers already sent by... in line...".
Das kommt daher, das vor Header keine Ausgaben sein dürfen. Setcookie() sollte aber gehen.
Wahrscheinlich gibst du irgendwo was aus, echo(), print() oder so.
Ein Stolperfalle sind auch leerzeichen vor / nach <?php bzw ?>.
Das ist schon eine Ausgabe!

Wenn du sicher bist, dass keine ausgabe stattfindet schau dir mal die funktionen namens ob_*() an. Damit kannst du ausgaben unterbinden bzw. nach setcookie() usw. ausgeben lassen.
Bei header() ist das natürlich ziemlich sinnfrei...

jedenfalls hast du wahrscheinlich irgendwo ne ausgabe.
Wenn du nicht weiterkommst - source des scripts soll helfen.
Denn ohne Glaskugel kann man keine konkretere Aussage treffen...

moppi
Posts: 368
Joined: 2003-02-15 11:16

Re: header("Location: .....

Post by moppi » 2004-06-29 19:00

Danke erstmal für Deine Antwort. Diese Information hatte ich bereits von PHP direkt. Es ist auch nicht das erstemal das ich mich diesem Thema widme.
Ich habe in der php.ini auch diesen Puffer eingestellt, jedoch funktioniert es nur nach dem Zufallsprinzip.


Es kommen keine Fehlermeldungen, es wird lediglich nach dem Ã?bermitteln von Benutzername und Kennwort ein Cookie gesetzt, danach soll mit der funktion header eine andere Seite redirected werden. Das funktioniert jedoch nur hin und wieder.

legato
Posts: 115
Joined: 2004-06-03 12:40

Re: header("Location: .....

Post by legato » 2004-06-29 19:05

hehe, es ist halt immer schwer die Leute einzuschätzen. ;-) Kennst du ja bestimmt.

Hm, wird das cookie denn _immer_ gesetzt, also auch wenn keine Weiterleitung stattfindet?
Hast du mal eine Weiterleitung mit der vollen URI probiert?

Ansonsten fällt mir da auch nichts mehr ein... :oops:

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: header("Location: .....

Post by Joe User » 2004-06-29 19:05

Code: Select all

header("Location: http://www.example.com/index.php");
http://de3.php.net/manual/de/function.header.php
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

moppi
Posts: 368
Joined: 2003-02-15 11:16

Re: header("Location: .....

Post by moppi » 2004-06-29 19:18

Danke für die Tipps aber das habe ich alles schon durch daran liegt es nicht.
Aber mal was anderes ich denke es liegt daran:

Code: Select all

$UserSess = new Sess();
$UserAuth = new Auth();
Der Konstruktor der Klasse wird ausgeführt, dieser initialisiert ein paar Varialblen und legt sie so ab:

Code: Select all

$this->AuthID = $_COOKIE['AuthID'];
wenn ich aber anschließend nach der Instanzbildung so zusagen eine Methode aufrufe:

Code: Select all

if (!$UserAuth->login()) {
	$UserAuth->go_loginscreen();
}
gibt diese aber keine Informationen zurück, obwohl ich dieser Inhalt im Konstruktor initialisiert wird.
Ich suche nun an dem Fehler mehrere Tage, es kann sein das ich damit überfordert bin aber das ist doch eigentlich alles richtig oder?

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: header("Location: .....

Post by Joe User » 2004-06-29 20:12

Moppi wrote:Danke für die Tipps aber das habe ich alles schon durch daran liegt es nicht.
Sorry, aber die dritte Anmerkung im Manual hast Du wohl überlesen.
Moppi wrote:Aber mal was anderes ich denke es liegt daran:
Ohne den vollständigen Source lässt sich dazu nichts schreiben.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

marsupilami
Posts: 20
Joined: 2004-01-31 19:13
Location: Böblingen

Re: header("Location: .....

Post by marsupilami » 2004-06-29 21:16

Also im Prinzip hatte ich das selbe Problem. Mal ging es und mal nicht.

Mein Problem hab ich dadurch gelöst, das ich den header(); aufruf au der Funktion rausgenommen hatte und außerhalb von einer funktion und einer KLasse aufgerufen hab. Seit dem funktioniert alles wunderbar!

moppi
Posts: 368
Joined: 2003-02-15 11:16

Re: header("Location: .....

Post by moppi » 2004-06-30 07:26

Welche PHP Version war das? Du nutzt PHP als CGI oder? Denn ich habe gegoogelt und mehrere gefunden die das Problem hatten mit der CGI Version 4.1.2 und 4.2.2.

Aber das kann doch nicht die Lösung sein, das ich das jetzt alles wieder umstricken muss?

marsupilami
Posts: 20
Joined: 2004-01-31 19:13
Location: Böblingen

Re: header("Location: .....

Post by marsupilami » 2004-06-30 08:20

Ich nutz 4.3.4 als ISAPI auf einem Sambar Server 5.1, aber auf meinem Linux Webspace war das gleiche Problem, da läuft als apachemod

Ich will dich nicht dazu veranlassen alles umzustricken, aber bei mir hat das header(); in einer funktion nicht funktioniert...

außerhalb schon!

moppi
Posts: 368
Joined: 2003-02-15 11:16

Re: header("Location: .....

Post by moppi » 2004-06-30 08:32

Mag sein, das kurriose warum fallen die initalisierten Variablen aus dem Konstructor unter den Tisch? die fehlen in der Instanz komplett. Und genau da liegt denke ich das Problem denn die Daten sind mal da und mal weg.

Auch der Apache error_log gibt nichts aus. Der suphp_log auch nicht!

HILFE!!

EDIT: ich habe jetzt debuggt was das Zeugt hält, und mal nicht an meinen Künsten gezweifelt, ich komme zu dem Ergebnis, das es mit hoher Warscheinlichkeit daran liegt das ich setccokie und header verwende in Klassen und Methoden. Ist schon merkwürdig.

andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen

Re: header("Location: .....

Post by andreask2 » 2004-06-30 10:57

Naja, ohne Deine Scripte zu kennen ist das nicht so einfach. Hast Du mal das Error-Reporting raufgesetzt dass Du jede Notice... bekommst? Das hilft oft.

Dir wird nichts anders übrig bleiben als das Script so lange zu vereinfachen, bis Du den Fehler gefunden hast.

Wenn Du sowas hättest:

Code: Select all

<?php
setcookie ("TestCookie", "blabla");
header('Location: http://'.$_SERVER["HTTP_HOST"].'/index.php');
?>
könntest Du kontrollieren ob das denn mit Cookies und Location-header zusammen funktioniert, bei mir funktioniert das tadellos. Du weißt ja welche Werte Dir fehlen, vereinfache das Script so lange bis Du weißt warum die fehlen. Gebe Dir alle Werte aus auf die Du Dich verlässt...

So komplizierte Scripte lassen sich nur sehr schwer debuggen. Vielleicht hilft Dir auch ein Debugger wie xebug.


Grüße
Andreas

moppi
Posts: 368
Joined: 2003-02-15 11:16

Re: header("Location: .....

Post by moppi » 2004-06-30 11:05

ich habe es schon soweit vereinfacht, jedoch haut in dem selben script ein anderes header nicht hin! ob es am client liegt weiss ich nicht wie gesagt es geht mal geht mal nicht habe im IE auch den cache ausgeschaltet ab das problem besteht trotzdem noch. aber tritt seltener auf :(