[PHP] problemen met header

Pagina: 1
Acties:
  • 110 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • atze
  • Registratie: Mei 2003
  • Laatst online: 09-03-2023
Hallo iedereen,

Ik heb hieronder een scriptje staan dat een textbox (value 'data') die al in xml is opgemaakt schrijft naar een .xml bestand en tergelijk ook nog een backup van de oude maakt. Na deze actie zou hij weer terug moeten gaan naar de oude pagina. Helaas blijft hij dus haken in het script, de redirect werkt niet. Nu weet ik dat er voor een header nooit html code make staan, dit staat er ook niet.
ik heb ook al geprobeerd om
PHP:
1
<?php header("Location: control.php");?>
te proberen, maar dit werkt helaas ook niet.
Iemand enig idee wat hier de fout is, of hoe ik er voor kan zorgen dat hij toch gewoon redirect?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//Start op writing total XML file
if ($_POST["todo"]=="writexml") {
    $filename = $_POST["filename"];
    $data = $_POST["data"];
    //Createbackup
    $date = getdate();
    $backup = $filename.$date['year'].$date['mon'].$date['mday'].$date['hours'].$date['minutes'].$date['seconds'].".bac";
    copy($filename,$backup);
    
    $handle = fopen($filename, 'w');
    fwrite($handle,$data);
    fclose($handle);
    //Vanaf hier dus een probleem waarom redirect hij gewoon niet
    header("Refresh: 2; control.php");
    //print "<a href=\"control.php\">Done, go back</a>";
}//End of writing total XML file    
?>

