case 'image/jpeg':
$prev_eh = set_error_handler(function ($no, $str, $file) {
// GdException где-нибдуь выше определите как class GdException extends RuntimeException {};
throw new GdException();
}, E_WARNING);
try {
$this->image = imagecreatefromjpeg($this->filename);
} catch (GdException $e) {
// обработка битой картинки - например, через GraphicsMagick
};
set_error_handler($prev_eh);
break;
function check(array $p, array $a)
{
$stack = new SplStack();
foreach (array_reverse($a) as $i) {
$stack->push($i);
}
$top = $stack->pop();
foreach ($p as $i) {
if ($i == $top) {
if ($stack->isEmpty()) {
return true;
}
$top = $stack->pop();
}
}
return $stack->isEmpty();
}
assert(check($pattern, $ar));
assert(!check($pattern, $arFail));
#auth.conf
map $user_id:$request_uri $allow {
default 0;
1234:/path/page1.html 1;
1234:/path/page2.html 1;
5678:/path/page1.html 1;
...
}
#host.conf
include "auth.conf";
server {
listen 80;
server_name host.org;
root /path/to/static/pages;
location / {
auth_request /_auth;
}
location = /_auth {
if ($allow) {
return 200;
}
return 403;
}
}
от этого растет autoincrement
в случае ошибки можно просто напросто затереть данные, а не обновить и добавить
begin;
delete from `options` where `product_id` = 123;
insert into `options` (`name`, ...) values ('opt1', ...), ('opt2', ...);
commit;