[php/cgi] header("location: ...")

Pagina: 1
Acties:
  • 71 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ik heb hier een website waar regelmatig gebruik wordt gemaakt van dit soort statements:

PHP:
1
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']));


Op m'n locale webserver, waar php is geinstalleerd als php-module (Apache 2 filter, om precies te zijn) werkt dit zoals het hoord. Maar online is php als cgi geinstalleerd - door de hosting provider en nu blijkt dat 't header-statement niet wordt uitgevoerd.

Ik kan nergens iets zinnigs vinden over dit verschijnsel. Is het zo dat redirections mbv. header niet werken als php als cgi is geinstalleerd onder Apache?

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

zijn het wel dezelfde php versies?

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Nee, online: 4.2.1
locale server: 4.2.2 (echter wel uittermate compleet gecompiled)

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Bij providers als Lycos moet je een relatief URL gebruiken in je header, dan werkt het wel.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Provider is inter.nl.net en ik had eerst een relatieve URL in de trent van:

PHP:
1
header("location: ./");


Dit werkte niet dus heb ik het aangepast in een absolute URL. Maar dat haalt ook niks uit.

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Eeehm... Ik heb net de volgende twee scriptjes op de online server gezet:

test1.php
PHP:
1
2
3
session_start();
$_SESSION['test'] = 'test';
header("location: http://www.host.com/test2.php");


test2.php
PHP:
1
2
session_start();
echo "dit is test2.php... ".$_SESSION['test'];


En dit werkt... :?

Blijkbaar ligt 't probleem niet bij 't header-statement. Zal wel een foutje in m'n analyse zijn. Hoe dan ook, nu sta ik echt voor een raadsel. Doh! |:(

Voor de compleetheid: je kan dus gewoon redirections doen in php mbv. header.

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Ik heb zoiets ook wel eens gehad, dit was een probleem icm php + cookies + header('location: bla');

Probeer eens éérst je include, en dán de session_start(); :?

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Dat is inderdaad de gebruikte combi. omdraaien van include en session_start() haalt niks uit, helaas. Dit is 't stukje code wat wel uitgevoerd wordt (de sessie werkt), maar waarvan de header niks uithaalt:

PHP:
1
2
3
4
// Save language in session
$_SESSION['language'] = $_GET['l'];
header("Location: ./");
exit;


Dit stukkie code zit in een function die vanuit een eigengemaakte 'action handler' (een class) wordt gedraaid. Die class werkt prima, want andere dingen - die zonder een redirect werken - werken wel goed.

Dus in bovenstaand stukje wordt de session-variabele 'language' braaf gezet, maar verder gebeurd er niks en blijft 't scherm wit... Het header statement wordt niet uitgevoerd.

Ondanks het feit dat de bovenstaande test scriptjes wel werken, kan ik niet anders concluderen dat 't in de website fout gaat. Het zal een combinatie van factoren zijn, maaruh... I'm lost!

Help!

Ik kan helaas niet veel meer code geven, aangezien 't om een website van een klant gaat (die nu dus down is).

Papa Eend, wat heb je precies allemaal gedaan om dit probleem op te lossen? Graag hoor ik ALLES!

[ Voor 10% gewijzigd door Explore op 02-06-2003 18:40 ]

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb ook vaak dat je dirname niet eens hoeft te gebruiken omdat je al in de root zit en dat je dan // krijgt. daarom had ik een function goHeader($url) gemaakt, dat vergemakkelijkte het headeren nogal :)

Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ja, daar liep ik ook al tegenaan. Lokaal heb ik de diverse websites in verschillende directories staan. Online staat de handel inderdaad in de root, dus daar maakt 't niet uit.
Echter, aangezien 't probleem daar niet ligt, heb ik er weer een relatief pad van gemaakt, zoals in 't laatste stukje code uit m'n vorige bericht.

