Buenas tardes estimados,
solicito su ayuda para corregir este script que ya tiene días dándome problemas y no encuentro la manera de solucionarlo. No se si este del todo correcto, por lo cual pido su auxilio. Como dice el titulo, la idea es verificar dentro de un directorio temporal una carpeta, leer los archivos que contiene y uno por uno, guardarlos en la BD como un bytea.
El problema es que una vez que intento descargar el archivo, el mismo viene corrupto y con variaciones de tamaño bastantes considerables. A continuación les dejo los scripts de subida y bajada.
De antemano muchas gracias por su apoyo.
Subida Código PHP:
$path = "../../../../tmp/" . $attach_folder_key . "/";
$files = array_diff(scandir($path), array('.', '..'));
//Si se adjuntaron archivos
if(is_dir($path) && (count($files) > 0)){
if( !isset($id_pun_int) ){
$queryId = "SELECT id_pun_int FROM general.puntos_interes ORDER BY id_pun_int DESC LIMIT 1";
$db->Query($queryId);
$id_pun_int = $db->Fresult();
}
foreach($files as $fileName){
$filePath = $path . $fileName;
$safeFileName = pg_escape_string($fileName); //name
$p = fopen($filePath,'rb');
$fsize = filesize($filePath); // size
$data = fread($p, $fsize);
$dat = pg_escape_bytea($data); // bytea
$mime = getFileMimeType($filePath); // mime
$queryInsert = " INSERT INTO general.recursos
(nom_rec, mim_rec, tam_rec, raw_dat_rec)
VALUES
('$safeFileName', '$mime', '$fsize', '$dat'::bytea)
RETURNING id_rec";
$db->Query($queryInsert);
$id_rec= $db->Fresult();
$queryAsoc = "INSERT INTO general.puntos_interes_recursos (id_pun_int, id_rec) VALUES ($id_pun_int, $id_rec)";
$db->Query($queryAsoc);
}
}
Descarga Código PHP:
if( !isset($_REQUEST)){
die(_('403 - Forbidden.'));
}
if( !isset($_REQUEST["id_rec"])){
die(_('Faltan parámetros.'));
}
$ConnPG = new pgdb();
if (!$ConnPG->Connect(false))
{
die(_('No se pudo realizar la conexión.'));
}
$query= "SELECT * FROM general.recursos WHERE id_rec = " . $_REQUEST["id_rec"];
$ConnPG->Query($query);
$fileData = $ConnPG->Fobject();
$file = pg_unescape_bytea($fileData->raw_dat_rec);
$name = $fileData->nom_rec;
$mime = $fileData->mim_rec;
$size = $fileData->tam_rec;
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $size);
header('Content-Type: ' . $mime);
header('Content-Disposition: attachment; filename=' . $name);
echo $file;
Cualquier pregunta o información requerida estoy a la orden.