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

Langage PHP Discussion :

readdir() qui à la fin des fichiers à lire en lit un inexistant


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut readdir() qui à la fin des fichiers à lire en lit un inexistant
    Bonjour, depuis ce matin je n'arrive pas à faire partir ces warning :

    Warning: getimagesize(C:/wamp/www/...) [function.getimagesize]: failed to open stream: Permission denied in C:\wamp\www\...

    Warning: Division by zero in C:\wamp\www\...

    Warning: Division by zero in C:\wamp\www\...
    Le "division by 0" vient du fait que l'image n'existe pas, mais je n'arrive pas à lever l'exception avec un file_exists par exemple ou autre chose.

    Voilà à mon avis les lignes de codes où je dois changer quelque chose, j'ai déjà essayé de rajouter && $file!=0 mais ça m'affiche page blanche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	while (($file = readdir($dh)) !== false && $file!="") {
     
    		if ($file != '.' && $file != '..' && $file!='') {

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Montres-nous plutôt que le code où tu appelles getimagesize car si tu rentres dans le if de ton while, c'est que ton fichier existe et est valide.

  3. #3
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    d'accord et merci pour ton aide, pour expliquer, je veux me servir d'un script pour redimensionner des images trop importantes d'un dossier "images" dans un dossier "miniatures"

    je divise le code en 3 pour faire plus clair :

    la fonction recadrement() que j'ai faite pour réduire une image en la gardant dans ses proportions (je récupère largeur et hauteur et de la nouvelle image que j'entrerai dans le width et height de la balise img)

    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
    function recadrement($pathIm, $largeur, $hauteur){ 
     
    		if(!file_exists($pathIm))
    			$pathIm=$_SERVER["DOCUMENT_ROOT"]."/TEST/images/standard.jpg";
     
    		$size=getimagesize($pathIm);
     
    		if($size[0]/$largeur>=$size[1]/$hauteur){
    			$rapport=$size[0]/$largeur;						
    		}
    		else{
    			$rapport=$size[1]/$hauteur;
    		}
     
    		$x=$size[0]/$rapport;
    		$y=$size[1]/$rapport;
     
    		$dim=array("width"=>$x, "height"=>$y);
     
    		return $dim;
    }
    Ca c'est la fonction get_thumbnail() que l'on m'a passé et que j'ai débuggé par des echo car je n'ai pas l'habitude de manipuler opendir etc...

    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
    function get_thumbnail($imagefile,$dim){
    $width=50;$height=50;
    	$cfgThumbnailDir = $_SERVER["DOCUMENT_ROOT"]."/TEST/images/miniatures/";
    	$cfgDocumentRoot = $_SERVER["DOCUMENT_ROOT"]."/TEST/images/";
     
    	if(substr($imagefile,0,1)=="/") $imagefile=substr($imagefile,1); // supprime le caractère '/' éventuel en debut de chaine
    	$file =  $cfgDocumentRoot.$imagefile; // chemin complet de l'image
     
    	$tab=explode("//",$file);
    	$file=$tab[0]."/".$tab[1];
     
    	echo $file."<br>";
    	if(!file_exists($file)) return(false);
    	$ext = substr($file,strrpos($file,"."));
     
    	// récupère la taille de l'image d'origine:
     
     
    	$size = getimagesize($file);
    	$ow = $size[0];
    	$oh = $size[1];
    	// calcul de la taille de la vignette
    	if($height==0 && $width==0) {$width = $ow; $height = $oh; }
    	if($height==0) $height=round($oh*($width/$ow));
    	if($width==0) $width=round($ow*($height/$oh));
     
     
     
    	$dst=$cfgThumbnailDir.$imagefile;
    	$ext = substr($dst,strrpos($dst,"."));
    	if($ext!=".jpeg" && $ext!=".jpg" && $ext!=".gif") return(false);
    	//$dst = str_replace($ext,"_".$width."_".$height.$ext,$dst);
    	$ret = substr($dst,strlen($cfgDocumentRoot)-1);
     
    	$im = imagecreatefromjpeg( "$file" );
    	$ox = imagesx( $im );
    	$oy = imagesy( $im );
    	$nx = $dim["width"];
    	$ny = $dim["height"];
    	$nm = imagecreatetruecolor( $nx, $ny );
    	imagecopyresized( $nm, $im, 0, 0, 0, 0, $nx, $ny, $ox, $oy );
    	imagejpeg( $nm, "$dst" );
     
    	// Vérifions si la vignette existe déjà et si elle plus récente que l'image d'origine :
    	//echo "$dst ?...";
     
    	if(file_exists($dst)){
    		$dateImage = filemtime ($file); 
    		$dateThumb = filemtime ($dst); 
    		//echo "<br>date de '$file'=$dateImage";
    		//echo "<br>date de '$dst'=$dateThumb";
    		if($dateThumb > $dateImage) return($ret); // on retourne le chemin de la vignette existante
    	}
     
    	$command = "convert $file -geometry ".$width."x".$height."! $dst";
    	//echo "<br>command = $command";
    	exec($command); // création de la vignette
    	return($ret); // on retourne le chemin de la vignette créée
    }
    Et enfin le code qui manipule les deux fonctions :

    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
    $chemin = $_SERVER["DOCUMENT_ROOT"]."/TEST/images/";
     
    if ($dh = opendir($chemin)) {
     
    	while (($file = readdir($dh)) !== false && $file!="") {
     
    		if ($file != '.' && $file != '..' && $file!='') {
     
    			$path=$chemin.$file;
     
    			$tab=explode("//",$path);
    			$path=$tab[0]."/".$tab[1];
     
    			if (file_exists($path)) {
     
    				$dim=recadrement($path,148,148); 
    				get_thumbnail($file,$dim);
    			}
    		}
    	}
    	closedir($dh);
    }
    Bon il y a des trucs que j'ai remanié, mis en commentaire, parce que j'essayais de m'en sortir mais j'aurais peut être pas dû y toucher.

    Je précise que ça marche, j'obtiens bien mes images recadrées comme il faut. Mais à la fin ça fait encore un tour si je peux me permettre l'expression alors qu'il n'y a plus de fichier dans le dossier. (ni de fichier caché je pense puis il aurait un nom)

    Et comme je risque de m'en servir souvent de ce script, j'aimerais qu'il soit sans erreur.

    Merci

  4. #4
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Ton file_exists dans ta boucle while ne sert à rien, puisque le fichier existe forcément (t'es en train de le parcourir).

    Rajoutes ceci avant ton getimagesize.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(!file_exists($pathIm)) return;
    $size=getimagesize($pathIm);

  5. #5
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    Hélas toujours le même warning me disant

    Warning: getimagesize(C:/wamp/www/TEST/images/miniatures) [function.getimagesize]: failed to open stream: Permission denied in C:\wamp\www\TEST\script.php on line 8
    la ligne 8 correspondant à ceci de la fonction encadrement()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $size=getimagesize($pathIm);
    Et après forcément si il n'a pas l'image, il doit prendre la dimension hauteur comme largeur comme un 0 et j'ai donc :

    Warning: Division by zero in C:\wamp\www\TEST\script.php on line 17

  6. #6
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    ha

    Je sais d'où vient le souci, tu ne différencie pas les dossiers des fichiers lorsque tu parcour ton arbo

    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
     
    $chemin = $_SERVER["DOCUMENT_ROOT"]."/TEST/images/";
     
    if ($dh = opendir($chemin)) {
     
    	while (($file = readdir($dh)) !== false && $file!="") {
     
    		if ($file != '.' && $file != '..' && $file!='' && !is_dir($chemin.$file)) {
     
    			$path=$chemin.$file;
     
    			$tab=explode("//",$path);
    			$path=$tab[0]."/".$tab[1];
     
    			$dim=recadrement($path,148,148); 
                            get_thumbnail($file,$dim);		
    		}
    	}
    	closedir($dh);
    }

  7. #7
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    D'accord merci beaucoup

    Néanmoins, j'ai encore un petit soucis mais c'est parce que j'ai encore l'histoire du slash en trop comme je l'ai traité que après dans le code mais je le règlerai demain.

    Bonne soirée !

Discussions similaires

  1. Code rajouté à la fin des fichiers javascript
    Par vladock dans le forum Sécurité
    Réponses: 15
    Dernier message: 23/11/2010, 11h12
  2. lire le nom des fichiers qui se trouvent dans un dossier
    Par foufoulol dans le forum Langage
    Réponses: 6
    Dernier message: 05/05/2008, 11h38
  3. Réponses: 2
    Dernier message: 07/06/2006, 11h44
  4. Réponses: 3
    Dernier message: 12/04/2006, 20h44

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