Jan K.: error_reporting(E_STRICT) greift nicht

Hallo Forum,

ich kriege langsam Hasspickel.
Mein PHP will mir, zwecks ordentlicher Deklaration, keine Fehlermeldungen anzeigen.

Apache Friends XAMPP (Basis Package) version 1.7.2

+ Apache 2.2.12 (IPV6 enabled)
  + MySQL 5.1.37 (Community Server) with PBXT engine 1.0.08-rc
  + PHP 5.3.0 + PEAR (PEAR, Mail_Mime, MDB2, Zend)

xampp/php/php.ini:
[...]
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
display_errors = On
[...]

Das müsste eigentlich eine Menge Beschwerden auslösen:

<?php  
error_reporting(E_STRICT);  
  
bla123;  
  
$i=2;  
$blo="blda";  
  
echo "time:".time();  
  
?>

Tut es aber nicht :/
Irgendwelche Ideen?

Grüße aus Berlin,
Jan

  1. Hallo Forum,

    Hallo Jan,

    ich kriege langsam Hasspickel.
    Mein PHP will mir, zwecks ordentlicher Deklaration, keine Fehlermeldungen anzeigen.

    Apache Friends XAMPP (Basis Package) version 1.7.2

    + Apache 2.2.12 (IPV6 enabled)
      + MySQL 5.1.37 (Community Server) with PBXT engine 1.0.08-rc
      + PHP 5.3.0 + PEAR (PEAR, Mail_Mime, MDB2, Zend)

    xampp/php/php.ini:
    [...]
    error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
    display_errors = On
    [...]

    »»

    ...
    ...

    Tut es aber nicht :/
    Irgendwelche Ideen?

    Sicher, dass diese php.ini auch verwendet wird? Ich erinnere mich dunkel daran, dass Windows eine php.ini im System-Ordner irgendwo ablegt. Kontrolliere doch mal mit phpinfo() wo die php.ini überhaupt liegt.

    groß Grüß,
    der Stefan

    --
    Seit 1996 am fummeln und immer noch nichts gelernt ;)
    1. Gibt nur die eine php.ini, diese greift auch.

      phpinfo(): xampp\php\php.ini

  2. Moin!

    Das müsste eigentlich eine Menge Beschwerden auslösen:

    <?php

    error_reporting(E_STRICT);

    bla123;

    $i=2;
    $blo="blda";

    echo "time:".time();

    ?>

    
    >   
    > Tut es aber nicht :/  
    > Irgendwelche Ideen?  
      
    Wieso willst du NUR E\_STRICT-Messages haben? Was ist mit E\_ALL? Das wird deaktiviert!  
      
    Wenn du wirklich alles wissen willst, was PHP zu meckern hat: `error_reporting(E_ALL|E_STRICT);`{:.language-php}  
      
     - Sven Rautenberg
    
  3. Tach!

    xampp/php/php.ini:
    error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
    display_errors = On

    display_errors ist also on, error_reporting ist egal, weil du es ja überschreibst.

    Das müsste eigentlich eine Menge Beschwerden auslösen:

    error_reporting(E_STRICT);

    bla123;

    Lediglich diese Zeile löst eine E_NOTICE-Meldung aus. Da du aber nur E_STRICT gewählt hast, siehst du sie nicht.

    Irgendwelche Ideen?

    Wenn du wirklich alle Meldungen sehen willst, nimm error_reporting(-1). Normalerweise reicht E_ALL, der Zusatz E_STRICT zeigt nur ein paar Hinweise zu veralteten Dingen mehr an, vorwiegend aus dem OOP-Bereich.

    Die Werte der E_*-Konstanten (außer E_ALL) in Binärdarstellung angesehen zeigen jeweils ein gesetztes Bit. Diese Bits muss man kombinieren, wenn man die jeweiligen Kategorien angezeigt bekommen möchte. error_reporting schaut also im ihm übergebenen Wert die gesetzten Bits an und lässt dann dementsprechende Meldungen zu. E_ALL kombiniert alle Bits, mit Ausnahme von E_STRICT in den 5er PHP-Versionen kleiner 5.4. Beim Wert -1 sind sämntliche Bits gesetzt, auch solche, die für error_reporting keine Bedeutung haben. Man muss sich bei -1 aber keine Gedanken machen, welche PHP-Version man hat und welche Meldungen dessen E_ALL umfasst. Der Unterschied zu E_ALL ist aber effektiv nur das relativ unwichtige E_STRICT.

    dedlfix.

    1. Moin!

      E_ALL kombiniert alle Bits, mit Ausnahme von E_STRICT in den 5er PHP-Versionen kleiner 5.4. Beim Wert -1 sind sämntliche Bits gesetzt, auch solche, die für error_reporting keine Bedeutung haben. Man muss sich bei -1 aber keine Gedanken machen, welche PHP-Version man hat und welche Meldungen dessen E_ALL umfasst. Der Unterschied zu E_ALL ist aber effektiv nur das relativ unwichtige E_STRICT.

      Die Kommentare zu den definierten E_*-Konstanten sagen, dass ~0 die bessere Methode ist, alle Bits zu setzen, weil das Zweierkomplement nicht zwingend immer funktionieren muss.

      Außerdem wird vermutet, dass das Setzen von undefinierten Bits in der Maske undefiniertes Verhalten zur Folge haben könnte.

      - Sven Rautenberg

      1. Tach!

        Moin!

        E_ALL kombiniert alle Bits, mit Ausnahme von E_STRICT in den 5er PHP-Versionen kleiner 5.4. Beim Wert -1 sind sämntliche Bits gesetzt, auch solche, die für error_reporting keine Bedeutung haben. Man muss sich bei -1 aber keine Gedanken machen, welche PHP-Version man hat und welche Meldungen dessen E_ALL umfasst. Der Unterschied zu E_ALL ist aber effektiv nur das relativ unwichtige E_STRICT.

        Die Kommentare zu den definierten E_*-Konstanten sagen, dass ~0 die bessere Methode ist, alle Bits zu setzen, weil das Zweierkomplement nicht zwingend immer funktionieren muss.

        Das stimmt wohl, halte ich aber für ein theoretisches Argument. Zudem wolltest du wohl sagen, dass das Zweierkomplement nicht überall zur Darstellung negativer Zahlen angewendet wird. Denn wenn es verwendet wird, muss es überall funktionieren, sonst wäre dieses Verfahren nicht das Zweierkomplement. Da das Zweierkomplement aber die vorherrschende Methode ist, und das Einerkomplement mindestens zwei Nachteile hat, gehe ich nicht davon aus, letzteres auf den vorwiegend verwendeten Systemen zu finden.

        Außerdem wird vermutet, dass das Setzen von undefinierten Bits in der Maske undefiniertes Verhalten zur Folge haben könnte.

        Diese Aussage halte ich für Blödsinn. Wenn dem so wäre, müsste irgendwer im PHP-Code eine sehr ungewöhnliche Art, gesetzte Bits zu erkennen, verwenden. Und ein solches Verhalten müsste mit jeder Version korrigiert werden, die neue Fehlerklassen definiert und dafür neue Bits verwendet. Ich habe mir gerade mal im PHP-5.3.8-Code (abzüglich der tests-Verzeichnisse) alle Verwendungen von error_reporting angesehen und darin kein ungewöhnliches Bit-Prüfen und -Setzen gefunden.

        dedlfix.