The code cfolderResizeImage() will enable you to resize the source image with keeping aspect ratio in PHP.

function cfolderResizeImage($file, $target_with_no_ext, $target_width = 40, $target_height = 40)
{
    $source_properties = getimagesize($file);
    $image_type = $source_properties[2];
    if( $image_type == IMAGETYPE_JPEG )
    {  
        $image_resource_id = imagecreatefromjpeg($file); 
        $target_layer = fn_resize($image_resource_id,$source_properties[0],$source_properties[1], $target_width, $target_height);
        imagejpeg($target_layer, $target_with_no_ext. ".jpg", $target_width, $target_height);
    }
    elseif( $image_type == IMAGETYPE_GIF )
    { 
        $image_resource_id = imagecreatefromgif($file);
        $target_layer = fn_resize($image_resource_id,$source_properties[0],$source_properties[1], $target_width, $target_height);
        imagegif($target_layer, $target_with_no_ext. ".gif", $target_width, $target_height);
    }
    elseif( $image_type == IMAGETYPE_PNG )
    {
        $image_resource_id = imagecreatefrompng($file);
        $target_layer = fn_resize($image_resource_id,$source_properties[0],$source_properties[1], $target_width, $target_height);
        imagepng($target_layer, $target_with_no_ext. ".png", $target_width, $target_height);
    }
}
 
function fn_resize($image_resource_id, $width, $height, $target_width, $target_height)
{
    $h = $height * $target_width / $width;
    if ($h>$target_height)
    {
        $w = $target_width;
    }
    else
    {
        $h = $target_height;
        $w = $width * $target_height / $height;
    }
 
    $target_layer=imagecreatetruecolor($w,$h);
    imagecopyresampled($target_layer,$image_resource_id,0,0,0,0,$w,$h, $width,$height);
    return $target_layer;
}