Andrzej Prażmo

Andrzej Prażmo programista .NET,
właściciel firmy SEE
Software

Temat: Dzielenie przez zero

Jak się zabezpieczyć przed tym? Od razu zaznaczam, że nie mam możliwości sprawdzenia dzielnika i muszę polegać na tym, co daje PHP. Stosuję coś takiego:

ob_start();
[...]
$result = ob_get_contents();
ob_end_clean();
if (strpos($result, 'Warning: Division by zero')!==false){ ...}

Ale to nie na wszystkich serwerach działa.
Marek Karmelski

Marek Karmelski PHP Programmer,
Magento dev, Agencja
reklamowa White
Ducky

Temat: Dzielenie przez zero

Ma prawo nie działać, wszystko zależy od konfiguracji raportowania błędów w php na tych serwerach. Spróbuj ustawić error_reporting(1) albo error_reporting(E_ALL) w twoim skrypcie.
Andrzej P.:
Jak się zabezpieczyć przed tym? Od razu zaznaczam, że nie mam możliwości sprawdzenia dzielnika i muszę polegać na tym, co daje PHP. Stosuję coś takiego:

ob_start();
[...]
$result = ob_get_contents();
ob_end_clean();
if (strpos($result, 'Warning: Division by zero')!==false){ ...}

Ale to nie na wszystkich serwerach działa.
Andrzej Prażmo

Andrzej Prażmo programista .NET,
właściciel firmy SEE
Software

Temat: Dzielenie przez zero

Marek K.:
Ma prawo nie działać, wszystko zależy od konfiguracji raportowania błędów w php na tych serwerach. Spróbuj ustawić error_reporting(1) albo error_reporting(E_ALL) w twoim skrypcie.
Poradziłem sobie. Problem był z 'display_errors'. Na maszynach produkcyjnych zazwyczaj jest ustawione na 'Off'. Wystarczyło w kodzie zmienić to ustawienie.
Tomasz Zadora

Tomasz Zadora programuję

Temat: Dzielenie przez zero

Ten błąd nie jest błędem krytycznym (fatal), więc może zamiast kombinacji z funkcjami ob, lepiej zarobić try/catch?Ten post został edytowany przez Autora dnia 22.12.14 o godzinie 09:18
Andrzej Prażmo

Andrzej Prażmo programista .NET,
właściciel firmy SEE
Software

Temat: Dzielenie przez zero

Tomasz Z.:
Ten błąd nie jest błędem krytycznym (fatal), więc może zamiast kombinacji z funkcjami ob, lepiej zarobić try/catch?
Pehapowy try/catch, to raczej wydmuszka a nie rzeczywisty mechanizm wyłapywania błędów. To ci wyłapie błąd zazwyczaj tylko wtedy, gdy sam puścisz 'throwa'. Poza tym, dzielenie przez zero daje 'warninga' a nie 'error'. Zresztą, sam sobie zobacz:

try {
$a = 1/0;
}
catch (Exception $e) {
echo 'ERROR: '.$e->getMessage();
}

Zresztą, w bloku 'try' możesz sobie pisać dowolne rzeczy a on ci i tak tego nie wyłapie. Dokładnie tak, jak to opisywał ten inkasent w 'Misiu'. :)
Paweł Malisak

Paweł Malisak PHP Developer

Temat: Dzielenie przez zero

Od biedy da się to zrobić, ale nie wiem czy ma to sens w Twoim przypadku ;)

http://stackoverflow.com/questions/1241728/can-i-try-c...

Zresztą równie dobrze można ten warning przechwytywać i sprawdzać w set_error_handler().
Tomasz Zadora

Tomasz Zadora programuję

Temat: Dzielenie przez zero

Andrzej P.:

tylko wtedy, gdy sam puścisz 'throwa'. Poza tym, dzielenie przez zero daje 'warninga' a nie 'error'. Zresztą, sam sobie zobacz:


Warning to też error :)

Natomiast pewnie masz tak ustawiony serwer, że po prostu błąd typu warning nie jest raportowany:

http://php.net/manual/en/function.error-reporting.php

i stała E_WARNING

Następna dyskusja:

zlecenia.przez.net




Wyślij zaproszenie do