Foros del Web » Programando para Internet » PHP »

Guardar salida de un formulario y luego interpretarlo

Estas en el tema de Guardar salida de un formulario y luego interpretarlo en el foro de PHP en Foros del Web. Hola, Vengo con una consulta... Si por ejemplo guardo en un archivo temporal todos los datos codificados que genera un formulario (raw output) con enctype=multipart/form-data. ...
  #1 (permalink)  
Antiguo 30/03/2010, 11:07
Avatar de hieloverde  
Fecha de Ingreso: julio-2005
Ubicación: México, D.F
Mensajes: 467
Antigüedad: 18 años, 9 meses
Puntos: 5
Guardar salida de un formulario y luego interpretarlo

Hola,

Vengo con una consulta... Si por ejemplo guardo en un archivo temporal todos los datos codificados que genera un formulario (raw output) con enctype=multipart/form-data.

Ejemplo, el archivo contendría lo siguiente:

Código:
-----------------------------96244551299766955782232957
Content-Disposition: form-data; name="file1"; filename="ejemplo.txt"
Content-Type: text/plain

Este es un archivo de ejemplo 

-----------------------------96244551299766955782232957
Content-Disposition: form-data; name="file2"; filename=""
Content-Type: application/octet-stream


-----------------------------96244551299766955782232957
Content-Disposition: form-data; name="Submit"

Send
-----------------------------96244551299766955782232957
Content-Disposition: form-data; name="sessionid"

565845ec1edc60ffb1692044934c2a98
-----------------------------96244551299766955782232957--
Luego posteriormente, como podría volver a “revivirlo” para cargarlo en PHP?, me refiero a interpretarlo como si al formulario se le hubiera dado submit, pero en realidad los datos vienen del archivo.

Alguna idea?

Saludos y gracias.
__________________
<? echo("1 <script> dice + que 1000 palabras"); ?> EspacioMéxico
  #2 (permalink)  
Antiguo 30/03/2010, 11:15
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Guardar salida de un formulario y luego interpretarlo

Bueno ya debes saber sobre la librería filesystem, ya que como indicaste que guardas todo en un archivo temporal. Lo que pudieras hacer, es usar la función file para almacenar la información en un array y luego recorrer el array en el código de php.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 30/03/2010, 12:25
Avatar de hieloverde  
Fecha de Ingreso: julio-2005
Ubicación: México, D.F
Mensajes: 467
Antigüedad: 18 años, 9 meses
Puntos: 5
Respuesta: Guardar salida de un formulario y luego interpretarlo

Cita:
Iniciado por abimaelrc Ver Mensaje
Bueno ya debes saber sobre la librería filesystem, ya que como indicaste que guardas todo en un archivo temporal. Lo que pudieras hacer, es usar la función file para almacenar la información en un array y luego recorrer el array en el código de php.
Hola, gracias por responder.

Si pero con file() tendría que procesarlo todo, aunque tal vez sea la opción mas cercana.

Lo que mas me gustaría sería lanzar el contenido de ese archivo para que PHP lo tomara como si fuera un formulario real, de tal modo que pudiera obtener los datos simplemente con $_POST o $_FILES según sea el caso. ¿será posible?

En primera instancia se me ocurrió lo siguiente:

Código PHP:
    $datos file_get_contents("/tmp/".$_GET['sid']."_postdata");
    
header("Content-type: multipart/form-data; charset=utf-8");
    echo (
$datos); 
Pero bien se que no resulta, ya que me lanza la descarga del archivo con todos los datos. Había pensado que podría existir un procedimiento para hacer esto, ya que no creo ser el único en haberlo requerido.

Cuando uno se enrolla puede ser dificil ver la solución.
__________________
<? echo("1 <script> dice + que 1000 palabras"); ?> EspacioMéxico
  #4 (permalink)  
Antiguo 30/03/2010, 12:40
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Guardar salida de un formulario y luego interpretarlo

De estos dos modos se puede hacer
Código PHP:
Ver original
  1. <?php
  2. $json = json_encode($_GET); //o $_POST
  3. file_put_contents("t.txt",$json);
  4. $datos = file_get_contents("t.txt");
  5.  
  6.  
  7. $serialize = serialize($_GET);
  8. file_put_contents("t.txt",$serialize); //o $_POST
  9. $datos = file_get_contents("t.txt");
Como quiera veo que el uso de file sigue en pie, pero ahora puedes manejarte mejor con el array.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 30/03/2010, 14:52
Avatar de hieloverde  
Fecha de Ingreso: julio-2005
Ubicación: México, D.F
Mensajes: 467
Antigüedad: 18 años, 9 meses
Puntos: 5
Respuesta: Guardar salida de un formulario y luego interpretarlo

He probado con JSON y al pasarle la salida del formulario tal cual me devuelve un array vacio, no creo que pueda manejar este contenido, aunque me surge la duda, por que tu solución va con JSON ¿?

Por otro lado, se me ocurre dividir el contenido del archivo a partir de sus lineas:
Código:
-----------------------------96244551299766955782232957
Y luego por medio de sus tipos de contenido reaccionar de una un otra forma:
Código:
Content-Disposition: form-data; name="file1"; filename="ejemplo.txt"
Content-Type: text/plain
En este caso crearía un archivo de texto.
__________________
<? echo("1 <script> dice + que 1000 palabras"); ?> EspacioMéxico
  #6 (permalink)  
Antiguo 30/03/2010, 14:59
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Guardar salida de un formulario y luego interpretarlo

Si trataste el ejemplo que te dí, sí funciona. Uno lo puedes lograr con json y otro lo puedes lograr con serialize. Tu escoges cual trabajar, pero a mí, sí me funcionó. Trata el ejemplo que te dí, pero uno de los dos.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 30/03/2010, 17:24
Avatar de hieloverde  
Fecha de Ingreso: julio-2005
Ubicación: México, D.F
Mensajes: 467
Antigüedad: 18 años, 9 meses
Puntos: 5
Respuesta: Guardar salida de un formulario y luego interpretarlo

Claro, una disculpa, el código que propones si funciona y sería perfecto si yo apenas fuera a recibir el formulario en PHP para guardarlo.

Lo que sucede es que el archivo temporal con los datos que me genera el formulario ya lo tengo por anticipado, antes de llegar a PHP, esto es debido a que lo genero mediante un CGI (perl).

Este es el camino que pretendo seguir:

Formulario HTML -> CGI (script perl) -> archivo temporal (post data) -> script PHP

Por ello comento que en si estoy atorado justamente al querer usar ese archivo temporal con los datos POST en PHP. Vamos, perl me pone en ese archivo temporal lo que le llega desde el formulario para almacenarlo y luego, posteriormente, “revivirlo” en PHP.

Lo se, suena a rizar el rizo, pero es necesario...

Por ello me vendría de perlas conocer un método confiable para usar ese archivo de modo que PHP lo tome tal cual como si el formulario apenas se hubiera enviado. No creo que sea imposible, pero aún no me cae la idea.

Algo en mente?
__________________
<? echo("1 <script> dice + que 1000 palabras"); ?> EspacioMéxico
  #8 (permalink)  
Antiguo 26/04/2010, 11:49
Avatar de hieloverde  
Fecha de Ingreso: julio-2005
Ubicación: México, D.F
Mensajes: 467
Antigüedad: 18 años, 9 meses
Puntos: 5
Respuesta: Guardar salida de un formulario y luego interpretarlo

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,
__________________
<? echo("1 <script> dice + que 1000 palabras"); ?> EspacioMéxico

Etiquetas: salida, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:20.