Add logging & some better error handling
This commit is contained in:
		
							parent
							
								
									9de91033ba
								
							
						
					
					
						commit
						62221d04cd
					
				@ -6,7 +6,8 @@
 | 
			
		||||
        "vlucas/phpdotenv": "^5.5",
 | 
			
		||||
        "ext-gd": "*",
 | 
			
		||||
        "ext-pdo": "*",
 | 
			
		||||
        "ext-pdo_sqlite": "*"
 | 
			
		||||
        "ext-pdo_sqlite": "*",
 | 
			
		||||
        "psr/log": "^3.0"
 | 
			
		||||
    },
 | 
			
		||||
    "autoload": {
 | 
			
		||||
        "psr-4": {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										52
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										52
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							@ -4,7 +4,7 @@
 | 
			
		||||
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
 | 
			
		||||
        "This file is @generated automatically"
 | 
			
		||||
    ],
 | 
			
		||||
    "content-hash": "35cc1fc18887fe14e702beb8a8486527",
 | 
			
		||||
    "content-hash": "2269f5deec22d5f78ed3c229cddb1359",
 | 
			
		||||
    "packages": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "graham-campbell/result-type",
 | 
			
		||||
@ -384,6 +384,56 @@
 | 
			
		||||
            },
 | 
			
		||||
            "time": "2021-11-05T16:47:00+00:00"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "psr/log",
 | 
			
		||||
            "version": "3.0.0",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://github.com/php-fig/log.git",
 | 
			
		||||
                "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
 | 
			
		||||
            },
 | 
			
		||||
            "dist": {
 | 
			
		||||
                "type": "zip",
 | 
			
		||||
                "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
 | 
			
		||||
                "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
 | 
			
		||||
                "shasum": ""
 | 
			
		||||
            },
 | 
			
		||||
            "require": {
 | 
			
		||||
                "php": ">=8.0.0"
 | 
			
		||||
            },
 | 
			
		||||
            "type": "library",
 | 
			
		||||
            "extra": {
 | 
			
		||||
                "branch-alias": {
 | 
			
		||||
                    "dev-master": "3.x-dev"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "autoload": {
 | 
			
		||||
                "psr-4": {
 | 
			
		||||
                    "Psr\\Log\\": "src"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
            "license": [
 | 
			
		||||
                "MIT"
 | 
			
		||||
            ],
 | 
			
		||||
            "authors": [
 | 
			
		||||
                {
 | 
			
		||||
                    "name": "PHP-FIG",
 | 
			
		||||
                    "homepage": "https://www.php-fig.org/"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "description": "Common interface for logging libraries",
 | 
			
		||||
            "homepage": "https://github.com/php-fig/log",
 | 
			
		||||
            "keywords": [
 | 
			
		||||
                "log",
 | 
			
		||||
                "psr",
 | 
			
		||||
                "psr-3"
 | 
			
		||||
            ],
 | 
			
		||||
            "support": {
 | 
			
		||||
                "source": "https://github.com/php-fig/log/tree/3.0.0"
 | 
			
		||||
            },
 | 
			
		||||
            "time": "2021-07-14T16:46:02+00:00"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "symfony/polyfill-ctype",
 | 
			
		||||
            "version": "v1.27.0",
 | 
			
		||||
 | 
			
		||||
@ -3,10 +3,12 @@ error_reporting(E_ERROR | E_PARSE);
 | 
			
		||||
 | 
			
		||||
require_once './vendor/autoload.php';
 | 
			
		||||
 | 
			
		||||
use ImageResizer\Lib\FileLogger;
 | 
			
		||||
use ImageResizer\Lib\Resizer;
 | 
			
		||||
use ImageResizer\Lib\SqliteImageDb;
 | 
			
		||||
use ImageResizer\Models\ResizeParams;
 | 
			
		||||
 | 
			
		||||
$logger = new FileLogger("resizer.log");
 | 
			
		||||
$dotenv = Dotenv\Dotenv::createImmutable([__DIR__, __DIR__ . "/.."]);
 | 
			
		||||
$dotenv->load();
 | 
			
		||||
 | 
			
		||||
@ -15,6 +17,12 @@ $imageDb = new SqliteImageDb(new PDO("sqlite:{$_ENV["db_name"]}"));
 | 
			
		||||
$imgPath = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
 | 
			
		||||
$params = new ResizeParams($_GET);
 | 
			
		||||
 | 
			
		||||
$resizer = new Resizer($imageDb);
 | 
			
		||||
$resizer = new Resizer($imageDb, $logger);
 | 
			
		||||
 | 
			
		||||
echo $resizer->performResize($imgPath, $params);
 | 
			
		||||
try {
 | 
			
		||||
    $resizer->performResize($imgPath, $params);
 | 
			
		||||
} catch (\Exception $e) {
 | 
			
		||||
    $logger->error($e->getMessage());
 | 
			
		||||
    http_response_code(500);
 | 
			
		||||
    echo "Internal Server Error";
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								src/Lib/FileLogger.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/Lib/FileLogger.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
<?php declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace ImageResizer\Lib;
 | 
			
		||||
 | 
			
		||||
use DateTime;
 | 
			
		||||
use Psr\Log\AbstractLogger;
 | 
			
		||||
use Stringable;
 | 
			
		||||
 | 
			
		||||
class FileLogger extends AbstractLogger
 | 
			
		||||
{
 | 
			
		||||
    function __construct(private readonly string $filename = 'php://stdout') {}
 | 
			
		||||
    public function log($level, Stringable|string $message, array $context = []): void
 | 
			
		||||
    {
 | 
			
		||||
        $timestamp = new DateTime();
 | 
			
		||||
        $callingClass = debug_backtrace()[2]['class'];
 | 
			
		||||
        $callingFunction = debug_backtrace()[2]['function'];
 | 
			
		||||
        $log = $timestamp->format(DATE_ATOM) . " [$level] $callingClass::$callingFunction $message " . json_encode($context);
 | 
			
		||||
        fwrite(fopen($this->filename, 'w'), $log . PHP_EOL);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -6,10 +6,13 @@ namespace ImageResizer\Lib;
 | 
			
		||||
 | 
			
		||||
use ImageResizer\Models\ResizeParams;
 | 
			
		||||
use ImageResizer\Models\Image;
 | 
			
		||||
use Psr\Log\AbstractLogger;
 | 
			
		||||
 | 
			
		||||
class Resizer
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        private readonly ImageDb $imageDb
 | 
			
		||||
        private readonly ImageDb $imageDb,
 | 
			
		||||
        private readonly AbstractLogger $logger,
 | 
			
		||||
    )
 | 
			
		||||
    {}
 | 
			
		||||
 | 
			
		||||
@ -20,7 +23,7 @@ class Resizer
 | 
			
		||||
    {
 | 
			
		||||
        // Check if the image has already been processed
 | 
			
		||||
        if ($image = $this->imageDb->findImage($path, $params)) {
 | 
			
		||||
 | 
			
		||||
            $this->logger->info("Found existing image", ['path'=>$path, 'params'=>$params]);
 | 
			
		||||
            header("Content-type: {${$image->getMime()}}");
 | 
			
		||||
            return base64_decode($image->encode(75));
 | 
			
		||||
        }
 | 
			
		||||
@ -28,6 +31,7 @@ class Resizer
 | 
			
		||||
        // Fetch the image at the given URL
 | 
			
		||||
        $original_img = Image::fromUrl($_ENV['ROOT_DOMAIN'] . $path);
 | 
			
		||||
        $converted = $this->createVariant($original_img, $params);
 | 
			
		||||
        $this->logger->info("Created variant", ['path'=>$path, 'params'=>$params]);
 | 
			
		||||
 | 
			
		||||
        // Store the image in the database
 | 
			
		||||
        $this->imageDb->saveImage(
 | 
			
		||||
@ -35,6 +39,7 @@ class Resizer
 | 
			
		||||
            $params,
 | 
			
		||||
            $converted
 | 
			
		||||
        );
 | 
			
		||||
        $this->logger->info("Saved image for $path");
 | 
			
		||||
 | 
			
		||||
        header("Content-type: {$original_img->getMime()}");
 | 
			
		||||
        return base64_decode($converted);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user