Page 1 sur 1

Code impur...

Posté : 19 mai 2009, 12:19
par casio
Salutations,

Etant photographe, Je planche sur une interface de gestion en PHP des galeries photos de mon book.
En plusieurs temps, pour l'instant je me concentre sur une page de backup/suppression des photos.

La commande "rename" ne semble pas fonctionner correctement, alors j'ai décidé de mettre "unlink". Par contre, "copy" fonctionne nickel.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Administration PhotoMat - Liste des vignettes</title>
</head>

<body>

<table width="660" border="0" cellspacing="0" cellpadding="0">
	<tr>
	<th>

	<?php
    $rep = '../pict/photos/';				// Dossier des photos
	$backuprep = '../admin/move/photos/';	// Dossier de destination des photos sauvegardées
	//$rep1 = substr_replace($rep, 0, -1);
    $vig = '../pict/photos/thumbs/';		// Dossier des vignettes
	$backupvig = '../admin/move/thumbs/';	// Dossier de destination des vignettes sauvegardées
	//$vig1 = substr_replace($vig, 0, -1);
    $ext = 'jpg';							// Extension recherchée
    $ipl = '8';								// Image Par Ligne(s)
    $wid = '120';							// Largeur de la vignette
    $widtab = '96%';						// Largeur du tableau
    $bor = '0';								// Bordure du tableau
    $cpd = '2';								// Bordures des cellules du tableau
	$csc = '0';								// Esapcement des cellules du tableau

  	// $xplodevig = explode('.',$lstvig2);
	
	// echo $backupvig;
	// echo $backuprep;

	$listerep = scanDir($rep);
	$extensionrep = 0;
	foreach ($listerep as &$fichrep) {
	
		/*    On ne retient que les fichiers && ceux dont l'extention est jpg ou JPG */
		if (is_file($rep . $fichrep) && preg_match('#[^·]\.jpg$#i', $fichrep)) {
			$extensionrep++;
		}	
	}
	
	$listevig = scanDir($vig);
	$extensionvig = 0;
	foreach ($listevig as &$fichvig) {
	
		/*    On ne retient que les fichiers && ceux dont l'extention est jpg ou JPG */
		if (is_file($vig . $fichvig) && preg_match('#[^·]\.jpg$#i', $fichvig)) {
			$extensionvig++;
		}
	}

	$listerepbck = scanDir($backuprep);
	$extensionrepbck = 0;
	foreach ($listerepbck as &$fichrepbck) {
	
		/*    On ne retient que les fichiers && ceux dont l'extention est jpg ou JPG */
		if (is_file($backuprep . $fichrepbck) && preg_match('#[^·]\.jpg$#i', $fichrepbck)) {
			$extensionrepbck++;
		}	
	}

	$listevigbck = scanDir($backupvig);
	$extensionvigbck = 0;
	foreach ($listevigbck as &$fichvigbck) {
	
		/*    On ne retient que les fichiers && ceux dont l'extention est jpg ou JPG */
		if (is_file($backupvig . $fichvigbck) && preg_match('#[^·]\.jpg$#i', $fichvigbck)) {
			$extensionvigbck++;
		}
	}

	echo '<div align="center">';
	echo 'Gestionnaire de contenu photo. v.0.3.<br />Mathieu CHARREYRE (c) 2009.<br /><br />';
	echo '<a href="index.php" target ="_parent">Menu principal</a><br /><br /><br />';
	echo '<table width="'.$widtab.'" border="'.$bor.'" cellpadding="'.$cpd.'" cellspacing="'.$csc.'"><tr>';
	echo '<td align="center">Nombre de photos ".jpg" :&nbsp;'.$extensionrep.'</td>';
	echo '<td align="center">Nombre de miniatures ".jpg" :&nbsp;'.$extensionvig.'</td>';
	echo '</tr><tr>';
	echo '<td align="center">Nombre de photos ".jpg" backupées :&nbsp;'.$extensionrepbck.'</td>';
	echo '<td align="center">Nombre de miniatures ".jpg" backupées :&nbsp;'.$extensionvigbck.'</td>';
	echo '</tr></table><br />';
	
    echo '<table width="'.$widtab.'" border="1" cellpadding="'.$cpd.'" cellspacing="'.$csc.'"><tr valign="bottom">';

    $compt=0;
    $dp = opendir($vig);
    while($entree = readdir($dp)){
	if ($entree != "." && $entree != ".." && preg_match('#[^·]\.jpg$#i', $entree)) {
    
    $class = substr($entree, -7, -4);			// Definition de la categorie de l'image
    $rest = substr($entree, 0, -8);				// Selection du reste du nom du fichier
    
    // Definition de la version haute def. de l'image
    $entree1 = substr_replace($entree, '', 0, 4);
	
	// EXIF
	ini_set('exif.encode_unicode', 'UTF-8');
	$exif = @exif_read_data($rep.$entree1, 0, true); // Lecture des metadonnées EXIF, avec non affichage des erreurs
    $date0 = $exif['EXIF']['DateTimeOriginal'];
	$date1 = substr($date0, 0, 10);
	//$date2 = str_replace(":", "/", $date1);
	$date2 = explode(":", $date1);
		
    if(is_file($vig.$entree) && preg_match('#[^·]\.jpg$#i', $fichvig)){
	if($compt%$ipl == 0){ echo '</tr><tr valign="bottom">'; }
    echo '<td align="center">';
    echo "<a href=# onClick=\"window.open('".$rep.$entree1."','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=1, copyhistory=0, menuBar=0, width=800, height=600');return(false)\">";
    echo '<img border=0 width='.$wid.' src="'.$vig.$entree.'"></a><br /><font size="1">';
	if(!is_file($rep.$entree1) && !preg_match('#[^·]\.jpg$#i', $fichrep)){
		echo '<font color="#990000"><br />La photo<br />'.$entree1.'<br />est introuvable...</font><br /><br />';
	} // rep
	else {
	echo '&nbsp;'.$exif['FILE']['FileName'].'<br />';
	echo 'Catégorie : <font color="#009933">'.$class.'</font><br />';
	echo '<br />';
	// echo '&nbsp;'.$exif['IFD0']['DateTime'].'<br />';
	echo '- '.$date2[2].'/'.$date2[1].'/'.$date2[0].' -<br />';
	// echo ''.$exif['EXIF']['DateTimeOriginal'].'<br />';
	echo ''.$exif['IFD0']['Model'].'<br />';
	echo 'Ouverture : '.$exif['COMPUTED']['ApertureFNumber'].'<br />';
	echo 'Exposition : '.$exif['EXIF']['ExposureTime'].'<br />';
	echo 'ISO : '.$exif['EXIF']['ISOSpeedRatings'].'<br />';
	// echo '&nbsp;'.$exif['EXIF']['Flash'].'<br />';
	// echo '&nbsp;'.$exif['COMPUTED']['Copyright.Photographer'].'<br />';
	// echo '&nbsp;'.$exif['COMPUTED']['Copyright.Editor'].'<br />';
	// echo '&nbsp;'.$exif['COMPUTED']['Copyright'].'<br />';
	// echo '&nbsp;'.$exif['IFD0']['Copyright'].'<br />';
	echo '<br /><br />';
	} // else rep
	
	echo '<center><form name="form1" method="POST" action=""><input type="checkbox" name="photo" value="'.$rep.$entree1.'">Photo&nbsp;<input type="checkbox" name="thumb" value="'.$vig.$entree.'">Vign.&nbsp;<br /><input type="submit" name="copie" value="Copier"><input type="submit" name="suppr" value="Supprimer"></form></center>';
	
	// if(isset($_POST['send'])){
	// $post1 = (isset($_POST['photo'])) ? $_POST['photo']:null;
	// $post2 = (isset($_POST['thumb'])) ? $_POST['thumb']:null;
	// bouclons sur le tableau qui a été transmis et supprimons les valeurs sélectionnées 
	// if (!empty($post1)) { 
	//    foreach($post1 as &$valeur1) {
	// 		@rename($valeur1, $backuprep.$entree1);
	// 		}
	// }
	// if (!empty($post2)) { 
	//    foreach($post2 as &$valeur2) {
	// 		@rename($valeur2, $backupvig.$entree);
	// 		}
	// }
	// }
	
	echo '</font></td>';
    $compt++;
    
	} // vig
	else {
		echo '<font color="#990000">Vign.&nbsp;'.$vig.$entree.'&nbsp;introuvable</font><br /><br />';
	} // else vig
    }

	if(isset($_POST['copie'])){
        // bouclons sur le tableau qui a été transmis et supprimons les valeurs sélectionnées 
        if (!empty($_POST['photo'])) {
			$postophs = substr($_POST['photo'], 15, 16);
			copy($_POST['photo'], $backuprep.$postophs); // Copie du dit fichier, avec non affichage des erreurs
        }
        if (!empty($_POST['thumb'])) {
			$postvig = substr($_POST['thumb'], 22, 20);
            copy($_POST['thumb'], $backupvig.$postvig); // Copie du dit fichier, avec non affichage des erreurs
        }
	echo "revenir à <a href='index.php' target ='_parent'>la page principale</a> ou sur <a href='listing.php5' target ='_parent'>la gestion des images en ligne</a> ?";
	exit;
    }

	if(isset($_POST['suppr'])){
        // bouclons sur le tableau qui a été transmis et supprimons les valeurs sélectionnées 
        if (!empty($_POST['photo'])) {
			unlink($_POST['photo']);  // Ceci supprimera le fichier
        }
		if (!empty($_POST['thumb'])) {
			unlink($_POST['thumb']);  // Ceci supprimera le fichier
        }
	echo "revenir à <a href='index.php' target ='_parent'>la page principale</a> ou sur <a href='listing.php5' target ='_parent'>la gestion des images en ligne</a> ?";
	exit;
    }

    }
    
    echo '</tr></table>';
    echo '</div>';
                
    ?>

	</th>
	</tr>
