2014-07-02 10 views
8

Cóż, dopiero zacząłem od hhvm/hack. Ale chciałem wyświetlić błędy w przeglądarce, ale nie udało mi się go uruchomić.Wyświetlanie błędów krytycznych/powiadomień w przeglądarce

ustawić INI ustawienia następnie

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

Według var_dump z ini_get wartości zostały ustawione na

string(5) "32767" 
string(1) "1" 

Ale kiedy zrobiłem

<?hh 

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

throw new InvalidArgumentException('test'); 

Kiedy odwiedziłem na stronie za pomocą przeglądarki dostałbym tylko biały ekran i nagłówek http 500. Więc nie ma żadnego wyjaśnienia błędu krytycznego/wyjątku.

Czy mimo to przejdę przez terminal? hhvm index.php Pokaże;

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'test' in /var/www/public/index.php:3 
Stack trace: 
#0 {main} 

Teraz pytanie. Jak to się dzieje, że nie dostaję żadnych komunikatów w przeglądarce, ale czy robię to w cli? A druga to: jak sprawić, by działała w przeglądarce, aby wyświetlać wiadomości.

Natknąłem się na te question i this one. Ale pierwszy, no cóż, jest taki sam, ale bez odpowiedzi. A druga mówi coś o statycznym sprawdzaniu. IE, że int jest podany etc, przynajmniej to, co myślę, że on znaczy.

Inny question Przyszedłem, który wyglądał jak mój, ale znowu bez odpowiedzi.

I zgodnie z docs powinien działać chyba.

Reading więcej na docs I przyszedł po drugiej stronie

Chociaż display_errors mogą być ustawione przy starcie (z funkcją ini_set()), to nie będzie mieć żadnego wpływu, jeśli skrypt zawiera błędy krytyczne. Wynika to z faktu, że pożądana akcja środowiska wykonawczego nie zostanie wykonana.

Pomyślałem więc dobrze wyjątek to błąd krytyczny, więc po prostu nie $test = $bar + 1;

To pozwoli w CLI do

Notice: Undefined variable: bar in /var/www/public/index.php on line 8 
int(1) 

Ponownie w przeglądarce

int(1) 

Więc nie dostań też zawiadomień.

Kiedy restart hhvm service hhvm restart ja również otrzymuję komunikat o błędzie Log file not specified under daemon mode. nie wiem czy to ma coś wspólnego z jego

Odpowiedz

6

Dobrze zajęło mi jakieś poszukiwania, ale w końcu znalazłem odpowiedź, see this github post. Nie może jednak wyświetlać błędów krytycznych. Ale powiadomienia są wyświetlane

Więc napisałem własną procedurę obsługi błędów; nie jest kompletny, ale wykonuje teraz pracę.

Ostrzeżenie, bez kontroli na ini display_errors

set_error_handler(function ($errorNumber, $message, $errfile, $errline) { 
    switch ($errorNumber) { 
     case E_ERROR : 
      $errorLevel = 'Error'; 
      break; 

     case E_WARNING : 
      $errorLevel = 'Warning'; 
      break; 

     case E_NOTICE : 
      $errorLevel = 'Notice'; 
      break; 

     default : 
      $errorLevel = 'Undefined'; 
    } 

    echo '<br/><b>' . $errorLevel . '</b>: ' . $message . ' in <b>'.$errfile . '</b> on line <b>' . $errline . '</b><br/>'; 
}); 
+0

Dzięki bardzo pomocne. Pracowałem dla mnie, aby uzyskać komunikat PHP do wyświetlenia w HHVM. – jerclarke

1

Jest możliwe, aby spaść z powrotem do php gdy hhvm zawiedzie. Całkiem proste - https://bjornjohansen.no/hhvm-with-fallback-to-php. Rozumiem, że możesz dołączyć zastępstwo php za kod błędu (np. 404). Więc nie jest możliwe, aby wrócić do serwera php, który pokazuje stronę, która ładuje dziennik błędów hhvm?

Powiązane problemy