Zwykle skrypt php działa po E_NOTICE, czy istnieje sposób na podniesienie tego błędu do krytycznego błędu w kontekście funkcji, to znaczy, że muszę tylko wyprowadzać powiadomienia tylko w moich funkcjach, ale nie w podstawowych funkcjach php, czyli globalnie .jak zrobić wyjście php na E_NOTICE?
Odpowiedz
Można utworzyć niestandardową procedurę obsługi błędów, aby przechwycić E_NOTICE
s.
To niesprawdzone ale powinno iść w dobrym kierunku:
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if ($errno == E_USER_NOTICE)
die ("Fatal notice");
else
return false; // Leave everything else to PHP's error handling
}
następnie ustawić ją jako nową klasę obsługi błędów przy użyciu set_error_handler()
podczas wprowadzania funkcji i przywrócić obsługi błędów PHP przy opuszczaniu go:
function some_function()
{
// Set your error handler
$old_error_handler = set_error_handler("myErrorHandler");
... do your stuff ....
// Restore old error handler
set_error_handler($old_error_handler);
}
"potrzebuję tylko wyjść z powiadomienia tylko w moich funkcjach, ale nie w podstawowych funkcjach php, to jest globalnie" –
@Rikudo Dokładnie to, co powyższe robi, prawda? Czego brakuje? –
On nie chce, żeby umarł na php core E_NOTICE, ale tylko E_USER_NOTICE wywołane przez jego funkcje :) –
użyć niestandardowej procedury obsługi błędu używając set_error_handler()
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline) {
if ($errno == E_USER_NOTICE) {
die("Died on user notice!! Error: {$errstr} on {$errfile}:{$errline}");
}
return false; //Will trigger PHP's default handler if reaches this point.
}
set_error_handler('myErrorHandler');
trigger_error('This is a E_USER_NOTICE level error.');
echo "This will never be executed.";
?>
Working Example
- 1. Jak zrobić wyjście GCC na standardowe wyjście?
- 2. Jak zrobić schemat hhm2ddl schemaExport do logowania na standardowe wyjście?
- 3. Jak eksportować wyjście Selenium do PHP?
- 4. Jak uzyskać wyjście z php do komórki?
- 5. PHP get browser: mylące wyjście
- 6. PHP - wyjście z bloku IF
- 7. Jak zrobić polecenie strtr na UTF-8 w PHP?
- 8. jak ukryć wyjście systemowe()
- 9. Jak zmienić wyjście mysql na podstawie wartości
- 10. Jak zrobić naturalną klasę String w PHP
- 11. Jak przepisać wyjście dla pętli for na wyjście Stream?
- 12. PHP - eksplodować wartości w tablicy, wyjście na karcie oddzielone plik
- 13. Dlaczego PHP-FPM prefiksuje ostrzeżenie podczas zapisu na standardowe wyjście?
- 14. grep wyjście na tablicy
- 15. Jak wykrywać wyjście aplikacji na Androida?
- 16. PHP CURL - Puste wyjście bez błędu
- 17. Jak zrobić tekst na całej jego szerokości?
- 18. Wyświetlacz Wyjście php-cli w kolumnach
- 19. Jak zrobić wrażliwe na płótno
- 20. Jak wyjście ogromny plik z PHP bez wyczerpaniu pamięci
- 21. Strumień FTP do pobrania na wyjście
- 22. Jak przetestować kod zapisujący na standardowe wyjście?
- 23. Jak zrobić contentInset na NSScrollView na Macu
- 24. Jak zrobić przycisk "rejestracja z Githubem", tak jak na Coderwall?
- 25. Jak mogę dostosować wyjście Jenkinsa?
- 26. `npm install` Wyjście na Jenkins
- 27. Jak przechowywać wyjście recv()?
- 28. Python 2.x - Napisz wyjście binarne na standardowe wyjście?
- 29. Jak zrobić json api
- 30. Jak interpretować wyjście TensorFlow?
Dlaczego trzeba ograniczyć to do własnych funkcji? Jeśli podstawowa funkcja zgłasza E_NOTICE, zazwyczaj oznacza to, że używasz go nieprawidłowo (w twojej własnej funkcji). Myślę więc, że powinieneś chcieć złapać wszystkie E_NOTICE. O ile nie uruchomisz ręcznego wyzwalania za pomocą 'trigger_error', w takim przypadku powinieneś wywołać E_USER_NOTICE, co łatwo jest rozróżnić. – deceze
Przede wszystkim myślałem o tym, aby wyjść z E_NOTICE na moje funkcje, przynajmniej niektóre z nich. Myślę, że nie ma sensu pisać wyjątków dla E_USER_NOTICE, ponieważ w tym przypadku każdy programista dąży do tego, aby naprawdę wprowadzić to zawiadomienie do pracy i kontynuować wykonywanie. – rsk82
"Zawiadomienia tylko w moich funkcjach" Czy masz na myśli, że chcesz je sam wywołać (http://il2.php.net/manual/en/function.trigger-error.php)? lub są one normalnym "rdzeniem" 'E_NOTICE', które występują w twoich funkcjach? –