Bonjour à tous,
Lors du déploiement sur Heroku, me revient un message "php floating deprecated error" au moment où rentre en jeu ma fonction de création d'images randomisée... J'ai bien compris ce qui se passe, les floats perdent la précision lorsque convertis en integer, mais alors comment remédier à cela dans une fonction comme celle là ?
Du coup, je ne vois pas les images qui sont créées, elles sont probablement corrompues vu qu'en local par contre ça marche nickel ...
D'ailleurs j'aimerai savoir pourquoi lors du déploiement Heroku détecte et renvoie des messages d'erreur à tout va, des fois certains sans gravité, alors que je n'ai jamais aucun retour en dev...
Serait-ce parceque la version de Symfony n'est peut être pas la même ? (je suis en 6.2).
J'aimerai bien bénéficier des mêmes messages d'erreur en dev !, merci
<?php
namespace App\Service;
use Exception;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use function PHPUnit\Framework\fileExists;
class PicturesService
{
private $params;
public function __construct(ParameterBagInterface $params)
{
$this->params = $params;
}
public function add(UploadedFile $picture, ?string $folder = '', ?int $width = 250, ?int $height = 250, $moveFile = true)
{
//Création d'un nouveau nom d'image
$fichier = md5(uniqid(rand(), true)) . '.webp';
//Récupération des infos de l'image
$picture_infos = getimagesize($picture);
if ($picture_infos === false) {
throw new Exception('Format d\'image incorrect');
}
//Vérification du format de l'image
switch ($picture_infos['mime']) {
case 'image/png':
$picture_source = imagecreatefrompng($picture);
break;
case 'image/jpeg':
$picture_source = imagecreatefromjpeg($picture);
break;
case 'image/webp':
$picture_source = imagecreatefromwebp($picture);
break;
case 'image/gif':
$picture_source = imagecreatefromwebp($picture);
break;
default:
throw new Exception('Format d\'image incorrect');
}
//Recadrer l'image et récupération des dimensions
$imageWidth = $picture_infos[0];
$imageHeight = $picture_infos[1];
//Vérification de l'orientation de l'image
switch ($imageWidth <=> $imageHeight) {
case -1: //Portrait
$squareSize = $imageWidth;
$src_x = 0;
$src_y = (int)($imageHeight - $squareSize) / 2;
break;
case 0: //Carré
$squareSize = $imageWidth;
$src_x = 0;
$src_y = 0;
break;
case 1: //Paysage
$squareSize = $imageHeight;
$src_x = (int)($imageWidth - $squareSize) / 2;
$src_y = 0;
break;
}
//Création d'une nouvelle image vierge
$resized_picture = imagecreatetruecolor($width, $height);
imagecopyresampled($resized_picture, $picture_source, 0, 0, $src_x, $src_y, $width, $height, $squareSize, $squareSize);
//Création du chemin
$path = $this->params->get('images_directory') . $folder;
//Création du dossier
if (!file_exists($path . '/mini/')) {
mkdir($path . '/mini/', 0755, true);
}
//Stockage de l'image recadrée
imagewebp($resized_picture, $path . '/mini/' . $width . 'x' . $height . '-' . $fichier);
if ($moveFile) {
$picture->move($path . '/', $fichier);
}
return $fichier;
}
public function delete(string $fichier, ?string $folder = '', ?int $width = 250, ?int $height = 250)
{
if ($fichier !== 'default.webp') {
$success = false;
$path = $this->params->get('images_directory') . $folder;
$thumbnail = $path . '/mini/' . $width . 'x' . $height . '-' . $fichier;
if (fileExists($thumbnail)) {
unlink($thumbnail);
$success = true;
}
$original = $path . '/' . $fichier;
if (fileExists($original)) {
unlink($original);
$success = true;
}
return $success;
}
return false;
}
}