Здравствуйте! Нужно конвертировать картинки в webp, делаю это своим скриптом. Проблема в том, что в некоторых случаях исходников не существует и они генерируются на лету другим скриптом.
Мне бы как-то задать условие, по которому бы проверялось, если существует файл по строке запроса - выполнять один скрипт, если не существует - выполнять другой соответственно.
Пытался реализовать вот такой конструкцией, но складывается ощущение, что управление всегда уходит в последний скрипт ( @shop_thumb ), а до основного ( @webp_gen ) дело вовсе не доходит.
# рулим правилами для преобразования
location ~* ^.+\.(jpe?g|png)$ {
types {
image/jpeg jpeg jpg;
image/png png;
image/webp webp;
}
error_page 404 = @shop_thumb;
expires 365d;
try_files $uri.webp @webp_gen @shop_thumb;
}
# локейшн для конвертирования
# по идее, если сорца не существует, webp-converter.php отдаст 404 и управление уйдёт в @shop_thumb
location @webp_gen {
error_page 404 = @shop_thumb;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php/php7.2-fpm-ers.sock;
fastcgi_param SCRIPT_NAME /webp/webp-converter.php;
fastcgi_param SCRIPT_FILENAME $document_root/webp/webp-converter.php;
}
# локейшн для генерации и сохранения сорца. Должен отрабатывать только тогда,
# когда $request_uri не существует.
# А затем, после повторного обращения, уже должно срабатывать @webp_gen
location @shop_thumb {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php/php7.2-fpm-ers.sock;
fastcgi_param SCRIPT_NAME /products/thumb.php;
fastcgi_param SCRIPT_FILENAME $document_root/products/thumb.php;
}
А вот часть кода webp-converter.php - если что-то идёт не так, возвращается 404:
$docRoot = rtrim($_SERVER["DOCUMENT_ROOT"], '/');
$requestUriNoQS = explode('?', $_SERVER['REQUEST_URI'])[0];
$relativeSrcPath = urldecode($requestUriNoQS);
$source = $docRoot . $relativeSrcPath;
if (!file_exists($source)){
// нужно записать в лог и крешнуться
if ($debugmode){
writeLog('Нет файла "'.$source.'"');
}
header("HTTP/1.0 404 Not Found");
exit;
}
Можете подсказать, что я делаю неправильно?