Bekijk Volledige Versie : [PHP] header (location ...) werkt niet
Ik ben nieuw op het gebied van PHP en kom ergens niet uit en heb alles
al uitgebrobeerd en uitgezocht, maar kom er niet uit.
Ik heb aan het begin van een pagina een script staan dat er voor moet
zorgen dat de eerste 15 bezoekers naar een andere pagina moeten worden
doorgestuurd:
<?php
$fp = fopen("counter.txt", "r+") or die("'Counter foutmelding'");
flock($fp, LOCK_EX);
$count = fread($fp, 10);
rewind($fp);
fwrite($fp, ++$count);
flock($fp, LOCK_UN);
fclose($fp);
if ($count < 16) {
header("Location: http://www.frankrijkvakantieland.nl");
exit;
}
?>
De teller $count wordt met 1 verhoogd bij elk bezoek aan de pagina. Dit
werkt want als ik na het if statement print ($count); zet wordt de
teller keurig afgedrukt als de teller <16.
Alleen header("Location: http://www.frankrijkvakantieland.nl"); wordt
niet uitgevoerd.
Waar kan dit aan liggen? PHP werkt overigens normaal op de site.
--
Ruud Couwenhoven
www.frankrijkvakantieland.nl
De site over het andere Frankrijk die op CD-Rom verder gaat
Rene Pijlman
10/05/05, 18:05
Ruud:
>Alleen header("Location: http://www.frankrijkvakantieland.nl"); wordt
>niet uitgevoerd.
>
>Waar kan dit aan liggen?
"The second special case is the "Location:" header. Not only does it send
this header back to the browser, but it also returns a REDIRECT (302)
status code to the browser unless some 3xx status code has already been
set."
http://nl2.php.net/header
'unless' is altijd een gevaarlijk woord.
De logische vervolgstap in het debugproces is naar de feitelijke
HTTP-headers kijken die de client ontvangt.
En foutafhandeling toevoegen aan de file handling natuurlijk.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
John Bokma
10/05/05, 18:55
Ruud wrote:
> Ik ben nieuw op het gebied van PHP en kom ergens niet uit en heb alles
> al uitgebrobeerd en uitgezocht, maar kom er niet uit.
>
> Ik heb aan het begin van een pagina een script staan dat er voor moet
> zorgen dat de eerste 15 bezoekers naar een andere pagina moeten worden
> doorgestuurd:
>
> <?php
>
> $fp = fopen("counter.txt", "r+") or die("'Counter foutmelding'");
> flock($fp, LOCK_EX);
> $count = fread($fp, 10);
> rewind($fp);
> fwrite($fp, ++$count);
> flock($fp, LOCK_UN);
> fclose($fp);
> if ($count < 16) {
> header("Location: http://www.frankrijkvakantieland.nl");
> exit;
> }
>
> ?>
>
> De teller $count wordt met 1 verhoogd bij elk bezoek aan de pagina.
> Dit werkt want als ik na het if statement print ($count); zet wordt de
> teller keurig afgedrukt als de teller <16.
>
> Alleen header("Location: http://www.frankrijkvakantieland.nl"); wordt
> niet uitgevoerd.
>
> Waar kan dit aan liggen? PHP werkt overigens normaal op de site.
breng het eens terug tot:
<?php header("Location: http://www.frankrijkvakantieland.nl/") ?>
Let op: de / aan het einde voorkomt mogelijk een extra interne rewrite
van Apache, maar is vast niet de oorzaak van je probleem.
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
John Bokma <john@castleamber.com> wrote:
> Ruud wrote:
>
> > Ik ben nieuw op het gebied van PHP en kom ergens niet uit en heb alles
> > al uitgebrobeerd en uitgezocht, maar kom er niet uit.
> >
> > Ik heb aan het begin van een pagina een script staan dat er voor moet
> > zorgen dat de eerste 15 bezoekers naar een andere pagina moeten worden
> > doorgestuurd:
> >
> > <?php
> >
> > $fp = fopen("counter.txt", "r+") or die("'Counter foutmelding'");
> > flock($fp, LOCK_EX);
> > $count = fread($fp, 10);
> > rewind($fp);
> > fwrite($fp, ++$count);
> > flock($fp, LOCK_UN);
> > fclose($fp);
> > if ($count < 16) {
> > header("Location: http://www.frankrijkvakantieland.nl");
> > exit;
> > }
> >
> > ?>
> >
> > De teller $count wordt met 1 verhoogd bij elk bezoek aan de pagina.
> > Dit werkt want als ik na het if statement print ($count); zet wordt de
> > teller keurig afgedrukt als de teller <16.
> >
> > Alleen header("Location: http://www.frankrijkvakantieland.nl"); wordt
> > niet uitgevoerd.
> >
> > Waar kan dit aan liggen? PHP werkt overigens normaal op de site.
>
> breng het eens terug tot:
>
> <?php header("Location: http://www.frankrijkvakantieland.nl/") ?>
>
> Let op: de / aan het einde voorkomt mogelijk een extra interne rewrite
> van Apache, maar is vast niet de oorzaak van je probleem.
Dat werkt helaas ook niet. Is er niet een andere manier om naar een
nieuwe pagina te gaan?
--
Ruud Couwenhoven
www.frankrijkvakantieland.nl
De site over het andere Frankrijk die op CD-Rom verder gaat
John Bokma
10/05/05, 19:15
Ruud wrote:
> John Bokma <john@castleamber.com> wrote:
>
>> Ruud wrote:
>>
>> > Ik ben nieuw op het gebied van PHP en kom ergens niet uit en heb
>> > alles al uitgebrobeerd en uitgezocht, maar kom er niet uit.
>> >
>> > Ik heb aan het begin van een pagina een script staan dat er voor
>> > moet zorgen dat de eerste 15 bezoekers naar een andere pagina
>> > moeten worden doorgestuurd:
>> >
>> > <?php
>> >
>> > $fp = fopen("counter.txt", "r+") or die("'Counter
>> > foutmelding'"); flock($fp, LOCK_EX);
>> > $count = fread($fp, 10);
>> > rewind($fp);
>> > fwrite($fp, ++$count);
>> > flock($fp, LOCK_UN);
>> > fclose($fp);
>> > if ($count < 16) {
>> > header("Location: http://www.frankrijkvakantieland.nl");
>> > exit;
>> > }
>> >
>> > ?>
>> >
>> > De teller $count wordt met 1 verhoogd bij elk bezoek aan de pagina.
>> > Dit werkt want als ik na het if statement print ($count); zet wordt
>> > de teller keurig afgedrukt als de teller <16.
>> >
>> > Alleen header("Location: http://www.frankrijkvakantieland.nl");
>> > wordt niet uitgevoerd.
>> >
>> > Waar kan dit aan liggen? PHP werkt overigens normaal op de site.
>>
>> breng het eens terug tot:
>>
>> <?php header("Location: http://www.frankrijkvakantieland.nl/") ?>
>>
>> Let op: de / aan het einde voorkomt mogelijk een extra interne
>> rewrite van Apache, maar is vast niet de oorzaak van je probleem.
>
> Dat werkt helaas ook niet. Is er niet een andere manier om naar een
> nieuwe pagina te gaan?
Ik sluit mij aan bij het advies van Rene, debug de headers. Check ook je
error_log.
Copy de code hieronder naar raw.pl en haal er mee je php script op.
pas de URL regel aan:
use strict;
use warnings;
use LWP::UserAgent;
my $URL = 'http://www.frankrijkvakantieland.nl/foo.php';
my $ua = LWP::UserAgent->new( );
$ua->max_redirect( 0 );
my $request = $ua->get( $URL );
$request->is_success or die $request->status_line;
my @content = split /\n/, $request->as_string;
print $content[ 0 ];
Dit geeft de statuscode.
Je kan ook
print $request->as_string;
doen om alles te zien (ipv print $content[ 0 ]; )
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Jan Ehrhardt
10/05/05, 19:35
Ruud in nl.internet.www.server-side (Tue, 10 May 2005 17:42:49 +0200):
>Ik ben nieuw op het gebied van PHP en kom ergens niet uit en heb alles
>al uitgebrobeerd en uitgezocht, maar kom er niet uit.
>
>Ik heb aan het begin van een pagina een script staan dat er voor moet
>zorgen dat de eerste 15 bezoekers naar een andere pagina moeten worden
>doorgestuurd:
>
> <?php
^^
Als daar spaties staan gaat het al mis. Die "<" moet echt het
allereerste teken op je pagina zijn.
Jan
--
Look, Ma. No tables - http://enbio.steenbergen-stichting.nl/
John Bokma
10/05/05, 20:55
Jan Ehrhardt wrote:
> Ruud in nl.internet.www.server-side (Tue, 10 May 2005 17:42:49 +0200):
>
>>Ik ben nieuw op het gebied van PHP en kom ergens niet uit en heb alles
>>al uitgebrobeerd en uitgezocht, maar kom er niet uit.
>>
>>Ik heb aan het begin van een pagina een script staan dat er voor moet
>>zorgen dat de eerste 15 bezoekers naar een andere pagina moeten worden
>>doorgestuurd:
>>
>> <?php
> ^^
>
> Als daar spaties staan gaat het al mis. Die "<" moet echt het
> allereerste teken op je pagina zijn.
Nooit geweten, en, geen probleem hier (4.3.7)
<h1>geen probleem</h1> <?php echo "<p>test</p>" ?>
werkt
<?php echo "<p>test</p>" ?>
ditto.
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Maarten Wierda
10/05/05, 20:55
John Bokma wrote:
>>> <?php
>>
>> ^^
>>
>> Als daar spaties staan gaat het al mis. Die "<" moet
>> echt het allereerste teken op je pagina zijn.
>
> Nooit geweten, en, geen probleem hier (4.3.7)
>
> <h1>geen probleem</h1> <?php echo "<p>test</p>" ?>
>
> werkt
>
> <?php echo "<p>test</p>" ?>
>
> ditto.
Tuurlijk werkt dat, maar je headers zijn dan wel verzonden.
Toch?
--
Cheers,
Maarten Wierda
Jan Ehrhardt <monitor@idem.invalid> wrote:
> Ruud in nl.internet.www.server-side (Tue, 10 May 2005 17:42:49 +0200):
>
> >Ik ben nieuw op het gebied van PHP en kom ergens niet uit en heb alles
> >al uitgebrobeerd en uitgezocht, maar kom er niet uit.
> >
> >Ik heb aan het begin van een pagina een script staan dat er voor moet
> >zorgen dat de eerste 15 bezoekers naar een andere pagina moeten worden
> >doorgestuurd:
> >
> > <?php
> ^^
>
> Als daar spaties staan gaat het al mis. Die "<" moet echt het
> allereerste teken op je pagina zijn.
>
> Jan
En dat was dus het probleem. Het werkt nu!
ik had de code in tussen de body tags staan.
gewijzigd staat nu als volgt:
<?php
$fp = fopen("counter.txt", "r+") or die("'Counter foutmelding'");
flock($fp, LOCK_EX);
$count = fread($fp, 10);
rewind($fp);
fwrite($fp, ++$count);
flock($fp, LOCK_UN);
fclose($fp);
if ($count >16) {
header("Location: http://www.frankrijkvakantieland.nl/");
exit;
}
?>
<html>
<head>
<title> blablalbalbla etc </title>
</head>
<body>
</html>
Bedankt voor jullie hulp. Ik kan nu verder. Mocht ik nog tegen een
probleem aan lopen dan meldt ik me wel weer.
--
Ruud Couwenhoven
www.frankrijkvakantieland.nl
De site over het andere Frankrijk die op CD-Rom verder gaat
Ronald Klip
10/05/05, 22:05
Ruud schreef:
>
> Bedankt voor jullie hulp. Ik kan nu verder. Mocht ik nog tegen een
> probleem aan lopen dan meldt ik me wel weer.
Laat PHP dan eerst (tijdens het bouwen) alle fouten tonen, bijvoorbeeld
met
error_reporting(E_ALL);
bovenin je script. Scheelt een hoop zoeken.
--
http://www.europese-grondwet.nl/ - opinie en informatie
Jan Ehrhardt
11/05/05, 01:05
Maarten Wierda in nl.internet.www.server-side (Tue, 10 May 2005 20:51:14
+0200):
>John Bokma wrote:
>
>>>> <?php
>>> ^^
>>>
>>> Als daar spaties staan gaat het al mis. Die "<" moet
>>> echt het allereerste teken op je pagina zijn.
>>
>> Nooit geweten, en, geen probleem hier (4.3.7)
>>
>> <h1>geen probleem</h1> <?php echo "<p>test</p>" ?>
>>
>> werkt
>>
>> <?php echo "<p>test</p>" ?>
>>
>> ditto.
>
>Tuurlijk werkt dat, maar je headers zijn dan wel verzonden.
>
>Toch?
Toch!
Jan
--
Look, Ma. No tables - http://enbio.steenbergen-stichting.nl/
John Bokma
11/05/05, 02:55
Maarten Wierda wrote:
> John Bokma wrote:
>
>>>> <?php
>>>
>>> ^^
>>>
>>> Als daar spaties staan gaat het al mis. Die "<" moet
>>> echt het allereerste teken op je pagina zijn.
>>
>> Nooit geweten, en, geen probleem hier (4.3.7)
>>
>> <h1>geen probleem</h1> <?php echo "<p>test</p>" ?>
>>
>> werkt
>>
>> <?php echo "<p>test</p>" ?>
>>
>> ditto.
>
> Tuurlijk werkt dat, maar je headers zijn dan wel verzonden.
>
> Toch?
<?php
header( "Location: http://castleamber.com/" );
?>
Doet het hier ook perfect.
Zelfs:
<h1>bla bla</h1> <?php
echo "<p>Hello, world!</p>";
header( "Location: http://castleamber.com/" );
?>
De laatste:
HTTP/1.1 302 Found
Date: Wed, 11 May 2005 00:49:39 GMT
Server: Apache/1.3.31 (Win32) PHP/4.3.7
X-Powered-By: PHP/4.3.7
Location: http://castleamber.com/
Connection: close
Content-Type: text/html
<h1>bla bla</h1> <p>Hello, world!</p>
te zien met:
use strict;
use warnings;
my $host = 'localhost';
my $url = '/script.php';
use IO::Socket::INET;
my $sock = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => 'http(80)',
Proto => 'tcp'
);
$sock->send( <<"MSG" );
GET $url HTTP/1.0
Host: $host
MSG
my $reply;
$sock->recv( $reply, 16384 );
print $reply;
(NB, wellicht niet het netste script :-) ).
Ik herinner mij vaag iets dat PHP dingen in een buffer stopt, en headers
voorrang geeft. Ik herinner mij nog vager dat dit uit te zetten is.
Wellicht kan de OP de output van het Perl script (aangepast voor de OP's
situatie) posten?
Of even: telnet localhost 80
GET /yourscript.php HTTP/1.0
Host: localhost
(2 x enter na host). Als je geen virtual hosting doet, maar gewoon
direct de boel op localhost hebt hangen, mag de Host: regel vervallen.
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Jan Ehrhardt
11/05/05, 07:35
John Bokma in nl.internet.www.server-side (11 May 2005 00:54:45 GMT):
[post voor de tweede keer een perl-script, terwijl de OP misschien niet
eens de beschikking heeft over perl]
>Ik herinner mij vaag iets dat PHP dingen in een buffer stopt, en headers
>voorrang geeft. Ik herinner mij nog vager dat dit uit te zetten is.
Dat herinner je dan verkeerd. Output-buffering staat standaard uit in
PHP en moet apart aangezet te worden. Dat isover het algemeen niet aan
te raden en werkt slecht programmeren in de hand.
Jan
--
Look, Ma. No tables - http://enbio.steenbergen-stichting.nl/
Branko Collin
11/05/05, 16:55
ruud&marian@geenreclame_frankrijkvakantieland.nl (Ruud), you wrote on
Tue, 10 May 2005 21:37:23 +0200:
>> Als daar spaties staan gaat het al mis. Die "<" moet echt het
>> allereerste teken op je pagina zijn.
>
>En dat was dus het probleem.
Kreeg je geen foutmelding dan? Ik krijg normaal gesproken een melding
dat er al headers verstuurd zijn, en dat 'ie 't niet nog eens wil
doen.
--
Deze geheele aarde door ijzeren banden omspannen, met de
stoomvaartlijnen die als draden over de zeeën zijn getrokken,
Dezen wereldkloot in zijn tuimeling door het heelal breng ik U.
"Grashalmen", Walt Whitman, http://www.gutenberg.org/etext/14281
Ruud schreef:
> Dat werkt helaas ook niet. Is er niet een andere manier om naar een
> nieuwe pagina te gaan?
Ik doe het soms wel eens zo:
function herlaad($url){
echo("<script>document.location.href=\"$url\"</script>");
}
Javascript moet idd ingeschakeld zijn, maar dat is het meestal wel :p
John Bokma
11/05/05, 22:45
Jan Ehrhardt wrote:
> John Bokma in nl.internet.www.server-side (11 May 2005 00:54:45 GMT):
>
> [post voor de tweede keer een perl-script, terwijl de OP misschien niet
> eens de beschikking heeft over perl]
Maar gaf ook een oplossing die gebruik maakt van telnet.
Wat is dit toch Jan, die kruistocht van je? Eerst mijn codeervaardigheden
in twijfel trekken, en vervolgens niks van Perl blijken te weten. Later
trek je een PHP oplossing die ik gaf in twijfel (zou niet werken).
Je bent toch niet stiekem een troll aan het worden?
>>Ik herinner mij vaag iets dat PHP dingen in een buffer stopt, en headers
>>voorrang geeft. Ik herinner mij nog vager dat dit uit te zetten is.
>
> Dat herinner je dan verkeerd. Output-buffering staat standaard uit
Vreemd, het staat hier standaard aan :-) (En ik kan mij niet herinneren dit
met opzet zo gedaan te hebben).
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
On 11 May 2005 20:39:39 GMT, John Bokma <john@castleamber.com> wrote:
> Jan Ehrhardt wrote:
>
>> John Bokma in nl.internet.www.server-side (11 May 2005 00:54:45 GMT):
>>
>> [post voor de tweede keer een perl-script, terwijl de OP misschien niet
>> eens de beschikking heeft over perl]
>
> Maar gaf ook een oplossing die gebruik maakt van telnet.
>
> Wat is dit toch Jan, die kruistocht van je? Eerst mijn codeervaardigheden
> in twijfel trekken, en vervolgens niks van Perl blijken te weten. Later
> trek je een PHP oplossing die ik gaf in twijfel (zou niet werken).
Ik heb al flink wat machines gezien maar in het algemeen werkt header
alleen als er nog geen output naar de browser is geweest, bij php dus.
> Je bent toch niet stiekem een troll aan het worden?
Stel je die vraag nu aan jezelf?
Hans
--
http://blacklist.kernelnewbies.nl
John Bokma
11/05/05, 23:55
Hans wrote:
> Ik heb al flink wat machines gezien maar in het algemeen werkt header
> alleen als er nog geen output naar de browser is geweest, bij php dus.
Merk op dat ik de oplossing niet in twijfel trek, noch trok. Alleen heeft
mijn installatie van PHP er geen moeite mee, wat ik opmerkte. En nee, ik
denk niet dat dit komt omdat ik stiekem output buffering aangezet heb.
>> Je bent toch niet stiekem een troll aan het worden?
>
> Stel je die vraag nu aan jezelf?
Wat denk je?
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html