Nette 2.3: Nette\Image: problém s uploadem poškozeného obrázku
- Eda
- Backer | 220
Ahoj.
- Nainstaluju sandbox (Nette 2.3).
- Do přihlašovacího formuláře přidám fileUpload.
- Do zpracování tohle:
public function signInFormSucceeded($form, $values)
{
$upload = $values->upload->getTemporaryFile();
$image = Nette\Utils\Image::fromFile($upload);
}
- Uploadnu tam tento (poškozený) soubor: http://evidencia-dopravcov-git.bmhd.cz/…/92/9199.jpg
- Dostanu PHP chybu:
Parse Error: imagecreatefromjpeg(): gd-jpeg, libjpeg: recoverable error: 4r
Když koukám na implementaci třídy Image, byl tam nedávno přidán error
handling:
https://github.com/…ls/Image.php#L174
Pokud to správně chápu, podobné chyby by to mělo odchytávat a přebalovat na ImageException.
To by bylo skvělé, protože ImageException můžu jednoduše ve své aplikaci odchytit, u chyby je to problematičtější.
Jsou všechny mé úvahy správné a je to opravdu bug, nebo jsem někde udělal chybu?
Díky.
Používám PHP 5.5.9, obdobné chování má i stabilní verze Nette 2.2.
- David Grudl
- Nette Core | 8228
Na 2.2 to vyhodí warning, na 2.3 ImageException. Proč tam máš parse error netuším.
- Eda
- Backer | 220
Zkoušel jsem dát dump do error handleru v nettím Callback.php:
public static function invokeSafe($function, array $args, $onError)
{
$prev = set_error_handler(function($severity, $message, $file) use ($onError, & $prev) {
dump(func_get_args());die;
if ($file === __FILE__ && $onError($message, $severity) !== FALSE) {
return;
} elseif ($prev) {
return call_user_func_array($prev, func_get_args());
}
return FALSE;
});
try {
$res = call_user_func_array($function, $args);
restore_error_handler();
return $res;
} catch (\Exception $e) {
restore_error_handler();
throw $e;
}
}
A ten handler se vůbec nezavolá. Proto není ani vyhozena exceptiona.
@enumag S touto direktivou to projde bez chyb. Já bych se ale spíše chtěl o té chybě nějak dovědět, než ji ignorovat. Ale díky za námět :-)
Editoval Eda (8. 2. 2015 22:56)
- Eda
- Backer | 220
Laděnka, co mi to háže:
http://leteckaposta.cz/563473357
(Nette 2.3dev, PHP 5.5.9)
Přehlížím něco zásadního?
Edit: fix odkazu na laděnku.
Editoval Eda (9. 2. 2015 1:14)