Page 1 sur 1

supression d'un fichier au bout d'une semaine

Posté : 11 nov. 2010, 16:55
par Nuanch
Bonjours,
je suis actuellement en train de coder un site d'upload de vidéo néammoins j'aimerais que après 7jours la vidéo uploadée sois supprimée sauf si elle a une note de 10/10 néamoins je strictement aucune idée de la manière dont je dois m'y prendre.
J'ai pensé a un champ mysql Auto_increment qui prendrait +1 chaque jours juste 7, est-ce possible ? Merci d'avance

Re: supression d'un fichier au bout d'une semaine

Posté : 11 nov. 2010, 19:08
par ouckileou
Tous les jours, une requête sélectionne les références des vidéos qui sont là depuis plus de 7 jours, et n'ont pas la note 10/10. Puis tu utilises ces identifiants pour faire un DELETE

Tu as des fonctions de base de données ou PHP pour calculer des écarts de date, il y a aussi un sujet dans la FAQ. Pour le lancement quotidien, voir comment lancer un script PHP avec cron. Mais commence par la requête :)

Re: supression d'un fichier au bout d'une semaine

Posté : 11 nov. 2010, 19:21
par moogli
salut,

c'est évidement possible, le plus simple étant de stocker dans une table (si tu n'a pas déjà) la date d'insertion de la vidéo (champ de type date).

ensuite le script php est assez simple :
- récupération de tous les noms de fichier donc la date est supérieur à 7 jours (en gros in faut que date insertion +7 soit inférieur ànow()) je te conseil de regarder la documentation des fonctions de dates et heure de mysql
- lorsque le select est fait, il faut traiter la requête comme d'habitude, dans la boucle tu utilise un unlink pour supprimer le fichier
- delete dans la table

conseil :
- à faire dans cette ordre car en testant le retour de la fonction unlink tu sais si le fichier à réellement été supprimer, ce qui te permet de stocker les fichiers supprimer pour faire un delete dans la table des fichiers supprimer et afficher un message d'erreur pour les autres

ensuite tu peut soit lancer le script sur l'index de ton fichier avec un paramètre sur l'heure (pour pas le faire toutes les 30s) soit tu utilise une tache cron si tu en a la possibilité.

@+

Re: supression d'un fichier au bout d'une semaine

Posté : 11 nov. 2010, 21:49
par Nuanch
Merci pour ces réponses, mais peut on utiliser cron sur hébergement mutualisé :s ?

Re: supression d'un fichier au bout d'une semaine

Posté : 11 nov. 2010, 22:36
par moogli
ça faut demander à ton hébergeur :-)

@+

Re: supression d'un fichier au bout d'une semaine

Posté : 11 nov. 2010, 23:14
par Nuanch
Voila alors j'ai fait ce petit bout de code tout simple :

<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=videos', 'root', '');
}

catch(Exception $e)
{
die('Erreur : ' . $e->getMessage());
}

$reponse = $bdd->query('SELECT * FROM video WHERE TO_DAYS(NOW()) - TO_DAYS(date) >= 7 AND note < 10');

while ($suppresion = $reponse->fetch())
{
unlink("video/"$suppresion['vid']".flv");
}
$reponse->closeCursor();

$bdd->exec('DELETE FROM video WHERE TO_DAYS(NOW()) - TO_DAYS(date) >= 7 AND note < 10');
?>

j'aimerai savoir s'il n'y a pas d'erreur majeure (je n'ai pas l'accès au serveur pour tester pour le moment) et j'ai évidement ajouter

$date = date("d-m-Y");

dans une colone sur Mysql.

Merci de m'avoir aider ( je pense que j'utiliserai une tache cron )

Re: supression d'un fichier au bout d'une semaine

Posté : 11 nov. 2010, 23:48
par moogli
coté SQL pas de select * deux champs sont utile il suffit de les noter dans la requête (ça évite de récupérer 300000 infos inutiles et à la lecture du code c'est plus clair).

date est un mot sql de mysql est préférable de ne pas l'utiliser et de donner un nom explicite par exemple date-ajout.

utilise la valeur de retour de unlink pour savoir si tout se passe bien

tu a une erreur de parse dans le while (problème de concaténation)

voila comment je pourrais faire
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=videos', 'root', '');
}

catch(Exception $e)
{
die('Erreur : ' . $e->getMessage());
}

$reponse = $bdd->query('SELECT idvi, vid FROM video WHERE TO_DAYS(NOW()) - TO_DAYS(date) >= 7 AND note < 10');
$ok = array();
$nok = array();
while ($s = $reponse->fetch()){
    $ret = unlink('video/'.$s['vid'].'.flv');
    if ($ret === false) {
        $nok[] = $s['idvid'];
    }
    else {
        $ok[] = $s['vid'];
    }
}
$reponse->closeCursor();
if (count($nok)){
    echo 'il y a '.count($nok).' fichier non supprimer<br />';
}
$requete = 'DELETE FROM video WHERE idvid in('.implode(',',$ok).')';
$bdd->exec($requete);
?>
Pour info utilise la balise
 pour coloriser le code sur le forum c'est plus facile a lire

@+

Re: supression d'un fichier au bout d'une semaine

Posté : 11 nov. 2010, 23:53
par Nuanch
Merci beaucoup pour l'aide (super forum si je trouve la page d'inscription je m'inscrit xD)

PS: j'ai vu cette balise mais c'était deja trop tard et j'ai pas réussit a editer le message :oops:

Re: supression d'un fichier au bout d'une semaine

Posté : 12 nov. 2010, 11:14
par ouckileou
Il y a un lien "M'enregistrer" en haut à droite : ucp.php?mode=register