[ Voor 11% gewijzigd door atze op 14-07-2005 17:59 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Er staat daarna zeker nog meer code?
Het beste kan je je script stoppen na een redirect:

PHP:
1
2
header("Refresh: 2; http://bla/control.php");
exit;


en afaik moet je met een redirect altijd de volledige URL geven.

Acties:
  • 0 Henk 'm!

  • atze
  • Registratie: Mei 2003
  • Laatst online: 09-03-2023
Daarna staat geen code meer, en ik heb ook geprobleerd om de voldige html (ookal werkt het ergens anders wel goed met een relative link) in te vullen en helaas werkt dit ook niet

Acties:
  • 0 Henk 'm!

  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 10-02 23:00
Code na header kan geen kwaad, juist handig om bijvoorbeeld tekst te zetten in je browser. Wél belangrijk is dat je nog geen tekst naar je browser hebt gestuurd voordat je de header stuurt.

Doe ook even error_reporting(E_ALL); bovenaan zetten in je script. Je krijgt dan ook een foutmelding als je de headers te vroeg stuurt als het goed is.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

pierre-oord schreef op donderdag 14 juli 2005 @ 18:11:
Code na header kan geen kwaad, juist handig om bijvoorbeeld tekst te zetten in je browser. Wél belangrijk is dat je nog geen tekst naar je browser hebt gestuurd voordat je de header stuurt.
ehm, juist _geen_ code/output na een refresh/location header.
Doe ook even error_reporting(E_ALL); bovenaan zetten in je script. Je krijgt dan ook een foutmelding als je de headers te vroeg stuurt als het goed is.
offtopic:
* Erkens gaat er eik altijd vanuit dat mensen kunnen debuggen :X
atze schreef op donderdag 14 juli 2005 @ 18:08:
Daarna staat geen code meer, en ik heb ook geprobleerd om de voldige html (ookal werkt het ergens anders wel goed met een relative link) in te vullen en helaas werkt dit ook niet
ehm 'volledige html' :? bedoel je soms de URL hier of snap ik je niet?
offtopic:
als iets werkt betekend dat niet dat het altijd ook correct is, zie MSIE bijvoorbeeld :X

Acties:
  • 0 Henk 'm!

  • atze
  • Registratie: Mei 2003
  • Laatst online: 09-03-2023
ehm 'volledige html' :? bedoel je soms de URL hier of snap ik je niet?
offtopic:
als iets werkt betekend dat niet dat het altijd ook correct is, zie MSIE bijvoorbeeld :X
Sorry was idd beetje vaag, bedoelde de url.

Ik heb ook ff de error reporting aan gezet, maar die geeft helemaal niets aan. Je ziet gewoon een witte pagina en de page-source is ook helemaal leeg

[ Voor 27% gewijzigd door atze op 14-07-2005 18:20 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

atze schreef op donderdag 14 juli 2005 @ 18:17:
[...]


Sorry was idd beetje vaag, bedoelde de url.

Ik heb ook ff de error reporting aan gezet, maar die geeft helemaal niets aan. Je ziet gewoon een witte pagina en de page-source is ook helemaal leeg
en welke headers worden daadwerkelijk gestuurd?
(kan je zien met bijvoorbeeld de livehttp extension van firefox, maar ook met tal van andere stukken software)

Acties:
  • 0 Henk 'm!

  • atze
  • Registratie: Mei 2003
  • Laatst online: 09-03-2023
hierzo de header met livehttp
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
https://www.strw.leidenuniv.nl/~atze/v4/write.php

POST /~atze/v4/write.php HTTP/1.1
Host: www.strw.leidenuniv.nl
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: https://www.strw.leidenuniv.nl/~atze/v4/control.php?view=editnewsxml
Cookie: controlroom=thersites
Content-Type: application/x-www-form-urlencoded
Content-Length: 1938
data=%3Cthersites%3E%0D%0A%09%3Cnews%3E%0D%0A%09%09%3Cyear%3E2005%3C%2Fyear%3E%0D%0A%09%09%3Cmonth%3E7%3C%2Fmonth%3E%0D%0A%09%09%3Cday%3E8%3C%2Fday%3E%0D%0A%09%09%3Cauthor%3EAtze%3C%2Fauthor%3E%0D%0A%09%09%3Ctitle%3ENieuwe+site%3C%2Ftitle%3E%0D%0A%09%09%3Cmessage%3EHallo+allen%2C+dit+is+dus+de%2Feen+nieuwe+site+voor+thersites%2C+ik+hoop+dat+jullie+hem+mooi+vinden.%3C%2Fmessage%3E%0D%0A%09%3C%2Fnews%3E%0D%0A%09%3Cnews%3E%0D%0A%09%09%3Cyear%3E2005%3C%2Fyear%3E%0D%0A%09%09%3Cmonth%3E7%3C%2Fmonth%3E%0D%0A%09%09%3Cday%3E8%3C%2Fday%3E%0D%0A%09%09%3Cauthor%3EAtze%3C%2Fauthor%3E%0D%0A%09%09%3Ctitle%3EFotos+Berlijn%3C%2Ftitle%3E%0D%0A%09%09%3Cmessage%3EDe+fotos+die+door+Simon+zijn+gemaakt+staan+nu+online%2C+kijk+bij+fotoboek%21%3C%2Fmessage%3E%0D%0A%09%3C%2Fnews%3E%0D%0A%09%3Cnews%3E%0D%0A%09%09%3Cyear%3E2005%3C%2Fyear%3E%0D%0A%09%09%3Cmonth%3E7%3C%2Fmonth%3E%0D%0A%09%09%3Cday%3E8%3C%2Fday%3E%0D%0A%09%09%3Cauthor%3EAtze%3C%2Fauthor%3E%0D%0A%09%09%3Ctitle%3EAgenda+online%3C%2Ftitle%3E%0D%0A%09%09%3Cmessage%3EDe+agenda+doet+het+nu+ook%21%3C%2Fmessage%3E%0D%0A%09%3C%2Fnews%3E%0D%0A%09%3Cnews%3E%0D%0A%09%09%3Cyear%3E2005%3C%2Fyear%3E%0D%0A%09%09%3Cmonth%3E7%3C%2Fmonth%3E%0D%0A%09%09%3Cday%3E11%3C%2Fday%3E%0D%0A%09%09%3Ctitle%3ENog+meer+fotos+en+videos%3C%2Ftitle%3E%0D%0A%09%09%3Cauthor%3EAtze%3C%2Fauthor%3E%0D%0A%09%09%3Cmessage%3EDe+fotos+die+door+Wieneke+zijn+gemaakt+tijdens+de+berijnreis+staat+nu+ook+op+de+site%3C%2Fmessage%3E%0D%0A%09%3C%2Fnews%3E%0D%0A%09%3Cnews%3E%0D%0A%09%09%3Cyear%3E2005%3C%2Fyear%3E%0D%0A%09%09%3Cmonth%3E7%3C%2Fmonth%3E%0D%0A%09%09%3Cday%3E14%3C%2Fday%3E%0D%0A%09%09%3Ctitle%3EFotos+van+Arjan+toegevoegd%3C%2Ftitle%3E%0D%0A%09%09%3Cauthor%3EAtze%3C%2Fauthor%3E%0D%0A%09%09%3Cmessage%3EFotos+die+door+Arjan+zijn+gemaakt+tijdens+enkele+dispuutavonden+zijn+ook+online%2C+duzz+snel+naar+het+fotoboek%21%3C%2Fmessage%3E%0D%0A%09%3C%2Fnews%3E%0D%0A%3C%2Fthersites%3E&todo=writexml&filename=data%2Fnews.xml
HTTP/1.x 200 OK
Date: Thu, 14 Jul 2005 16:34:33 GMT
Server: Apache/2.0.52 (Fedora)
X-Powered-By: PHP/4.3.11
Content-Length: 3
Connection: close
Content-Type: text/html; charset=ISO-8859-1
----------------------------------------------------------

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Erkens schreef op donderdag 14 juli 2005 @ 18:14:
ehm, juist _geen_ code/output na een refresh/location header.
Waarom niet? Maakt helemaal niks uit. Of het zinnig is, is een tweede, aangezien je toch meteen doorgestuurd wordt. :P
offtopic:
als iets werkt betekend dat niet dat het altijd ook correct is, zie MSIE bijvoorbeeld :X
Dat is waar, maar aan de andere kant ken ik persoonlijk geen enkele browser die niet overweg kan met relatieve URL's in location headers. Lijkt me dus niet zo'n probleem hier. :)

@atze: heb je ook geen enters of spaties voor je <? tag staan?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

-NMe- schreef op donderdag 14 juli 2005 @ 18:41:
[...]

Waarom niet? Maakt helemaal niks uit. Of het zinnig is, is een tweede, aangezien je toch meteen doorgestuurd wordt. :P
sorry, ik zat fout, met een refresh wil je natuurlijk _wel_ output hebben 8)7
na een redirect is het niet verstandig om erna nog code uit te voeren.
Dat is waar, maar aan de andere kant ken ik persoonlijk geen enkele browser die niet overweg kan met relatieve URL's in location headers. Lijkt me dus niet zo'n probleem hier. :)
ik ken zo ook geen browsers, maar waarom niet gewoon correct werken, dan weet je tenminste "zeker" dat het ook in de toekomst gewoon goed werkt ;)