Ik heb net nog zitten pielen. Bovenaan de code staan nog een aantal defines voor contantes (tabelnamen die afhankelijk zijn van de gekozen taal en dat soort dingen). Als ik dat blok code commenteer, dan gebeurd er wat anders met de site. Ik vat niet echt wat er allemaal gebeurd, maar in iedergeval geen wit scherm. Dus heb ik van alle defines gewoon variabelen gemaakt en voila: .... geen resultaat .... gewoon weer een wit scherm! |:(

Die defines zijn blijkbaar ook niet het probleem. Als ze niet meer bestaan, dan gebeuren er andere dingen omdat paden ed. niet meer kloppen. Ik vat 't niet meer.

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Zet eens:

PHP:
1
error_reporting(E_ALL);


bovenin je script; mogelijk wordt er ergens al output gestuurd naar de browser voordat hij bij de header komt, en staat je error_reporting te laag om een warning te zien; dit heeft namelijk ook het effect dat ik alleen een leeg scherm krijg (de punt is een enter, een spatie of wat dan ook):

PHP:
1
2
3
4
5
6
7
8
.
<?php

error_reporting(0);

header('location: index.html');

?>

[ Voor 4% gewijzigd door crisp op 02-06-2003 22:43 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Dat had ik al geprobeerd, maar er was helemaal geen output. Vreemd genoeg lokaal wel: een paar meldingen bij de defines van de constanten (ze waren niet gedefinieerd - hoezo nuttige info? :? )

Kijk, het feit dat er niks over dit probleem te vinden is, doet me vermoeden dat het niks met de redirection te maken heeft. De test scriptjes werken ook. Toch klopt er iets niet. Maar ik weet niet of iemand me een hint kan geven, zonder dat ik code post. Toch bedankt voor de tips zo ver en als er nog meer zinnige opmerkingen zijn, dan hoor ik dat graag.

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Uit het commentaar van de manual:
You might need to call session_write_close() prior to a header() call to redirect IF you're using CGI rather than a module. We ran into this problem when we migrated an application from our server (Running the PHP Apache module) to another server (Running the CGI version).
Werkt het dan?

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
...Dat leek de gouden tip. Helaas lijkt het niet veel uit te maken. Ik ga hier nog even de manual op napluizen, want dit moet toch de richting zijn waarin de oplossing te vinden is, denk ik.

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Nog effe: ik kan nog steeds geen fatsoenlijke oplossing vinden voor dit probleem. Ik heb php's header statement inmiddels vervangen voor een wazig lijntje javascript en dat werkt. Ben niet echt tevreden met deze oplossing, maar een mens moet wat... het werkt in iedergeval.

Probleem ligt dus in iedergeval duidelijk bij 't header statement... Hier moet toch een reden voor zijn?

Btw: Ik heb zitten klooien met session_write_close(), cache_delimiter, etc... doet allemaal niks.

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

hardcoded:

PHP:
1
header('location: http://www.host.com/dir/');


werkt ook niet?
en eventueel met een filenaam erachter ook niet?
PHP buglist bekeken?
(word echt wild gokken zo ;) )

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Officieel is de location header met een hoofdletter L. Zie http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html. Nou zal dat waarschijnlijk niet het probleem zijn, want zoals ik het laatst een keer las "modern browsers will let you get away with murder". Misschien toch maar eens met een hoofdletter proberen? Heb je al een packet sniffer gebruikt? Of nog simpeler, een telnet-sessie geopend om te zien wat voor output je krijgt?

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Nee, header weigert...

Zie hier voor het uiteindelijke resultaat (snap je gelijk waarom ik graag wou dat 't opgelost werd :) ).

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
bigtree schreef op 03 June 2003 @ 01:04:
Officieel is de location header met een hoofdletter L. Zie http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html. Nou zal dat waarschijnlijk niet het probleem zijn, want zoals ik het laatst een keer las "modern browsers will let you get away with murder". Misschien toch maar eens met een hoofdletter proberen? Heb je al een packet sniffer gebruikt? Of nog simpeler, een telnet-sessie geopend om te zien wat voor output je krijgt?
Ah, de hacker-toer... en ik dacht al dat ik aardig op gang was. Nee, ik heb nog geen packet-sniffer of telnet gebruikt. Location met hoofdletter L heb ik al wel geprobeerd, maar daar zat 't 'm niet in.

Hoe werkt telnet ook al weer met een webserver? Ben 't effe kwijt. Een packet-sniffer heb ik niet, maar ik zoek al jaren een goede. Heb je d'r 1?

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • Kwai_gon_jinn
  • Registratie: Januari 2001
  • Niet online

Kwai_gon_jinn

[-geen icon-]

'k weet niet hoe je script eruit ziet maar heb je ook aangedacht van de plaatsing van je "header()".
daarmee bedoel ik.. je verstuurd eerst een header naar de browser toe van wat voor soort "content-type" het is alvorens de pagina wordt opgebouwd.
wat mij dus enkele keren gebeurd is dat ik errors kreeg en niet werd redirect.. bleek dat ik de header() te laat naar de browser stuurde.. dus als ware eerste een html header verstuurde en dan later een redirect header m.b.v. PHP.
Dat wil soms wel lukken zelfs met errors alleen uit mijn ervaring struikeld hij met sessies..
maar als het netjes met javascript werkt zou ik het zo laten.. en om het nog netter te maken zou ik het met een meta content refresh tag gaan werken, aangezien niet elke browser javascript aan heeft staan.

Confucius said: "In ancient time, learning was for self. Nowadays learning is for others."


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

packet sniffer: ethereal
bij telnet moet je het volgende intypen:
code:
1
2
open www.website.land 80
GET


En jouw probleem zelf zou ik geen oplossing op weten. Maar wat doet het nu precies niet op je site? Bij mij doet hij het gewoon :? (dwz, eerst een taalkeuze, klik op NL vlag, en krijg een site met menu etc)

edit:
zo te zien doe ik iets fout met telnet, krijg als tekst: method not implemented :( Maar een oplossing is heel simpel: GET in hoofdletters zonder tekst gebruiken 8)7.
er stond dus eerst: get index.html

Helaas, hij heeft door dat je browser te oud is (duh). Toch maar ethereal downloaden :)

[ Voor 36% gewijzigd door MBV op 03-06-2003 10:19 ]


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Als ik dat probeer met Telnet, dan krijg ik een of andere pagina van InterNLNet - de provider - die meldt dat de pagina niet bestaat...

Ethereal ken ik wel, volgens mij, maar ik kwam er niet uit.

Ennuh, natuurlijk zorg ik er voor dat er niet eerst output naar de client wordt gestuurd voordat er een header wordt gestuurd. Zoals ik eerder al zei: op de lokale server werkt 't header statement wel goed en error_reporting(E_ALL) ook.

Hoe dan ook, de website www.vandiepen.com werkt nu dus inderdaad, mbv. een lijntje javascript. Wel een goed punt om daar een meta-tag van te maken. Zal es kijken...

En toch vraag ik me nog steeds af waarom de redirect met header niet werkt. Ook vraag ik me af waarom ik altijd tegen dit soort idiote problemen aanloop. :|

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

If al else fails read the instructions... CHECK
what's next? :+

Ehtereal werkt vrij eenvoudig. als je windows draait moet je ethereal downloaden, alsmede de driver downloaden. beide installeren, ethereal starten, vervolgens crtl+k rammen. bovenste filter port 80 invullen, en gaan met die banaan.

edit:
ik snap nu waarom hij aangeeft dat hij de site niet kan vinden met telnet. Mozilla geeft netjes een site door.
een packet om deze site te zien:
[code]
Host: gathering.tweakers.net
User-Agent:Mozilla/5.0 (windows........) Gecko/20030312
Accept: ...........
Referer: http://gathering.tweakers.net/.......
[/code]
Om de packets te zien, moet je eerst op stop drukken. wil je het iets leesbaarder te zien, klik dan rechts op een packet, en dan op "follow tcp-stream"

Suc6

[ Voor 45% gewijzigd door MBV op 03-06-2003 11:45 . Reden: ook nog even de links laten werken :( ]


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ohja, ik zie 't. Ethereal is toch iets anders dan dat programma wat ik ooit heb gehad. Deze is wat simpeler. Heel geinig. Thanks!

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

misschien heb jij wel versie 0.0.1 gehad o.i.d.
het bestaat al vrij lang, maar ze zijn nog maar bij 0.9.12 :O

Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
't Programma wat ik ooit heb gehad had ook grafische statistieken enzo. Ik dacht dat het Ethereal was, maar 't zal wel een ander programma zijn. Hm.... Etherpeek wellicht?

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:43
Mozilla is ideaal voor dit soort debugwerk, vanwege de Live HTTP Headers functionaliteit.

Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 21-09 08:47

Eelke Spaak

- Vlad -

Je moet ervoor zorgen dat de pagina waarin geredirect wordt niet al iets van content terugstuurt naar de browser. Zo gauw er namelijk ook maar één character wordt verstuurd worden headers al niet meer toegevoegd aan de server-response.

En voor telnet (de gewone windows-telnet): in een commandprompt "telnet www.server.com 80" typen; dan zit je in telnet. Dan "GET /url.php HTTP/1.0" typen en 2x op enter duwen. Als het goed is krijg je nu de response van de server te zien.

TheStreme - Share anything with anyone


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Mozilla 1.4 RC1 heeft nog niks met Live HTTP Headers. Wanneer komt dat erin of in welke versie kan ik dat vinden? Mozilla's Tools blijven overigens subliem! Ik hoop niet dat ze er mee stoppen, want daar kan geen enkele andere browser aan tippen.

Ennuh, als ik telnet naar de website, dan krijg ik een melding van InterNLNet - wel inclusief headers, maar die zijn dus nutteloos.

Heeft er nog niemand een oplossing voor het header-redirect probleem? De huidige oplossing (javascript location.href en meta-tag combinatie) werkt wel, maar is allerminst elegant of efficient te noemen.

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

Verwijderd

Hopelijk heeft de topic starter al een ander en deftigere oplossing gevonden
dan zijn meta of javascript ...

Ik zit met helemaal hetzelfde probleem.

Werkt lokaal perfect maar op de webhost niet meer.
Ik krijg ook een witte pagina zonder fout.
Er komen geen error's in mijn error-log binnen.

Dat redirecten kan toch zo complex niet zijn?
Ik kan me niet voorstellen dat iedereen zo'n slordige code
moet schrijven in php om te kunnen doorsturen naar een
andere pagina.

Mijn redirect gaat als volgt...

PHP:
1
2
3
4
   session_write_close();
   $URL = $root . $taal . "/intrest.php";
   header ("Location : $URL");
   exit();


DE $URL bevat wel degelijk de juiste absolute URL!
Als ik na de header een echo "tekst" beeld hij deze af
op de anders zo lege en witte website, alsof de header er
gewoon niet stond.

Ik heb ook een klein scriptje in elkaar geplooid om de header
functie te testen en daar lukt het WEL.

Ik heb ondertussen al alle dingen geprobeerd die hier op stonden!
Allemaal zonder resultaat.

Met het toevoegen van echo "tekst" heb ik mijn code al opgevolgd
of deze wel degelijk de weg volgt die het moet volgen en alles klopt
maar er wordt blijkbaar gewoon over de header()-functie gesprongen.

Deze topic is al wat oud, maar hopelijk hebben er enkel ondertussen al wat bijgeleerd :-)

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Je kan beter een nieuw topic openen met een verwijzing naar dit topic :) Ik verwacht anders dat er een en ander aan discussies door elkaar gaan lopen, waardoor je een rommelig iets krijgt. Men gaat op anderen reageren van meer dan een jaar terug (die niet meer reageren) en hier ben je niet bij geholpen :)

Vandaar een slotje :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1

Dit topic is gesloten.