PHP : afficher l'image la + recente d'un rep

Fermé
rssi69 Messages postés 10 Date d'inscription lundi 17 janvier 2011 Statut Membre Dernière intervention 18 janvier 2011 - 17 janv. 2011 à 11:28
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 - 18 févr. 2012 à 09:59
Bonjour,

j'ai une repertoire qui recoit des fichiers images avec un nom different (identique à la date de creation du fichier)
exemple
webcam201101111254.jpg
je souhaite pourvoir ne conserver à l'ouverture de l'image que l'image la + recente dont le nom serait current.jpg (pour y faire un lien...)

j'imagine qu'à l'ouverture de l'image il faut qu'un script s'execute en renomant la plus recente en current.jpg puis supprim toutes les webcamx.jpg.

mais mon incompetence totale en PHP me fait obstacle

nb, je n'ai pas moyen de modifier le nom des image en avant envoi...

merci à vous les vrais bons !

A voir également:

5 réponses

Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
Modifié par Akronos le 17/01/2011 à 11:37
Quand tu dis ouverture qu'entends-tu par là?

Sinon, c'est un script un peu pointu que tu désires.
Je me souviens l'avoir déjà codé. je vais essayé de te récupéré ça.
0
rssi69 Messages postés 10 Date d'inscription lundi 17 janvier 2011 Statut Membre Dernière intervention 18 janvier 2011
17 janv. 2011 à 12:01
Par ouverture j'entends affichage de l'image
En terme de resultat, je cherhce à obtenir l'affichage de l'image la plus recente par une URL permanente http://monsite/current.jpg qui afficherai l'image la plus recente et qui purgerai les anciennes.
Merci par avance
P
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
17 janv. 2011 à 12:55
eh bien le mieux et d'avoir un fichier .php, ainsi au lieu de http://monsite/current.jpg tu as http://monsite/current.php

Ton fichier .php se présente comme un fichier HTML simple qui se contente d'afficher current.jpg

Et avant le DOCTYPE, tu as le code php qui parcourres ton dossier à la recherche de la dernière image qui la renomme current.jpg et qui supprime toute les autres images.

Je peux essayer de te faire le code php. Mais, comment est ton architecture? (tes images sont-elles à la racine ou dans un dossier spécial?)
Tes images s'appellent-elles toutes obligatoirement webcamAAAAMMJJHHmm.jpg?

Car si j'ai bien compris webcam201101111254.jpg correspond bien à l'image webcam enregistrée le 11/01/20011 à 12h54.
0
rssi69 Messages postés 10 Date d'inscription lundi 17 janvier 2011 Statut Membre Dernière intervention 18 janvier 2011
17 janv. 2011 à 13:36
Toutes images ont le meme nom et sont dans un repertoire /webcam à la racine.
le nom du fichier correspond en effet à la date de la prose de vue ; c'est aussi la date du fichier.
Merci encore
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
17 janv. 2011 à 13:59
Je te code ça
0
rssi69 Messages postés 10 Date d'inscription lundi 17 janvier 2011 Statut Membre Dernière intervention 18 janvier 2011
17 janv. 2011 à 14:10
merci un grand service !
ca sera utile à tout les possesseurs de webcam/caméra FOSCAM, où le FTP est OK mais le nom des fichiers envoyés n'est pas parametrable.....
0
xamurai Messages postés 223 Date d'inscription mardi 11 janvier 2011 Statut Membre Dernière intervention 19 février 2013 15
17 janv. 2011 à 15:09
utilise ma function :




$recentData = readMyFile( Liens_vers_image_recente  );
replaceFile("recent.jpg" ,$recentData );


  function replaceFile($fileName,$text)
  {
    //print_r($text);
    $isWrotten= true;
  	if(!$flux = fopen( $fileName , "w" )){
  		 $isWrotten = false;
  	}
  	if (fwrite ($flux, $text)) {
  	}
  	else {
  	   $isWrotten = false;
  	}
  	fclose($flux);
  	chmod ($fileName, 0777);
  	return $isWrotten;
  }

function readMyFile( $fileName )
  {
  	$fileText              = "";
  //	chown($fileName,777);
  	if(!$flux = fopen( $fileName , "r" )){

  	}
  	else{
  		 if($flux){
  			   while(!feof($flux)){
  					  $fileText   .= fgets($flux , 4096);
  			   }
  		 }
  	}
  	fclose($flux);
  	return $fileText;
  }