Acties:
  • 0 Henk 'm!

  • atze
  • Registratie: Mei 2003
  • Laatst online: 09-03-2023
nope geen spaties of enters,

dit is trouwens de volledige code
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
include("functions.php");
error_reporting(E_ALL);

//Start writing Agenda
if ($_POST["todo"]=="agenda") {
    $output = xml_fetch("data/agenda.xml");

    //Getting Data from sumbitform
    $xml_data = array(
        "year" => $_POST["year"],
        "month" => $_POST["month"],
        "time" => $_POST["time"],
        "day" => $_POST["day"],
        "what" => $_POST["what"],
        "where" => $_POST["where"],
        "info" => $_POST["info"]
    );

    //Creating correct array
    $xml_array = $output['item'];
    $xml_array[count($xml_array)] = $xml_data;
    xml_put($xml_array,"thersites","item","data/agenda.xml");
    header("Location: control.php");
}//End of writing Agenda

//Start writing News
if ($_POST["todo"]=="news") {
    $output = xml_fetch("data/news.xml");
    $today = getdate();
    
    //Putting Data in an array
    $xml_data = array(
        "year" => $today['year'],
        "month" => $today['mon'],
        "day" => $today["mday"],
        "title" => strip_tags($_POST["title"]),
        "author" => strip_tags($_POST["author"]),
        "message" => strip_tags($_POST["news"] )
    );

    //Creating correct array
    $xml_array = $output['news'];
    $xml_array[count($xml_array)] = $xml_data;
    xml_put($xml_array,"thersites","news","data/news.xml");
    header("Location: control.php");
}//End of writing News

