/ 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
Fange _alle_ syntaks fejl
Fra : Morten P


Dato : 05-06-09 07:19

Når der sendes f.eks. "call to undefined function" eller lignende
syntaksfejl mm ønsker jeg at der sendes en mail til mig.

Dvs. at man lægger et hook ind der køres dels under kompilering men også
under run time.

set_error_handler() fanger ikke ret mange fejl.

Kan man gøre (andet) end at hacke selve php source koden og rekompilere?



 
 
Dan Storm (05-06-2009)
Kommentar
Fra : Dan Storm


Dato : 05-06-09 07:39

Morten P skrev:
> Når der sendes f.eks. "call to undefined function" eller lignende
> syntaksfejl mm ønsker jeg at der sendes en mail til mig.
>
> Dvs. at man lægger et hook ind der køres dels under kompilering men også
> under run time.
>
> set_error_handler() fanger ikke ret mange fejl.
>
> Kan man gøre (andet) end at hacke selve php source koden og rekompilere?

Det var ellers et temmelig voldsomt forslag.

Altså, jeg har selv gjort det at jeg har valgt at lade PHP logge alle
fejl i en fil.
Den fil bliver så kontrolleret hvert kvarter (af et cronjob ofc). Hvis
der er nyt indhold i den har jeg et RSS feed der bliver opdateret med en
entry der indeholder nye fejl siden sidst.
En gang i døgnet bliver filen så truncated.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Morten P (06-06-2009)
Kommentar
Fra : Morten P


Dato : 06-06-09 07:00


"Dan Storm" <shadyz_REMOVETHIS_@err0r.dk> wrote in message
news:4a28bd7c$0$15887$edfadb0f@dtext01.news.tele.dk...
> Morten P skrev:
>> Når der sendes f.eks. "call to undefined function" eller lignende
>> syntaksfejl mm ønsker jeg at der sendes en mail til mig.
>>
>> Dvs. at man lægger et hook ind der køres dels under kompilering men også
>> under run time.
>>
>> set_error_handler() fanger ikke ret mange fejl.
>>
>> Kan man gøre (andet) end at hacke selve php source koden og rekompilere?
>
> Det var ellers et temmelig voldsomt forslag.

:)

> Altså, jeg har selv gjort det at jeg har valgt at lade PHP logge alle fejl
> i en fil.

Hvrdan gør du det?
Det ville være helt tilstrækkeligt til mig



Dan Storm (06-06-2009)
Kommentar
Fra : Dan Storm


Dato : 06-06-09 19:25

Morten P skrev:
>> Altså, jeg har selv gjort det at jeg har valgt at lade PHP logge alle fejl
>> i en fil.
>
> Hvrdan gør du det?
> Det ville være helt tilstrækkeligt til mig

Vil du have min kildekode? Eller bare idéen bag det? Kildekoden vil nok
ikke være dig så anvendelig, det det er integreret i en del af et 2-tier
system.

Men idéen er at du beder PHP om at logge fejlene. Jeg går ud fra du har
noget webhotel hos en eller anden udbyder?

Ihvertfald er idéen at du i din http rod lægger en .htaccess fil med
indholdet:
# Vis ikke fejl
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

# ...men gem fejl i en logfil
php_flag log_errors on
php_value error_log /den absolutte sti til din error log/error.log


Hvis du har et billigt webhotel har du nok ikke adgang til nogen form
for cronjobs. Et alternativ for at blive ved min idé er
onlinecronjobs.com <url: http://www.onlinecronjobs.com/>.

Du skal så lave et script der basalt set gør følgende:
   - læs error.log og læg indholdet i en variabel.
   - hvis error.log ikke havde indhold, så stop scriptet.
   - tøm error.log så den er klar til nyt indhold.
   - send variablens indhold til dig selv i en mail.

Det er grundlæggende hvad du har behov for.





--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Morten P (07-06-2009)
Kommentar
Fra : Morten P


Dato : 07-06-09 15:35


> Vil du have min kildekode? Eller bare idéen bag det?
Bare ideen



> Men idéen er at du beder PHP om at logge fejlene. Jeg går ud fra du har
> noget webhotel hos en eller anden udbyder?

Det er et relativt stort site hostet på egne Linux servere, så vi har fuld
rod adgang.


> Ihvertfald er idéen at du i din http rod lægger en .htaccess fil med
> indholdet:
> # Vis ikke fejl
> php_flag display_startup_errors off
> php_flag display_errors off
> php_flag html_errors off
> php_value docref_root 0
> php_value docref_ext 0
>
> # ...men gem fejl i en logfil
> php_flag log_errors on
> php_value error_log /den absolutte sti til din error log/error.log


Aha, smart!
Vidste ikke man kunne logge på den måde

Hvad er fidusen ved ikke at vise fejl?
Jeg forstår sikkerhedsaspektet i det, men her snakker vi interne brugere,
hvor det egentligt gør alting lettere hvis de kan kopiere eller tage
screenshots af fejlene.



> Du skal så lave et script der basalt set gør følgende:
> - læs error.log og læg indholdet i en variabel.
> - hvis error.log ikke havde indhold, så stop scriptet.

Du mener hvis den _havde_ indhold ikke?

> - tøm error.log så den er klar til nyt indhold.
> - send variablens indhold til dig selv i en mail.
>
> Det er grundlæggende hvad du har behov for.

Enig! Det skal jeg prøve at implementere

Takker!



Dan Storm (07-06-2009)
Kommentar
Fra : Dan Storm


Dato : 07-06-09 18:37

Morten P skrev:
> Hvad er fidusen ved ikke at vise fejl?
> Jeg forstår sikkerhedsaspektet i det, men her snakker vi interne brugere,
> hvor det egentligt gør alting lettere hvis de kan kopiere eller tage
> screenshots af fejlene.

Udover sikkerhedsaspektet i det, er der (uanset brugertilknytningen)
oftest ikke hverken forståeligt for brugeren hvad fejlmeddelelsen
indebærer eller særligt informativt.
At forvente at alle dine fejl bliver fanget, så de kan rettes, af dine
brugere som skal sende dig screenshots er lidt utopisk, så det handler
lige så meget om hvad du selv vil gøre for at rette fejl og hvad du vil
gøre for at informere brugerne om at du har styr på hvad du laver og
hvad der sker.

>> Du skal så lave et script der basalt set gør følgende:
>> - læs error.log og læg indholdet i en variabel.
>> - hvis error.log ikke havde indhold, så stop scriptet.
>
> Du mener hvis den _havde_ indhold ikke?

Nej. Hvis error.log _ikke_ har indhold er der ingen grund til at
fortsætte med de sidste to steps som er at sende dig en mail uden
indhold og tømme en tom fil (såfremt error.log var tom). Så kan du lige
så godt stoppe scriptet. Men hvis filen har indhold, vil du selvfølgelig
gerne have besked om indholdet og ligeledes være klar til at logge når
der sker noget nyt.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Morten P (07-06-2009)
Kommentar
Fra : Morten P


Dato : 07-06-09 21:54

>>> Du skal så lave et script der basalt set gør følgende:
>>> - læs error.log og læg indholdet i en variabel.
>>> - hvis error.log ikke havde indhold, så stop scriptet.
>>
>> Du mener hvis den _havde_ indhold ikke?
>
> Nej. Hvis error.log _ikke_ har indhold er der ingen grund til at fortsætte

Ja, sorry, jeg havde ikke fanget at det script du talte om der var et error
handler script, troede det var hoved programmet

Men i så fald har jeg misset en central pointe.

Lad os antage at mit script er:

<?php

pint 'Two beer, please';

?>

Den fejl der kommer der vil jeg fange.
Jeg kan ikke se i dit originale eksempel, hvor man angiver stien til min
error handler (der jo sender mails)

Eller er det sådan at fejl ikke vises, men logges og at jeg i starten af
alle sider har en "handle_errors()" så før ved _næste_ side visning sendes
mailen?
(Intet galt i det, alle brugere refresher




Dan Storm (07-06-2009)
Kommentar
Fra : Dan Storm


Dato : 07-06-09 22:03

Morten P skrev:
> Den fejl der kommer der vil jeg fange.
> Jeg kan ikke se i dit originale eksempel, hvor man angiver stien til min
> error handler (der jo sender mails)
>
> Eller er det sådan at fejl ikke vises, men logges og at jeg i starten af
> alle sider har en "handle_errors()" så før ved _næste_ side visning sendes
> mailen?
> (Intet galt i det, alle brugere refresher

Nej, nu gør du konceptet kompliceret.

Du har lavet din .htaccess fil som logger alle fejl til en fil kaldet
error.log. Bare giv filen rettighederne 777.

Så har du et script der muligvis ville se således ud:
<?php

   //Fil til cronjob
   

   $log = "/sti_til/error.log";
   $content = file_get_contents($log);
   if(empty($content))
      exit;

   file_put_contents($log, "");
   mail("mail@example.org", "PHP fejl", $content, "From:
mail@example.org\r\n");


?>

Og så kører du bare det hvert kvarter (hvis det er nødvendigt).

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Morten P (08-06-2009)
Kommentar
Fra : Morten P


Dato : 08-06-09 05:19

> Nej, nu gør du konceptet kompliceret.

Godt


> Du har lavet din .htaccess fil som logger alle fejl til en fil kaldet
> error.log


Nu er jeg med! Takker

Det skal testes!



Leif Neland (08-06-2009)
Kommentar
Fra : Leif Neland


Dato : 08-06-09 19:17

Morten P skrev:

>
> Hvad er fidusen ved ikke at vise fejl?
> Jeg forstår sikkerhedsaspektet i det, men her snakker vi interne brugere,
> hvor det egentligt gør alting lettere hvis de kan kopiere eller tage
> screenshots af fejlene.
>

Min erfaring med interne brugere er, at de ofte mener at hvis man
skynder sig at gå væk fra en fejlmeddelelse, så er fejlen væk.

Jo mere man ser på en fejlmeddelelse, jo mere slider det på maskinen,
mener de tilsyneladende.

Det er bedre at logge så meget som muligt.

Leif



Martin (05-06-2009)
Kommentar
Fra : Martin


Dato : 05-06-09 08:25

Morten P wrote:
> Når der sendes f.eks. "call to undefined function" eller lignende
> syntaksfejl mm ønsker jeg at der sendes en mail til mig.

call to undefined function er da ikke en syntax fejl :)

>
> Dvs. at man lægger et hook ind der køres dels under kompilering men også
> under run time.
>
> set_error_handler() fanger ikke ret mange fejl.
>
> Kan man gøre (andet) end at hacke selve php source koden og rekompilere?

Ikke direkte igennem PHP nej...
PHP koden bliver jo slet ikke bearbejdet ved E_ERROR, E_PARSE, E_CORE_*
og E_COMPLE_* - dog tror jeg nok scriptet bliver kørt igennem ved E_USER_*

Så den eneste løsning er nok at parse logfilen også sætte display_errors
til off.

Morten P (06-06-2009)
Kommentar
Fra : Morten P


Dato : 06-06-09 07:02


"Martin" <maaNO@SPAMscandesigns.dk> wrote in message
news:4a28c856$0$90274$14726298@news.sunsite.dk...
> Morten P wrote:
>> Når der sendes f.eks. "call to undefined function" eller lignende
>> syntaksfejl mm ønsker jeg at der sendes en mail til mig.
>
> call to undefined function er da ikke en syntax fejl :)

hehe, enig


> Så den eneste løsning er nok at parse logfilen også sætte display_errors
> til off.

Pars logfilen er nok ikke en dårlig ide faktisk...
Mpske det var det Dan mente?

Hvorfor sætte display_errors til off?
Jeg har egentligt ikke så meget imod at præsentere fejl.
Systemet er i prod men det er interne brugere.
Jeg vil bare gerne fange fejl langt hurtigere end at satse på brugerne
rapporterer dem og ikke tænker "det ved de nok godt, de er nok igang"



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

Månedens bedste
Årets bedste
Sidste års bedste