Code impur...

Eléphant du PHP | 103 Messages

19 mai 2009, 12:19

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 ?

ViPHP
ViPHP | 1136 Messages

19 mai 2009, 12:51

Slt ,

la fonction unlink() fonctionne ?

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

Ch.

Eléphant du PHP | 103 Messages

19 mai 2009, 16:02

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 mai 2009, 12:34

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" ?)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 103 Messages

28 juin 2009, 16:18

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 ?