//Start op writing total XML file
if ($_POST["todo"]=="writexml") {
    $filename = $_POST["filename"];
    $data = $_POST["data"];
    //Createbackup
    $date = getdate();
    $backup = $filename.$date['year'].$date['mon'].$date['mday'].$date['hours'].$date['minutes'].$date['seconds'].".bac";
    copy($filename,$backup);
    
    $handle = fopen($filename, 'w');
    fwrite($handle,$data);
    fclose($handle);
    
    header("Refresh: 2; control.php");
    //print "<a href=\"control.php\">Done, go back</a>";
}//End of writing total XML file    
?>

Acties:
  • 0 Henk 'm!

  • DirkT
  • Registratie: Juli 2002
  • Niet online

DirkT

toet

kijk eens of je schrijf actie wel goed gaat, ofwel haal even de header() eruit en print het result wat fwrite terug geeft, indien het namelijk false of 0 is dan gaat het daar misschien al fout. anders krijg je gewoon het aantal bytes wat is geschreven door.

ik neem even aan dat $_POST['data'] gevuld is met normale tekst oid

edit:
dat returnen kan je dus met de andere functies zoals copy ook doen. altijd volledig debuggen voordat je begint te vragen ;)

[ Voor 20% gewijzigd door DirkT op 15-07-2005 04:10 ]

iRacing profiel - FanaLEDs voor je racesimulatie displays en meer!


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Dit probleem ben ik al vaker tegen gekomen. Heeft meestal te maken met al eerdere output naar de browser door het script. Ik dus idd zoals SantjeS al zegt even checken of alle acties ervoor wel goed uitgevoerd worden en er niets blijft hangen.

Verder klopt de syntax van je header niet, deze hoort volgens php.net als volgt ze zijn:

PHP:
1
header("Refresh: 2; URL=http://www.php.net");


Dus even URL= toevoegen.

Acties:
  • 0 Henk 'm!

  • atze
  • Registratie: Mei 2003
  • Laatst online: 09-03-2023
hey iedereen,

Ik heb het probleem inmiddes gevonden, er stond aan het einde van functions.php nog twee lege witregels, die veroozaakten het probleem
thnx voor alle hulp iig
greetinx
Atze

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

atze schreef op vrijdag 15 juli 2005 @ 13:57:
hey iedereen,

Ik heb het probleem inmiddes gevonden, er stond aan het einde van functions.php nog twee lege witregels, die veroozaakten het probleem
thnx voor alle hulp iig
greetinx
Atze
dat kan nooit het probleem geweest zijn, eerder wat boven jouw post geschreven is ;)
immers met een refresh header moet je eigenlijk nog wel gewoon content hebben, anders moet je de 'location' header gebruiken.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Erkens schreef op vrijdag 15 juli 2005 @ 14:04:
dat kan nooit het probleem geweest zijn, eerder wat boven jouw post geschreven is ;)
immers met een refresh header moet je eigenlijk nog wel gewoon content hebben, anders moet je de 'location' header gebruiken.
Och, de hoeveelheid content is niet zo relevant. Wel relevant is dat er geen content voor de headers opgestuurd werd ;)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ACM schreef op vrijdag 15 juli 2005 @ 14:26:
[...]

Och, de hoeveelheid content is niet zo relevant. Wel relevant is dat er geen content voor de headers opgestuurd werd ;)
ow wacht even, die file werd geinclude 8)7
even overheen gelezen :P

Maar volgens mij moet je met een refresh header wel content geven, anders is er weinig te refreshen lijkt me :?

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Erkens schreef op vrijdag 15 juli 2005 @ 14:34:
Maar volgens mij moet je met een refresh header wel content geven, anders is er weinig te refreshen lijkt me :?
Moet, lijkt me niet. Aanbevolen, zinloos om niet te doen, etc. Dat vast wel :P

Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

atze schreef op vrijdag 15 juli 2005 @ 13:57:
hey iedereen,