</table>

</body>
</html>
Any idea ?

Posté : 19 mai 2009, 12:51
par stopher
Slt ,

la fonction unlink() fonctionne ?

Quel été ton code avec la fonction rename() ?

Ch.

Posté : 19 mai 2009, 16:02
par casio
Slt ,

la fonction unlink() fonctionne ?

Quel été ton code avec la fonction rename() ?

Ch.
"Unlink" semble bien fonctionner, puisqu'il supprime les fichiers demandés.
Pour "Rename", la même portion que "copy" mais avec le dossier de destination.

Posté : 21 mai 2009, 12:34
par Ryle
Evite l'opérateur de silence "@", à plus forte raison lorsque tu débug. Si tu demandes à php de ne pas t'indiquer les erreurs, je vois pas comment tu pourrais arriver à les corriger :)

Tu as remplacé le rename par un copy et un unlink, mais tu ne leurs spécifies pas les mêmes valeurs. Y a de grands chances pour que cela explique pourquoi l'un fonctionne et pas l'autre :)

Lorsque tu fais un copy, tu récupère la valeur de la variable $_POST['photo'], tu en tronques une partie pour obtenir le chemin et le nom du fichier à copier, et là tout fonctionne :
      if (!empty($_POST['photo'])) { 
            $postophs = substr($_POST['photo'], 15, 16); 
            copy($_POST['photo'], $backuprep.$postophs); // Copie du dit fichier, avec non affichage des erreurs 
        } 
