Bueno, cerrando este tema de buena forma, finalmente me fue mas factible usar el CGI para procesar los datos POST incluyendo archivos y luego ya en PHP retomar unicamente las referencias.
Para dejarlo mas claro, el CGI procesa toda la salida del formulario y si hay archivos los pone en un directorio temporal con el nombre la sesion, luego genero un archivo cuyo contenido (en formato JSON) almacena todos los datos POST y referencias a los archivos guardados (aplicando el principio propuesto por abimaelrc). Entonces en PHP posteriormente leo este archivo y lo decodifico con JSON y asi obtengo el objeto.
Ejemplo:
Código PHP:
/* Esto para un campo */
$objeto->post->nombre_campo;
/* Esto para un archivo */
$objeto->files->nombre_campo_file->tmp_name;
Antes de llegar a esta solución habia comenzado con el desarrollo de una pequeña función que me procesara la post data (como pretendia en un principio). No tuve ocasión de finalizarla, pero la publico por si alguien le sirve:
Código PHP:
<?php
function interpretar_postdata($archivo_postdata)
{
/* Solo si el archivo existe */
if(file_exists($archivo_postdata))
{
/* Obtener el contenido */
$postdata = file($archivo_postdata);
/* Obtener identificador */
$id_form = $postdata[0];
/* Eliminar el inicio y el fin */
for($x=1; $x<count($postdata)-1; $x++)
{
$fpost[$x] = $postdata[$x];
}
$unido = implode("",$fpost);
/* Procesamos cada elemento del formulario */
$elementos = explode($id_form,$unido);
foreach($elementos as $i_elem=>$c_elem)
{
$lineas[$i_elem] = explode("\r\n",$c_elem);
$campo[$i_elem]['content-disposition'] = explode(";",substr($lineas[$i_elem][0],strpos($lineas[$i_elem][0],":")+1));
for($y=1; $y<count($campo[$i_elem]['content-disposition']); $y++)
{
$etq = $campo[$i_elem]['content-disposition'][$y] = trim(str_replace('"','',$campo[$i_elem]['content-disposition'][$y]));
$etq = explode("=",$etq);
$temp_infocampo[$i_elem][$y] = array($etq[0]=>$etq[1]);
}
unset($campo[$i_elem]);
$campo[$i_elem] = $temp_infocampo[$i_elem];
unset($temp_infocampo[$i_elem]);
/* Es un archivo */
if($campo[$i_elem][2]['filename'] != "")
{
$id_file = $campo[$i_elem][1]['name'];
$type = substr($lineas[$i_elem][1],strpos($lineas[$i_elem][1],":")+1);
for($j=2; $j<count($lineas[$i_elem]); $j++)
{
$contenido[$j] = $lineas[$i_elem][$j];
}
$contenido = implode("\r\n",$contenido);
/* Procesar los archivos, no tuve tiempo de implementarlo */
}
/* No es un archivo */
else
{
}
}
return $contenido;
}
else
{
return false;
}
}
?>
Saludos,