Agradecería que alguien me pudiera dar alguna (cualquier) idea de como puedo realizar el siguiente procedimiento:
Tengo una aplicación en PHP que carga imágenes y guarda el nombre del archivo de la imagen en una base de datos. Pero el problema es el siguiente; a veces, no se guarda en la base de datos el registro y el script en PHP genera un error, lo cual es lo adecuado y aceptado en la aplicación; pero para el momento que genera el error el archivo ya fué cargado, copiado n++ veces y modificado en el servidor (intentar hacerlo como una sola transacción resulta demasiado complicado).
Ahora necesito borrar todos los archivos que están en el servidor pero no en la base de datos; tengo el siguiente script que extrae los nombres de los archivos y los registros en la base de datos, pero necesito buscar en @files todos los registros que no estén en la base de datos (5 campos varchar con los nombres de las imágenes).
Código PHP:
#!/usr/bin/perl
print "Content-type: text/html\r\n\r\n";
print "<html>";
print "<title>Check Bad Upload</title>";
print "<body>";
use strict;
use DBI;
my $upload = "../upload";
my $data_source = "dbi:mysql:database=XXXXXXXXXX:host=localhost";
opendir(DIR, $upload) || die "can't opendir $upload: $!";
my @files = grep { !/^./ && !/^sm/ && !/^sz/ && -f "$upload/$_" } readdir(DIR);
closedir DIR;
my $dbh = DBI->connect($data_source, "XXXXXXXXXX", "XXXXXXXXXX", {'RaiseError' => 1});
my $sth = $dbh->prepare("SELECT image1, image2, image3, image4, image5 FROM table01");
$sth->execute();
while (my $ref = $sth->fetchrow_hashref()) {
print ""$ref->{'image1'}","$ref->{'image2'}"<br>";
}
$sth->finish();
$dbh->disconnect();
print "</body>";
print "</html>";