/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408935
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste