Avatar billede scootergrisen Nybegynder
18. september 2011 - 17:35 Der er 10 kommentarer og
1 løsning

Undertryk fejl med @

Jeg har noget kode hvor jeg skriver :
if($AgetHeaders = @get_headers("http://www.example.com/", 1)){

Men når der ikke er internet forbindelse så får jeg fejlbeskeden :
get_headers(): php_network_getaddresses: getaddrinfo failed: V�rten kendes ikke.

Jeg har læst om at man kan bruge @ til at undertrykke fejl beskeder men det kan jeg ikke få til at virke.

Er der nogen der ved hvordan man bruger @ sådan at alle fejl beskeder fra get_headers() ignoreres ?
Avatar billede Slettet bruger
18. september 2011 - 22:08 #1
Refrence til PHP.net

Quote:
The @-operator works only on expressions. A simple rule of thumb is: if you can take the value of something, you can prepend the @ operator to it. For instance, you can prepend it to variables, function and include() calls, constants, and so forth. You cannot prepend it to function or class definitions, or conditional structures such as if and foreach, and so forth.

Håber ovenstående kan hjælpe!
Avatar billede scootergrisen Nybegynder
19. september 2011 - 13:18 #2
Der står man kan bruge det før en funktion som vel er det jeg har gjort.

Og eftersom det er funktionen get_headers() som giver fejlbeskeden så tænker jeg at det er der jeg skal skrive @ før.

Jeg har læst i manualen men kan ikke få det til at virke.

Så er der en der siger jeg kan jo bruge error_reporting(0); før get_headers() også sætte den tilbage bagefter men det ville være bedre og give mindre kode hvis jeg kunne nøjes med @.
Avatar billede Slettet bruger
19. september 2011 - 15:46 #3
Forstår godt hvad du mener og prøver på, men jeg tror - er ikke sikker - at den kun ignorer fejl-beskeder som den pågældne funktion laver.
I dit tilfælde ser det ud som om det noget get_headers() kalder, som giver fejl og ikke get_headers() selv.
Avatar billede scootergrisen Nybegynder
19. september 2011 - 17:30 #4
Ja det kan da godt være at fejlbeskeden kommer fra "noget andet".

Jeg ved bare ikke om jeg har brugt @ det rigtige sted fordi jeg har ikke erfaring med det.
Avatar billede Slettet bruger
19. september 2011 - 17:49 #5
Du bruger det fint i dit eksempel :-)

Et typisk sted at bruge den er som du gør, eller hvis man bare vil åbne en forbindelse med f.eks. fopen().
<?php
if($handle = @fopen("myfile.ext", "a+")) {
  print "Connection handler is up'n'running!";
} else {
  print "Failed to open connection to myfile.ext!";
}
?>
Avatar billede scootergrisen Nybegynder
03. oktober 2011 - 14:28 #6
Det nok fordi jeg tror at hvis man bruge @ så kommer der aldrig fejlbeskeder derfor mere.

Men det lader til at være et sammenspil med :
  ini_set('display_errors', false);
  error_reporting(0);
  ini_set('scream.enabled', false);

Så det bare hvad skal jeg indstille dem til sådan at @ fejlbeskeder ikke gemmes i min log fil ?

Og hvordan finder jeg ud af hvad type fejl besked dette er :
  get_headers(): php_network_getaddresses: getaddrinfo failed:
  V&#65533;rten kendes ikke.
Avatar billede Slettet bruger
03. oktober 2011 - 15:30 #7
Som der står på PHP.net så styrer scream kun om @ vil virke eller ej.

Det de fleste typisk gør, er at vise alle fejl beskeder - evt. med notice som undtagelse - når deres projekt er under udvikling.
Så snart siden går "live", så slår man display_errors fra og så logger man kun alle fejl.

Man kan så lave sin egen error-handler der viser en besked på siden, som f.eks. "Der opstod en fejl, kontakt venligst administratoren" - men selve fejlen bliver stadig kun logget.
Læs mere om det her: http://php.net/manual/en/function.set-error-handler.php

Ang. fejl typer, kan du se listen på denne side: http://php.net/manual/en/errorfunc.constants.php
Avatar billede scootergrisen Nybegynder
03. oktober 2011 - 16:02 #8
Ok get_headers() laver en fejl 2 som så er en E_WARNING når der ikke er forbindelse til internettet.

Nu finder jeg så ud af at også skal fortælle set_error_handler() hvilken slags fejl den skal sende videre til sin egen fejlbeskedsfunktion :

  set_error_handler('fejlbesked', E_ALL ^ E_WARNING);

Jeg har jo hele tiden sidder og troede det var error_reporting() som skulle indstilles men det har ingen indflydelse på set_error_handler() har jeg nu læst.

Så det ser ud til at virke nu som jeg ønsker med :

  set_error_handler('fejlbesked', E_ALL ^ E_WARNING);
Avatar billede Slettet bruger
03. oktober 2011 - 16:13 #9
Du behøver ikke bruge set_error_handler() hvis det eneste formål er at undertrykke warnings.
Så kan du sagtens bruge error_reporting().
error_reporting(E_ALL ^ E_WARNING);
Avatar billede scootergrisen Nybegynder
03. oktober 2011 - 16:38 #10
Ja ok men nu vil jeg gerne kunne bestemme hvor der skal stå i min fejl log fil sådan at jeg kan skrive det på dansk og opsætte det som jeg vil.

Du skal vist nok skrive et svar så kan jeg give dig point.
Avatar billede Slettet bruger
03. oktober 2011 - 16:45 #11
Hehe, jamen det er jo op til dig :-)

Du får mit svar her!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester