|
| Stop ved fejl Fra : Jimmy |
Dato : 07-08-03 10:31 |
|
Hej
Jeg har spurgt i .apache uden at få svar og spørger derfor her.
Jeg ønsker at angive - enten i apache eller i toppen af mit php-script - at
enhver fejl er fatal og skal medføre, at scriptets udførsel afbrydes.
Hvordan gøres dette?
Mvh
Jimmy
| |
Johan Holst Nielsen (07-08-2003)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 07-08-03 10:46 |
|
Jimmy wrote:
> Hej
>
> Jeg har spurgt i .apache uden at få svar og spørger derfor her.
>
> Jeg ønsker at angive - enten i apache eller i toppen af mit php-script - at
> enhver fejl er fatal og skal medføre, at scriptets udførsel afbrydes.
>
> Hvordan gøres dette?
Læs lidt her:
http://php.net/errorfunc
mvh
Johan
| |
Jimmy (07-08-2003)
| Kommentar Fra : Jimmy |
Dato : 07-08-03 11:28 |
|
"Johan Holst Nielsen" <johan@weknowthewayout.com> wrote in message
news:3F321FCA.1080806@weknowthewayout.com...
> Jimmy wrote:
> > Hej
> >
> > Jeg har spurgt i .apache uden at få svar og spørger derfor her.
> >
> > Jeg ønsker at angive - enten i apache eller i toppen af mit php-script -
at
> > enhver fejl er fatal og skal medføre, at scriptets udførsel afbrydes.
> >
> > Hvordan gøres dette?
>
> Læs lidt her:
> http://php.net/errorfunc
Super - E_ALL er så lidt i overkanten kan jeg nu se
Mvh
Jimmy
| |
Jesper Brunholm (08-08-2003)
| Kommentar Fra : Jesper Brunholm |
Dato : 08-08-03 10:09 |
|
Jimmy wrote:
>>Læs lidt her:
>> http://php.net/errorfunc
>
> Super - E_ALL er så lidt i overkanten kan jeg nu se
tjah - det smarte er hvis du kan differentiere det til selv at få E_ALL
fejlmeddelelser, nøjes med at sende brugerne fejlmeddelelser når de
_virkelig_ har brug for lidt info, og så i øvrigt lukke scripts ned når
det er kritisk nok
mvh
Jesper Brunholm
--
Phønix - dansk folk-musik i front - < http://www.phonixfolk.dk/>
H.C. Andersen-Centret: < http://www.andersen.sdu.dk/>
Vi har killinger på Garion.dk: < http://garion.dk/>
| |
Jimmy (08-08-2003)
| Kommentar Fra : Jimmy |
Dato : 08-08-03 16:24 |
|
"Jesper Brunholm" <nospam@brunholm-scharff.dk> wrote in message
news:3F3368C5.2090701@brunholm-scharff.dk...
> Jimmy wrote:
> >>Læs lidt her:
> >> http://php.net/errorfunc
> >
> > Super - E_ALL er så lidt i overkanten kan jeg nu se
>
> tjah - det smarte er hvis du kan differentiere det til selv at få E_ALL
> fejlmeddelelser, nøjes med at sende brugerne fejlmeddelelser når de
> _virkelig_ har brug for lidt info, og så i øvrigt lukke scripts ned når
> det er kritisk nok
Jamen jeg synes skam E_ALL er smart.
Når jeg skriver i Perl anvender jeg altid -w og use strict, men der er i php
en del ting jeg ikke helt kan se, hvordan jeg kommer udenom.
Eks.
$User = $_POST['User'];
$Pass = $_POST['Pass'];
Ovenstående giver mig fejl i det tilfælde der ikke postes et
brugernavn/adgangskode, hvilket der jo kun gør under autoriseringen.
Jeg kan naturligvis undertrykke fejl med @, men det modvirker jo en del af
ideen med E_ALL.
Hvordan sørger I for at undgå en masse fejl ved E_ALL?
Mvh
Jimmy
| |
Martin Sveegaard (08-08-2003)
| Kommentar Fra : Martin Sveegaard |
Dato : 08-08-03 17:02 |
|
On Fri, 8 Aug 2003 17:24:22 +0200, "Jimmy" <nyhedsgruppe@get2net.dk>
wrote:
>$User = $_POST['User'];
>$Pass = $_POST['Pass'];
>
>Ovenstående giver mig fejl i det tilfælde der ikke postes et
>brugernavn/adgangskode, hvilket der jo kun gør under autoriseringen.
>
>Jeg kan naturligvis undertrykke fejl med @, men det modvirker jo en del af
>ideen med E_ALL.
>
>Hvordan sørger I for at undgå en masse fejl ved E_ALL?
Fx:
function eh($type, $msg, $file, $line) {
error_log("$msg (error type $type)", 1, "din@mailadresse.dk");
// if fatal error, die()
if ($type == E_USER_ERROR)
{
die($msg);
}
}
// define custom handler
set_error_handler("eh");
Så kan du jo sætte:
if ($type == E_NOTICE) {en mild errorhandling;}
MVH Martin S
| |
Jimmy (08-08-2003)
| Kommentar Fra : Jimmy |
Dato : 08-08-03 17:40 |
|
> >Hvordan sørger I for at undgå en masse fejl ved E_ALL?
>
> Fx:
>
> function eh($type, $msg, $file, $line) {
> error_log("$msg (error type $type)", 1, "din@mailadresse.dk");
> // if fatal error, die()
> if ($type == E_USER_ERROR)
> {
> die($msg);
> }
> }
> // define custom handler
> set_error_handler("eh");
>
> Så kan du jo sætte:
> if ($type == E_NOTICE) {en mild errorhandling;}
Hmm ja - så har jeg mig en fejlhåndteringsrutine så jeg kan stoppe ved fejl
mv - Tak for det.
Men burde man ikke kunne skrive en side, som slet ikke kastede fejl af sig?
Hvis vi tager udgangspunkt i mit eksempel, hvor jeg henter et form-element
der ikke eksisterer, tænker jeg, at der må eksistere andre (og dermed bedre)
metoder til at hente indhold fra forms, som måske ikke er defineret.
Mvh
Jimmy
| |
Jacob Atzen (08-08-2003)
| Kommentar Fra : Jacob Atzen |
Dato : 08-08-03 19:41 |
|
"Jimmy" <nyhedsgruppe@get2net.dk> writes:
> Men burde man ikke kunne skrive en side, som slet ikke kastede fejl af sig?
Jo, det burde man.
> Hvis vi tager udgangspunkt i mit eksempel, hvor jeg henter et form-element
> der ikke eksisterer, tænker jeg, at der må eksistere andre (og dermed bedre)
> metoder til at hente indhold fra forms, som måske ikke er defineret.
Du kan lade være med at bruge indholdet, hvis det ikke er defineret.
if($_POST["foo"]) {
$bar = $_POST["foo"];
}
--
Med venlig hilsen
- Jacob Atzen
| |
Jimmy (08-08-2003)
| Kommentar Fra : Jimmy |
Dato : 08-08-03 20:37 |
|
"Jacob Atzen" <jacob@aub.dk> wrote in message
news:87znikat5z.fsf@morpheus.aub.dk...
> "Jimmy" <nyhedsgruppe@get2net.dk> writes:
>
> > Men burde man ikke kunne skrive en side, som slet ikke kastede fejl af
sig?
>
> Jo, det burde man.
>
> > Hvis vi tager udgangspunkt i mit eksempel, hvor jeg henter et
form-element
> > der ikke eksisterer, tænker jeg, at der må eksistere andre (og dermed
bedre)
> > metoder til at hente indhold fra forms, som måske ikke er defineret.
>
> Du kan lade være med at bruge indholdet, hvis det ikke er defineret.
>
> if($_POST["foo"]) {
> $bar = $_POST["foo"];
> }
Ja - ovenstående virker faktisk som det skal.
Anses det for at være bedre at kode på den måde (hvor man tilgår headeren to
gange og checker) end hvis man undlod if($_POST["foo"]) ?
Mvh
Jimmy
| |
Jacob Atzen (09-08-2003)
| Kommentar Fra : Jacob Atzen |
Dato : 09-08-03 09:57 |
|
"Jimmy" <nyhedsgruppe@get2net.dk> writes:
> > if($_POST["foo"]) {
> > $bar = $_POST["foo"];
> > }
>
>
> Ja - ovenstående virker faktisk som det skal.
>
> Anses det for at være bedre at kode på den måde (hvor man tilgår
> headeren to gange og checker) end hvis man undlod if($_POST["foo"])
> ?
Du bør benytte is_set() kommandoen som beskrevet andetsteds i
tråden. En dårlig vane fra min side.
Det er i øvrigt vigtigt, at tildele din $bar variabel en default
værdi, hvis der finder en fornuftig sådan. Alternativt kan du lade
scriptet kaste en fejl i det tilfælde $_POST["foo"] ikke er sat.
Som svar på dit spørgsmål: Ja, jeg anser det for værende bedre kode,
at have fuldstændig styr på hvad indholdet af dine variable er på et
vilkårligt tidspunkt i programmets køretid. På den måde kan du spare
dig selv for mange kedelige problemer senere hen.
--
Med venlig hilsen
- Jacob Atzen
| |
Jimmy (09-08-2003)
| Kommentar Fra : Jimmy |
Dato : 09-08-03 10:01 |
|
"Jacob Atzen" <jacob@aub.dk> wrote in message
news:87llu3w6nh.fsf@morpheus.aub.dk...
> "Jimmy" <nyhedsgruppe@get2net.dk> writes:
>
> > > if($_POST["foo"]) {
> > > $bar = $_POST["foo"];
> > > }
> >
> >
> > Ja - ovenstående virker faktisk som det skal.
> >
> > Anses det for at være bedre at kode på den måde (hvor man tilgår
> > headeren to gange og checker) end hvis man undlod if($_POST["foo"])
> > ?
>
> Du bør benytte is_set() kommandoen som beskrevet andetsteds i
> tråden. En dårlig vane fra min side.
OK - Det gør jeg så.
> Det er i øvrigt vigtigt, at tildele din $bar variabel en default
> værdi, hvis der finder en fornuftig sådan.
I de tilfælde jeg har hentet tomme værdier i mit script har jeg ikke følt
behov for at tildele dem en standard-værdi.
Hvorledes mener du det er vigtigt at gøre?
> Som svar på dit spørgsmål: Ja, jeg anser det for værende bedre kode,
> at have fuldstændig styr på hvad indholdet af dine variable er på et
> vilkårligt tidspunkt i programmets køretid.
Ja det er jeg enig med dig i.
Takker,
Jimmy
| |
Jacob Atzen (09-08-2003)
| Kommentar Fra : Jacob Atzen |
Dato : 09-08-03 10:44 |
|
"Jimmy" <nyhedsgruppe@get2net.dk> writes:
> > Det er i øvrigt vigtigt, at tildele din $bar variabel en default
> > værdi, hvis der finder en fornuftig sådan.
>
> I de tilfælde jeg har hentet tomme værdier i mit script har jeg ikke følt
> behov for at tildele dem en standard-værdi.
> Hvorledes mener du det er vigtigt at gøre?
I det tilfælde, at du bruger værdien længere nede i din kode. Så er
det en god ide, at have styr på, hvad variablen egentlig
indeholder. Ikke initialiserede variable kan være ophav til ganske
irriterende problemer.
--
Med venlig hilsen
- Jacob Atzen
| |
Troels Arvin (08-08-2003)
| Kommentar Fra : Troels Arvin |
Dato : 08-08-03 19:13 |
|
On Fri, 08 Aug 2003 18:01:35 +0200, Martin Sveegaard wrote:
> function eh($type, $msg, $file, $line) {
> error_log("$msg (error type $type)", 1, "din@mailadresse.dk");
> // if fatal error, die()
> if ($type == E_USER_ERROR)
> {
> die($msg);
> }
> }
Tilføj følgende før die($msg):
@header('HTTP/1.1 500 Server Error');
Det er god skik og brug at udsende en header, der indikerer fejl. På den
måde vil proxies fx. ikke stå og cache en grim fejlside.
--
Greetings from Troels Arvin, Copenhagen, Denmark
| |
Anders Wegge Jakobse~ (08-08-2003)
| Kommentar Fra : Anders Wegge Jakobse~ |
Dato : 08-08-03 19:12 |
|
"Jimmy" == Jimmy <nyhedsgruppe@get2net.dk> writes:
> "Jesper Brunholm" <nospam@brunholm-scharff.dk> wrote in message
> news:3F3368C5.2090701@brunholm-scharff.dk...
>> Jimmy wrote:
>> >>Læs lidt her:
>> >> http://php.net/errorfunc
>> >
>> > Super - E_ALL er så lidt i overkanten kan jeg nu se
>>
>> tjah - det smarte er hvis du kan differentiere det til selv at få E_ALL
>> fejlmeddelelser, nøjes med at sende brugerne fejlmeddelelser når de
>> _virkelig_ har brug for lidt info, og så i øvrigt lukke scripts ned når
>> det er kritisk nok
> Jamen jeg synes skam E_ALL er smart.
> Når jeg skriver i Perl anvender jeg altid -w og use strict, men der er i php
> en del ting jeg ikke helt kan se, hvordan jeg kommer udenom.
> Eks.
> $User = $_POST['User'];
> $Pass = $_POST['Pass'];
> Ovenstående giver mig fejl i det tilfælde der ikke postes et
> brugernavn/adgangskode, hvilket der jo kun gør under autoriseringen.
> Jeg kan naturligvis undertrykke fejl med @, men det modvirker jo en del af
> ideen med E_ALL.
> Hvordan sørger I for at undgå en masse fejl ved E_ALL?
I ovenstående eksempel bruger du isset():
if (isset($_POST['User'])) {
$User = $_POST['User']
} else {
$User = "";
}
Und zu weiter und zu fort.
--
/Wegge < http://outside.bakkelygaard.dk/~wegge/>
| |
Jimmy (08-08-2003)
| Kommentar Fra : Jimmy |
Dato : 08-08-03 19:27 |
|
> > Hvordan sørger I for at undgå en masse fejl ved E_ALL?
>
> I ovenstående eksempel bruger du isset():
>
> if (isset($_POST['User'])) {
> $User = $_POST['User']
> } else {
> $User = "";
> }
Smart - Tak for hjælpen til alle.
Mvh
Jimmy
| |
Martin C. Petersen (11-08-2003)
| Kommentar Fra : Martin C. Petersen |
Dato : 11-08-03 22:50 |
|
> if (isset($_POST['User'])) {
> $User = $_POST['User']
> } else {
> $User = "";
> }
Hvilket eventuelt kan skrives lidt pænere som:
$User = isset($_POST['User']) ? $_POST['User'] : "";
Martin
| |
Peter Brodersen (13-08-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 13-08-03 16:19 |
|
On Mon, 11 Aug 2003 23:50:16 +0200, "Martin C. Petersen"
<mcp@phys.au.dk> wrote:
>$User = isset($_POST['User']) ? $_POST['User'] : "";
Et par overordnede PHP-betragtninger: Det virker som om, det
efterhånden bliver en kamp for at undgå notices, end for i første
omgang at bruge det som et rart værktøj til at fange små fodfejl.
Misforstå mig korrekt; notices er rare. Men med de forskellige
$_-arrays forventer man alligevel at data kommer udefra og er
utilregnelig - her er notices over manglende initialisering sjældent
nødvendige på samme måde, som hvis man fx blot staver en variabel
forkert undervejs.
--
- Peter Brodersen
Ugens sprogtip: udmærket (og ikke udemærket)
| |
Martin Sveegaard (07-08-2003)
| Kommentar Fra : Martin Sveegaard |
Dato : 07-08-03 11:36 |
|
On Thu, 7 Aug 2003 11:30:56 +0200, "Jimmy" <nyhedsgruppe@get2net.dk>
wrote:
>Hej
>
>Jeg har spurgt i .apache uden at få svar og spørger derfor her.
>
>Jeg ønsker at angive - enten i apache eller i toppen af mit php-script - at
>enhver fejl er fatal og skal medføre, at scriptets udførsel afbrydes.
>
>Hvordan gøres dette?
>
>Mvh
>Jimmy
>
Et eksempel:
<?php
error_reporting (E_ALL);
function eh($type, $msg, $file, $line) {
die($msg . " on line: " . $line . "<br />Goodbye!");
}
// definér custom handler
set_error_handler("eh");
// provokér en notice ved at bruge en udefineret variabel
$a = $b;
?>
MVH Martin S
| |
Peter Brodersen (10-08-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 10-08-03 17:12 |
|
On Thu, 07 Aug 2003 12:35:48 +0200, Martin Sveegaard
<sveegaard@tdcadslFJERN:DETTE.dk> wrote:
>set_error_handler("eh");
Jeg må indrømme, at jeg ikke selv kan se fordelen ved
set_error_handler(), når den ikke kan håndtere E_ERROR?
E_PARSE kan jeg godt forstå, at den ikke kan klare (omend jeg
stadigvæk ikke er interesseret i at fortælle omverdenen om parse
errors), men E_ERROR forekommer trods alt først under runtime
alligevel.
Hvad er det, jeg har overset, der gør folk glade for
set_error_handler()? Selv trigger_error default'er til E_USER_NOTICE,
hvorfor en omskrivning fra fx "or die..." alligevel skal have passende
argumenter med?
--
- Peter Brodersen
Ugens sprogtip: parentes (og ikke parantes)
| |
Troels Arvin (10-08-2003)
| Kommentar Fra : Troels Arvin |
Dato : 10-08-03 17:18 |
|
On Sun, 10 Aug 2003 18:12:04 +0200, Peter Brodersen wrote:
> Jeg må indrømme, at jeg ikke selv kan se fordelen ved
> set_error_handler(), når den ikke kan håndtere E_ERROR?
Fordi man måske gerne vil ha' en mail, der orienterer om, at en fejl
opstod. Eller måske fordi man gerne vil have den slags logget på en
særlig måde, hvor en "log_errors = On" i php.ini ikke er nok.
--
Greetings from Troels Arvin, Copenhagen, Denmark
| |
|
|