0
rssi69 Messages postés 10 Date d'inscription lundi 17 janvier 2011 Statut Membre Dernière intervention 18 janvier 2011
17 janv. 2011 à 15:23
Merci pour la rapidite, je teste des que je suis en face d'un serveur PHP
concretement je pense qu'il faut dans le repertoire au debut une image current.jpg
à quoi correespont la variable "Liens_vers_image_recente"
Aussi comment demarrer le script depuis uen URL ?
est-ce que les anciens fichiers (plus vieux que current.jpg sont supprimés) ?
Super merci encore !
0
xamurai Messages postés 223 Date d'inscription mardi 11 janvier 2011 Statut Membre Dernière intervention 19 février 2013 15
17 janv. 2011 à 15:23
Liens_vers_image_recente : c'est l'enplacement de la derniere image que tu as recut de la webcam:
par exemple https://www.pagesjaunes.fr/
0
rssi69 Messages postés 10 Date d'inscription lundi 17 janvier 2011 Statut Membre Dernière intervention 18 janvier 2011
18 janv. 2011 à 07:13
merci encore, et bravo pour le style concis
tout a fait t'accord pour le re-use.. mais pour l'economie c'est raté car il faut d'abord j'apprenne le php, ca rique d'etre long et pas tres econome pour moi.... surtout que je n'ai qu'une page a ecrire....
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
Modifié par Akronos le 17/01/2011 à 15:32
Tiens ce que je t'ai fait:

Current.php:
<?php
/**************************************/
/*				Date 17/01/2011			*/
/*	Affichage de la dernière image	*/
/*************************************/

// Tout les nomFichiers sont de titre:
// webcamAAAAMMJJHHmm.jpg
// On récupère le nom des fichiers

// On ouvre le répertoire en question
$repertoire = 'webcam';
$dir = opendir($repertoire);

// On parcours les fichiers
// On veut localiser le plus récent
// On créer un tableau contenant le nom et la date
$i = 0;
while ($nomFichier = readdir($dir))
{
   if(($nomFichier != '..')&&($nomFichier !='.'))
   {
	   //On change les permissions du fichier
	   chmod($repertoire . '/' . $nomFichier,777);
	   $annee = substr($nomFichier,6,4);
	   $mois = substr($nomFichier,10,2);
	   $jour = substr($nomFichier,12,2);
	   $heure = substr($nomFichier,14,2);
	   $minute = substr($nomFichier,16,2);
	   $dateFichier[$i] = array('annee' => $annee, 'mois' => $mois, 'jour' => $jour, 'heure' => $heure, 'minute' => $minute, 'nom' => $nomFichier);
	   $i++;
	}
}

// On ferme le répertoire
closedir($dir);

// Création des variables temporaires de comparaisons
$tmpAnnee = 0;
$tmpMois = 0;
$tmpJour = 0;
$tmpHeure = 0;
$tmpMinute = 0;
$current = 0;

// Comparaisons des dates et récupération du nom du fichier le plus récent
foreach($dateFichier as $id => $tableau)
{
	foreach($tableau as $libelle => $valeur)
	{
		if($libelle != 'nom')
			$valeur = (integer)$valeur;
			
		switch($libelle)
		{
			case 'annee':
				if($valeur > $tmpAnnee)
				{
					$tmpAnnee = $valeur;
					$current = $tableau['nom'];
				}
				break;
			case 'mois':
				if(($tableau['annee'] == $tmpAnnee)&&($valeur > $tmpMois))
				{
					$tmpMois = $valeur;
					$current = $tableau['nom'];
				}
				break;
			case 'jour':
				if(($tableau['annee'] == $tmpAnnee)&&($tableau['mois'] == $tmpMois)&&($valeur > $tmpJour))
				{
					$tmpJour = $valeur;
					$current = $tableau['nom'];
				}
				break;
			case 'heure':
				if(($tableau['annee'] == $tmpAnnee)&&($tableau['mois'] == $tmpMois)&&($tableau['jour'] == $tmpJour)&&($valeur > $tmpHeure))
				{
					$tmpHeure = $valeur;
					$current = $tableau['nom'];
				}
				break;
			case 'minute':
				if(($tableau['annee'] == $tmpAnnee)&&($tableau['mois'] == $tmpMois)&&($tableau['jour'] == $tmpJour)&&($tableau['heure'] == $tmpHeure)&&($valeur > $tmpMinute))
				{
					$tmpMinute = $valeur;
					$current = $tableau['nom'];
				}
				break;
		}
	}
}

