IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

Limiter les dimensions de l'image lors de l'upload [CKEditor]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 58
    Points
    58
    Par défaut Limiter les dimensions de l'image lors de l'upload
    Bonjour, bonjour tout le monde !

    Je travaille actuellement sur un site web d'un client qui souhaite y intégrer FCKEditor comme éditeur WYSIWYG.
    J'ai pas mal touché aux nombreuses config afin qu'il corresponde au mieux à ses besoins mais je bute sur la limitation des dimensions d'une image lors de l'upload avec ImageUpload.

    Voici la partie modifiée du fichier commands.php (fckeditor/editor/filemanager/connectors/php/commands.php) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    function FileUpload( $resourceType, $currentFolder, $sCommand )
    {
    	if (!isset($_FILES)) {
    		global $_FILES;
    	}
    	$sErrorNumber = '0' ;
    	$sFileName = '' ;
    
    	if ( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) )
    	{
    		global $Config ;
    
    		$oFile = $_FILES['NewFile'] ;
    		
    		$size = getimagesize($_FILES['NewFile']['tmp_name']);
    		$width = $size[0];
    		$height = $size[1];
    		
    		if ($width <= $Config['MaxWidthImageUpload'] && $width <= $Config['MaxHeightImageUpload']) {
    
    			// Map the virtual path to the local server path.
    			$sServerDir = ServerMapFolder( $resourceType, $currentFolder, $sCommand ) ;
    	
    			// Get the uploaded file name.
    			$sFileName = $oFile['name'] ;
    			$sFileName = SanitizeFileName( $sFileName ) ;
    	
    			$sOriginalFileName = $sFileName ;
    	
    			// Get the extension.
    			$sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ;
    			$sExtension = strtolower( $sExtension ) ;
    	
    			if ( isset( $Config['SecureImageUploads'] ) )
    			{
    				if ( ( $isImageValid = IsImageValid( $oFile['tmp_name'], $sExtension ) ) === false )
    				{
    					$sErrorNumber = '202' ;
    				}
    			}
    	
    			if ( isset( $Config['HtmlExtensions'] ) )
    			{
    				if ( !IsHtmlExtension( $sExtension, $Config['HtmlExtensions'] ) &&
    					( $detectHtml = DetectHtml( $oFile['tmp_name'] ) ) === true )
    				{
    					$sErrorNumber = '202' ;
    				}
    			}
    	
    			// Check if it is an allowed extension.
    			if ( !$sErrorNumber && IsAllowedExt( $sExtension, $resourceType ) )
    			{
    				$iCounter = 0 ;
    	
    				while ( true )
    				{
    					$sFilePath = $sServerDir . $sFileName ;
    	
    					if ( is_file( $sFilePath ) )
    					{
    						$iCounter++ ;
    						$sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ;
    						$sErrorNumber = '201' ;
    					}
    					else
    					{
    						move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;
    	
    						if ( is_file( $sFilePath ) )
    						{
    							if ( isset( $Config['ChmodOnUpload'] ) && !$Config['ChmodOnUpload'] )
    							{
    								break ;
    							}
    	
    							$permissions = 0777;
    	
    							if ( isset( $Config['ChmodOnUpload'] ) && $Config['ChmodOnUpload'] )
    							{
    								$permissions = $Config['ChmodOnUpload'] ;
    							}
    	
    							$oldumask = umask(0) ;
    							chmod( $sFilePath, $permissions ) ;
    							umask( $oldumask ) ;
    						}
    	
    						break ;
    					}
    				}
    	
    				if ( file_exists( $sFilePath ) )
    				{
    					//previous checks failed, try once again
    					if ( isset( $isImageValid ) && $isImageValid === -1 && IsImageValid( $sFilePath, $sExtension ) === false )
    					{
    						@unlink( $sFilePath ) ;
    						$sErrorNumber = '202' ;
    					}
    					else if ( isset( $detectHtml ) && $detectHtml === -1 && DetectHtml( $sFilePath ) === true )
    					{
    						@unlink( $sFilePath ) ;
    						$sErrorNumber = '202' ;
    					}
    				}
    			}
    			else
    				$sErrorNumber = '202' ;
    				
    		}
    		else exit();
    	}
    	else
    		$sErrorNumber = '202' ;
    
    
    	$sFileUrl = CombinePaths( GetResourceTypePath( $resourceType, $sCommand ) , $currentFolder ) ;
    	$sFileUrl = CombinePaths( $sFileUrl, $sFileName ) ;
    
    	SendUploadResults( $sErrorNumber, $sFileUrl, $sFileName ) ;
    
    	exit ;
    }

    Puis j'ai rajouté les deux lignes suivantes dans config.php (fckeditor/editor/filemanager/connectors/php/commands.php)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $Config['MaxWidthImageUpload'] = 100;
    $Config['MaxHeightImageUpload'] = 100;
    En testant, j'ai l'impression que le code fonctionne bien, mais le fait d'uploader une image trop grande me fait planter le script - c'est le exit() -

    Je pense avoir trouvé une solution... En supprimant le exit() et en créant un nouveau $sErrorNumber dans un des fichiers de FCKEditor ce qui me permettrait d'afficher une erreur js avec un message personnalisé, mais je ne sais pas où le trouver...

    Pouvez-vous m'aider ?

    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    Problème résolu.

    Pour ceux que ça peut intéresser (et ils peuvent être nombreux...).


    Voici la solution complète :

    Fichiers à modifier :
    - fckeditor/editor/filemanager/connectors/php/commands.php
    - fckeditor/editor/filemanager/connectors/php/config.php

    commands.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    function FileUpload( $resourceType, $currentFolder, $sCommand )
    {
    	if (!isset($_FILES)) {
    		global $_FILES;
    	}
    	$sErrorNumber = '0' ;
    	$sFileName = '' ;
    
    	if ( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) )
    	{
    		global $Config ;
    
    		$oFile = $_FILES['NewFile'] ;
    		
    		$size = getimagesize($_FILES['NewFile']['tmp_name']);
    		$width = $size[0];
    		$height = $size[1];
    		
    		if ($width <= $Config['MaxWidthImageUpload'] && $width <= $Config['MaxHeightImageUpload']) {
    
    			// Map the virtual path to the local server path.
    			$sServerDir = ServerMapFolder( $resourceType, $currentFolder, $sCommand ) ;
    	
    			// Get the uploaded file name.
    			$sFileName = $oFile['name'] ;
    			$sFileName = SanitizeFileName( $sFileName ) ;
    	
    			$sOriginalFileName = $sFileName ;
    	
    			// Get the extension.
    			$sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ;
    			$sExtension = strtolower( $sExtension ) ;
    	
    			if ( isset( $Config['SecureImageUploads'] ) )
    			{
    				if ( ( $isImageValid = IsImageValid( $oFile['tmp_name'], $sExtension ) ) === false )
    				{
    					$sErrorNumber = '202' ;
    				}
    			}
    	
    			if ( isset( $Config['HtmlExtensions'] ) )
    			{
    				if ( !IsHtmlExtension( $sExtension, $Config['HtmlExtensions'] ) &&
    					( $detectHtml = DetectHtml( $oFile['tmp_name'] ) ) === true )
    				{
    					$sErrorNumber = '202' ;
    				}
    			}
    	
    			// Check if it is an allowed extension.
    			if ( !$sErrorNumber && IsAllowedExt( $sExtension, $resourceType ) )
    			{
    				$iCounter = 0 ;
    	
    				while ( true )
    				{
    					$sFilePath = $sServerDir . $sFileName ;
    	
    					if ( is_file( $sFilePath ) )
    					{
    						$iCounter++ ;
    						$sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ;
    						$sErrorNumber = '201' ;
    					}
    					else
    					{
    						move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;
    	
    						if ( is_file( $sFilePath ) )
    						{
    							if ( isset( $Config['ChmodOnUpload'] ) && !$Config['ChmodOnUpload'] )
    							{
    								break ;
    							}
    	
    							$permissions = 0777;
    	
    							if ( isset( $Config['ChmodOnUpload'] ) && $Config['ChmodOnUpload'] )
    							{
    								$permissions = $Config['ChmodOnUpload'] ;
    							}
    	
    							$oldumask = umask(0) ;
    							chmod( $sFilePath, $permissions ) ;
    							umask( $oldumask ) ;
    						}
    	
    						break ;
    					}
    				}
    	
    				if ( file_exists( $sFilePath ) )
    				{
    					//previous checks failed, try once again
    					if ( isset( $isImageValid ) && $isImageValid === -1 && IsImageValid( $sFilePath, $sExtension ) === false )
    					{
    						@unlink( $sFilePath ) ;
    						$sErrorNumber = '202' ;
    					}
    					else if ( isset( $detectHtml ) && $detectHtml === -1 && DetectHtml( $sFilePath ) === true )
    					{
    						@unlink( $sFilePath ) ;
    						$sErrorNumber = '202' ;
    					}
    				}
    			}
    			else
    				$sErrorNumber = '202' ;
    				
    		}
    		else SendError( 1, 'Les dimensions de l\'image sont incorrectes. Largeur Max : '.$Config['MaxWidthImageUpload'].'px, Hauteur Max : '.$Config['MaxHeightImageUpload'].'px' ) ; // pour plus d'infos http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Server_Side_Integration#Error_Messages
    	}
    	else
    		$sErrorNumber = '202' ;
    
    
    	$sFileUrl = CombinePaths( GetResourceTypePath( $resourceType, $sCommand ) , $currentFolder ) ;
    	$sFileUrl = CombinePaths( $sFileUrl, $sFileName ) ;
    
    	SendUploadResults( $sErrorNumber, $sFileUrl, $sFileName ) ;
    
    	exit ;
    }

    config.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // A ajouter n'importe où
    $Config['MaxWidthImageUpload'] = 100; // Largeur max en px des images
    $Config['MaxHeightImageUpload'] = 100; // Hauteur max en px des images
    Voilàààà

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    merci pour ce bout de code vraiment utile. Si, si, j'admire comment vous avez pu vous y retrouver au milleux de toutes ses fonctions. :p

    J'ai tout de même une question:
    - est-il possible mettre une fonction de redimensionnement à la place du "senderror" ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut
    Bonsoir, une petite erreur :

    Citation Envoyé par oneTime Voir le message
    commands.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function FileUpload( $resourceType, $currentFolder, $sCommand )
    {
       ....
     
            $size = getimagesize($_FILES['NewFile']['tmp_name']);
            $width = $size[0];
            $height = $size[1];
    
            if ($width <= $Config['MaxWidthImageUpload'] && $width <= $Config['MaxHeightImageUpload']) {
    .... 
               }
    $width <= $Config['MaxHeightImageUpload'] , c'est height.

    C'est mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($width <= $Config['MaxWidthImageUpload'] && $height <= $Config['MaxHeightImageUpload']) {

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Je suis très intéressé par votre mofification du fichier afin de limiter l'upload des images, le problème est que je suis avec ckEditor et non fckEditor.
    Les fichiers ne sont plus les mêmes. Quelqu'un pourrait-il m'aider pour ckEditor ?
    Merci
    Fanfan

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Peut-on limiter les dimensions d'une image lors de son affichage ?
    Par lolymeupy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 08/06/2008, 19h21
  2. Tester les dimensions d'une image lors d'un upload
    Par Lyzergik dans le forum ASP.NET
    Réponses: 3
    Dernier message: 06/08/2007, 01h00
  3. [Image] Connaitre les dimensions d'une image sans la charger
    Par FredN dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 16/01/2006, 13h06
  4. Récupérer les dimensions de mon image.
    Par Trilby dans le forum ASP
    Réponses: 3
    Dernier message: 10/02/2005, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo