Am un site unde utilizatorii pot posta postari cu continut video/foto/audio
Site-ul incarca continutul video/foto/audio pe server inainte sa insereze postarea in baza de date Mysql. Daca utilizatorul renunta sa posteze, fisierele imi raman in server.
Cum as putea programa stergerea fisierelor si anularea in cazul in care utilizatorul posteaza?
Am nevoie de o solutie care sa nu consume multe resurse
Creează un script php care să citească fișierele. Apoi, compară data creării fișierelor cu data actuală. Dacă a trecut mai mult de “x” minute, atunci mergi mai departe și vezi dacă există postarea cu fișierul respectiv. Dacă nu există, ștergi fișierul.
Iar ca să automatizezi treaba asta setezi un cron job care să acceseze script-ul la un anumit timp. De exemplu la ora 3 dimineața. Sau din oră în oră. Cum crezi tu.
Ar trebui în query să folosești count și mai departe să verifici dacă $result === 0 (adică dacă nu s-au găsit rânduri), ștergi fișierul.
PS: Să știi că eu mai sus ți-am răspuns la întrebarea ta, dar ideal ar fi ca fișierele să fie încărcate într-un alt folder, gen content/temp_uploads/, și apoi, când utilizatorul adaugă postarea, să muți fișierele în folderul “content/uploads/”. După vei putea folosi codul de mai sus ca să golești folderul content/temp_uploads/, fără să mai fie nevoie de query. Cred că la asta s-a referit și alexjorj.
Solutia oferita de tine prima data e mult mai buna, am deja fisiere vechi, inutile care trebuie sterse.
echo $file_source imi afiseaza toate fisierele mai vechi de 2 minute
echo $row[ ‘source’ ] imi afiseaza toate fisierele utile
Cum pot scoate din $file_source - $row[ ‘source’ ] pentru a defini o noua variabila cu fisierele inutile ?
$files = glob("content/uploads/photos/2021/04/*");
$now = time();
foreach ($files as $file) {
if (is_file($file)) {
if ($now - filemtime($file) >= 60 * 1 * 1 * 1) { // 2 minutes
// echo(''.$file.'<br>');
$file_source = str_replace("content/uploads/","",$file);
global $db;
$result = $db->query(sprintf("SELECT * FROM posts_photos WHERE source = %s", secure($file_source))) or _error("SQL_ERROR_THROWEN");
while ($row = mysqli_fetch_assoc($result)) {
echo $row[ 'source' ]."<br />";
}
}
}
}