// On reouvre le répertoire
$dir = opendir($repertoire);

//On a récupérer le nom du fichier le plus récent, on le renomme current
while($Fichier = readdir($dir))
{
	if($Fichier == $current)
	{
		if(is_file('current.jpg'))
			unlink('current.jpg');
		else
			rename($repertoire . '/' . $current,'current.jpg');

		echo 'Fichier ' . $current . ' renommé';
		$current = 'current.jpg';
		echo ' en ' . $current . '<br />';
	}
	if(($Fichier != '..')&&($Fichier !='.')&&($Fichier!='current.jpg'))
	{
		//~ unlink($nomFichier);
		echo 'Fichier ' . $Fichier . ' supprimé. <br />';
	}
}

//~ echo '<pre>';
//~ print_r($dateFichier);
//~ echo '</pre>';

// On referme le répertoire
closedir($dir);
// On commence par extraire l'année, puis les mois, les jours, les heures et enfins les minutes

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
		<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>La dernière image</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
	<div>
		<image src="webcam/current.jpg" alt="Dernière image en date" />
	</div>
</body>
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
17 janv. 2011 à 15:29
S'il n'y a pas de fichier de type webcamAAAAMMJJHHmm.jpg dans le dossier places-y un current.jpg par défaut, c'est toujours mieux.

Sinon, tout devrait fonctionné niquel. Pour enlever le texte il te suffit de mettre deux / devant tout les echo.
0
rssi69 Messages postés 10 Date d'inscription lundi 17 janvier 2011 Statut Membre Dernière intervention 18 janvier 2011
17 janv. 2011 à 15:29
Bravo !
je teste des que je peux FTP le truc vers un serveur PHP,
je te tiens au courant
merci Akronos
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
Modifié par Akronos le 17/01/2011 à 15:35
Pas de soucis je m'ennuies au plus haut point...
Sinon j'ai regarder ce que xamurai t'as donné, c'est pas mal non plus, mais t'as besoin de savoir utilisé ses fonctions. Avec le mien il te suffit d'enregistrer sous current.php à la racine. (http://monsite/current.php)
Aussi, mon script ne fonctionne que dans le cas que tu m'as donné, si demain tu décide de renommer les fichiers autrement il faudra modifié le script.
0
rssi69 Messages postés 10 Date d'inscription lundi 17 janvier 2011 Statut Membre Dernière intervention 18 janvier 2011
17 janv. 2011 à 22:08
cela semble presque fonctionner sauf que en fait le mon de fichier est du type : 00606E905560(Phoenix)_0_20110117220232_34.jpg
ma faute sorry, j'ai teste en decallant de 18 position le commencement de la date dans le nom, mais il reste les secondes et le "_xy" ou "_z" (dans certain cas) a eradiquer...
il semble que parfois le current.jpg soit supprimé....
encore merci pour cette aide !!
0
rssi69 Messages postés 10 Date d'inscription lundi 17 janvier 2011 Statut Membre Dernière intervention 18 janvier 2011
17 janv. 2011 à 22:13
les images sont toujours dans le rep malgré l'echo qui dit les avoir supprimé... probleme de chmod ? idem pour le rename qui en fait n'est pas fait...
Fichier 00606E905560(Phoenix)_0_20110117220920_47.jpg supprimé. 
Fichier 00606E905560(Phoenix)_0_20110117221101_49.jpg supprimé. 
Fichier 00606E905560(Phoenix)_0_20110117221202_51.jpg renommé en current.jpg
Fichier 00606E905560(Phoenix)_0_20110117221202_51.jpg supprimé. 
0
Hello,
Voilà un sujet qui répondre 'presque' à mon problème.
J'ai une Webcam Trendnet, or celle-ci ajoutent une difficultés, elle mettent un dossier intermédiaire à la date du jour de type webcam/aaaammjj/hhmmss.jpg
est-il possible d'adapter ce script pour chercher à la fois le dossier le plus récent et l'image la plus récente?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
18 févr. 2012 à 09:59
Il y a une fonction qui donne la date et l'heure réelle du fichier
filectime('mon_fichier.jpg');
0