Par contre pour renommer, tu considère que ta variable $_POST['photo'] n'est pas une chaine, mais un tableau sur lequel tu boucles... donc forcément, si php reçoit une chaine, il va avoir bien du mal à boucler sur un tableau, et pourra encore plus difficilement trouver l'emplacement du fichier à renommer :)
    // $post1 = (isset($_POST['photo'])) ? $_POST['photo']:null; 
   ...
    // bouclons sur le tableau qui a été transmis et supprimons les valeurs sélectionnées  
    // if (!empty($post1)) {  
    //    foreach($post1 as &$valeur1) { 
    //         @rename($valeur1, $backuprep.$entree1); 
    //         } 
    // }
Et si dans ta boucle tu renommes chaque fichier avec le même nom ($backuprep.$entree1), ils vont s'écraser les uns les autres et au final, il ne te restera que le dernier... (et pourquoi un "&valeur1" ?)

Posté : 28 juin 2009, 16:18
par casio
Evite l'opérateur de silence "@", à plus forte raison lorsque tu débug. Si tu demandes à php de ne pas t'indiquer les erreurs, je vois pas comment tu pourrais arriver à les corriger :)

Tu as remplacé le rename par un copy et un unlink, mais tu ne leurs spécifies pas les mêmes valeurs. Y a de grands chances pour que cela explique pourquoi l'un fonctionne et pas l'autre :)

Lorsque tu fais un copy, tu récupère la valeur de la variable $_POST['photo'], tu en tronques une partie pour obtenir le chemin et le nom du fichier à copier, et là tout fonctionne :
      if (!empty($_POST['photo'])) { 
            $postophs = substr($_POST['photo'], 15, 16); 
            copy($_POST['photo'], $backuprep.$postophs); // Copie du dit fichier, avec non affichage des erreurs 
        } 
Par contre pour renommer, tu considère que ta variable $_POST['photo'] n'est pas une chaine, mais un tableau sur lequel tu boucles... donc forcément, si php reçoit une chaine, il va avoir bien du mal à boucler sur un tableau, et pourra encore plus difficilement trouver l'emplacement du fichier à renommer :)
    // $post1 = (isset($_POST['photo'])) ? $_POST['photo']:null; 
   ...
    // bouclons sur le tableau qui a été transmis et supprimons les valeurs sélectionnées  
    // if (!empty($post1)) {  
    //    foreach($post1 as &$valeur1) { 
    //         @rename($valeur1, $backuprep.$entree1); 
    //         } 
    // }
Et si dans ta boucle tu renommes chaque fichier avec le même nom ($backuprep.$entree1), ils vont s'écraser les uns les autres et au final, il ne te restera que le dernier... (et pourquoi un "&valeur1" ?)
Donc, concrètement, (je suis un peu perdu), que puis-je faire ?