Ik heb het probleem inmiddes gevonden, er stond aan het einde van functions.php nog twee lege witregels, die veroozaakten het probleem
thnx voor alle hulp iig
greetinx
Atze
Alles stukjes vallen nu op zijn plaats... Meneer Atze had even in de php.ini de "display_errors" op On moeten zetten en de error_reporting op E_ALL. Nu werd de error_reporting pas gestart na de include met lege witregels...

@Erkens
Het levert wel degelijk een parse error op wanneer je lege wit regels (meestal voor de <?php ) hebt staan. Heb dit zelf ook eens aan de lijve mogen ondervinden

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

dayoman schreef op vrijdag 15 juli 2005 @ 15:42:
@Erkens
Het levert wel degelijk een parse error op wanneer je lege wit regels (meestal voor de <?php ) hebt staan. Heb dit zelf ook eens aan de lijve mogen ondervinden
parse errors? lijkt me erg sterk :o
Maar je mag best tekst/wit regels voor je PHP code hebben, alleen werken over het algmeen (als output buffering dus uit staat) extra headers en cookies etc niet, daarover zal je een warning krijgen als ik me niet vergis.

Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Erkens schreef op vrijdag 15 juli 2005 @ 16:01:
[...]

parse errors? lijkt me erg sterk :o
Maar je mag best tekst/wit regels voor je PHP code hebben, alleen werken over het algmeen (als output buffering dus uit staat) extra headers en cookies etc niet, daarover zal je een warning krijgen als ik me niet vergis.
:X Alles wat onder E_WARNING - E_STRICT valt vind ik een soortement van parse error...

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

dayoman schreef op vrijdag 15 juli 2005 @ 17:06:
[...]


:X Alles wat onder E_WARNING - E_STRICT valt vind ik een soortement van parse error...
Volgens mij is er dan toch echt iets mis met jouw kennis als je een warning vergelijkt met een parse error.
Een E_PARSE krijg je als je code niet aan de juiste syntax voldoet (bijvoorbeeld een haakje te weinig) waarna je script niet eens gestart wordt.
Een E_WARNING krijg je als bijvoorbeeld een actie niet uitgevoerd kan worden maar het script wel verder kan zoals bijvoorbeeld een header die niet verstuurd kan worden en wat niet de rest van het script beinvloed.
Meteen even doorgaan naar de E_NOTICE, deze krijg je als er mogelijk een fout opgetreden is maar ook hier kan het script gewoon verder gaan (bijvoorbeeld een variabele aanspreken die niet bestaat, je krijgt dan de standaard waarde)
Ook een normale E_ERROR is echt wat anders dan een E_PARSE, bij een E_ERROR is er een fatale fout opgetreden waarna de uitvoer van het script gestaakt is, bijvoorbeeld als er te weinig geheugen is om verder te gaan.

meer info

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik herinner me een beta versie van Firefox die niet de location header opvolgde als er geen content werd verstuurd na de headers (het kan dus wel eens handig zijn.).

[ Voor 13% gewijzigd door Grijze Vos op 16-07-2005 04:24 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Grijze Vos schreef op zaterdag 16 juli 2005 @ 04:24:
Ik herinner me een beta versie van Firefox die niet de location header opvolgde als er geen content werd verstuurd na de headers (het kan dus wel eens handig zijn.).
dat is dus een bug in die browser en zeker als het een beta is hoef je daar geen rekening mee te houden. Want die location header zorgt ervoor dat je naar de juiste plek gestuurd wordt, immers je redirect op dat moment naar de content.

http://www.w3.org/Protoco...c2616-sec14.html#sec14.30

Acties:
  • 0 Henk 'm!

  • dEUSdude
  • Registratie: Juni 2002
  • Niet online
Hier had ik afgelopen week ook 'last' van.

Dit werkte bij mij i.i.g.:
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
Note: As of PHP 4, you can use output buffering to get around this problem, with the overhead of all of your output to the browser being buffered in the server until you send it. You can do this by calling ob_start() and ob_end_flush() in your script, or setting the output_buffering configuration directive on in your php.ini or server configuration files.
Alle informatie is ook te vinden op: http://nl3.php.net/manual/en/function.header.php
Pagina: 1