From 9341fe9142b47e3e4221338f62a26607c4e1969c Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Mon, 11 Jan 2016 21:56:04 +0000
Subject: [PATCH] Perf issue sur les filtres images appliques sur des images
 distantes en 404 :
 [(#VAL{http://example.org/fichier_inexistant.png}|image_reduire{64,64})]
 provoquait 3 operations file_exists sur
 http://example.org/fichier_inexistant.png.src que PHP interprete en faisant 3
 hits http sur le fichier sauf si PHP bloque ce type d'operation.

---
 ecrire/inc/filtres_images_lib_mini.php | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/ecrire/inc/filtres_images_lib_mini.php b/ecrire/inc/filtres_images_lib_mini.php
index a7852db42e..bdeb01df58 100644
--- a/ecrire/inc/filtres_images_lib_mini.php
+++ b/ecrire/inc/filtres_images_lib_mini.php
@@ -605,8 +605,8 @@ function _image_gd_output($img, $valeurs, $qualite = _IMG_GD_QUALITE) {
 function reconstruire_image_intermediaire($fichier_manquant) {
 	$reconstruire = array();
 	$fichier = $fichier_manquant;
-	while (
-		!@file_exists($fichier)
+	while (strpos($fichier,"://")===false
+		and !@file_exists($fichier)
 		and lire_fichier($src = "$fichier.src", $source)
 		and $valeurs = unserialize($source)
 		and ($fichier = $valeurs['fichier']) # l'origine est connue (on ne verifie pas son existence, qu'importe ...)
@@ -642,7 +642,8 @@ function reconstruire_image_intermediaire($fichier_manquant) {
  *     Chemin du fichier d'image calculé
  **/
 function ramasse_miettes($fichier) {
-	if (!lire_fichier($src = "$fichier.src", $source)
+	if (strpos($fichier,"://")!==false
+		or !lire_fichier($src = "$fichier.src", $source)
 		or !$valeurs = unserialize($source)
 	) {
 		return;
@@ -696,7 +697,8 @@ function image_graver($img) {
 		$fichier = $img;
 	}
 	# si jamais le fichier final n'a pas ete calcule car suppose temporaire
-	if (!@file_exists($fichier)) {
+	# et qu'il ne s'agit pas d'une URL
+	if (strpos($fichier,"://")===false and !@file_exists($fichier)) {
 		reconstruire_image_intermediaire($fichier);
 	}
 	ramasse_miettes($fichier);
-- 
GitLab