readImageBlob($image_data); $imagick->stripImage(); // nettoyage métadonnées $imagick->setImageFormat('jpeg'); $imagick->setImageCompression(Imagick::COMPRESSION_JPEG); $imagick->setImageCompressionQuality(85); // optionnel $imagick->writeImage($local_path); // enregistrement $imagick->clear(); $imagick->destroy(); return true; } catch (Exception $e) { return false; } } function curlDownloadImage(string $url, $maxRetries = 3, $timeout = 10): string|false { $attempt = 0; $imageData = false; while($attempt < $maxRetries) { $ch = curl_init($url); // instance de CurlHandle curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'TinyMCE-Image-Downloader'); $imageData = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $curlError = curl_error($ch); curl_close($ch); if($imageData !== false && $httpCode >= 200 && $httpCode < 300){ return $imageData; } $attempt++; sleep(1); } return false; // échec après trois tentatives } if(isset($_GET['action']) && $_GET['action'] == 'editor_submit'){ // récupération des données $data = file_get_contents('php://input'); $json = json_decode($data, true); if(json_last_error() === JSON_ERROR_NONE) { // Traitement côté serveur $articleId = $json['id']; $content = $json['content']; // retour au client echo json_encode(['success' => true]); } else{ echo json_encode(['success' => false, 'message' => 'Erreur de décodage JSON']); } die; } elseif(isset($_GET['action']) && $_GET['action'] == 'delete_article'){ // récupération des données $post = json_decode(file_get_contents('php://input'), true); if(json_last_error() === JSON_ERROR_NONE){ // Traitement côté serveur $success = true; // retour au client if($success) { echo json_encode(['success' => true]); } else { http_response_code(500); echo json_encode(['success' => false, 'message' => 'Erreur lors de la suppression de l\'article.']); } } die; } elseif(isset($_GET['action']) && $_GET['action'] == 'upload_image'){ if (isset($_FILES['file'])) { $file = $_FILES['file']; $dest = 'images/'; if(!is_dir($dest)) { // Vérifier si le répertoire existe, sinon le créer mkdir($dest, 0777, true); } $file_path = 'images/' . uniqid() . '.jpg'; if(imagickCleanImage(file_get_contents($file['tmp_name']), $file_path)){ // recréer l’image pour la nettoyer $image_url = str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']); echo json_encode(['location' => $image_url . $file_path]); // renvoyer l'URL de l'image téléchargée } else{ http_response_code(500); echo json_encode(['message' => 'Erreur image non valide']); } } else{ http_response_code(400); echo json_encode(['message' => 'Erreur 400: Bad Request']); } die; } elseif(isset($_GET['action']) && $_GET['action'] == 'upload_image_url'){ $json = json_decode(file_get_contents('php://input'), true); if(isset($json['image_url'])){ $image_data = curlDownloadImage($json['image_url']); // téléchargement de l’image par le serveur avec cURL au lieu de file_get_contents if($image_data === false){ http_response_code(400); echo json_encode(['message' => "Erreur, le serveur n'a pas réussi à télécharger l'image."]); die; } $local_path = 'images/' . uniqid() . '.jpg'; if(imagickCleanImage($image_data, $local_path)){ // recréer l’image pour la nettoyer echo json_encode(['location' => $local_path]); // nouvelle adresse } else{ http_response_code(500); echo json_encode(['message' => 'Erreur image non valide']); } } else{ echo json_encode(['message' => 'Erreur 400: Bad Request']); } die; } ?>
Contenu de l'article 1.
Contenu de l'article 2.