Foros del Web » Programando para Internet » Javascript »

Guardar copia de página web

Estas en el tema de Guardar copia de página web en el foro de Javascript en Foros del Web. Hola chicos, no se si lo que os voy a plantear se puede hacer y si el método es javascript, pero creo que la respuesta ...
  #1 (permalink)  
Antiguo 06/06/2012, 16:45
Avatar de oNefl0w189  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 117
Antigüedad: 14 años, 8 meses
Puntos: 4
Guardar copia de página web

Hola chicos, no se si lo que os voy a plantear se puede hacer y si el método es javascript, pero creo que la respuesta es sí y por eso estoy aquí, al grano


Necesito un boton que al darle click me cree una copia de lo que esta en pantalla, es decir que me copie el código HTML de la web que esta viendo el usuario y la descargue guardada con formato .HTML.

Es decir, un boton que haga lo mismo que si le damos a boton derecho, guardar como, y nos guardamos la página web.


Como se haría?

Un saludo y gracias.


PD: No he encontrado información al respecto, o no la he sabido buscar como debía, pero no se como referirme al tema.
__________________
Nunca dijeron que la vida sería fácil, sólo prometieron que valdría la pena vivirla.

Dar las gracias y añadir Karma, no cuesta nada, ¿Que menos si te ayudan? :)
  #2 (permalink)  
Antiguo 06/06/2012, 22:09
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Guardar copia de página web

Con javascript es muy sencillo en internet explorer, pero se complica bastante con otros navegadores

lo mejor es hacerlo con php
tenes una pagina.html
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <title>titulo</title>
  4. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  5. </head>
  6. <h1>Demo descarga de página</h1>
  7. <p><a href="autodescarga.php?archivo=pagina.html">Descargar</a></p>
  8. </body>
  9. </html>

En el mismo incluimos un link al archivo autodescarga.php y le pasamos como parámetro archivo=pagina.html, es decir el nombre de la propia página

autodescarga.php

Código PHP:
Ver original
  1. <?php
  2. if(isset($_GET['archivo'])){
  3. $archivo = $_GET['archivo'];
  4. }else{
  5. $archivo = "noexiste";
  6. }
  7. header('Content-Type: text/html;charset=utf-8');
  8. header("Content-Disposition:attachment ; filename=$archivo");      
  9.     header('Expires: 0');
  10.     header('Cache-Control: must-revalidate');
  11.     header('Pragma: public');
  12.     ob_clean();
  13.     flush();
  14.     echo file_get_contents($archivo);
  15.     exit;
  16. ?>

listo, ahora solo te resta poner el archivo autodescarga.php en la misma carpeta dónde esten los html. Si los html estuvieran en otras carpetas habría que hacerle algunas modificaciones, por lo que lo más fácil es poner una copia de autodescarga.php en cada carpeta que contenga html's descargables, si lo que descargases fuesen php y no html, no hay problema porque lo que descargue el usuario no es tu código php sino el html generado, es decir lo mismo que se ve al hacer click derecho -> ver código fuente, por lo que no implicaría ningún riesgo de seguridad
un detalle, yo usé utf-8, si tu codificación es distinta, tendrías que modificarla

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 07/06/2012, 06:22
Avatar de oNefl0w189  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 117
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Guardar copia de página web

Pues el caso es que no etngo una página HTML sino una página PHP..

la siguiente página:

rp.php
Código PHP:
Ver original
  1. <?php
  2.  include('conex.php');
  3.  echo "<link rel=\"StyleSheet\" href=\"style.css\" type=\"text/css\" media=\"screen\">";
  4.  
  5.     $amb = $_POST["ambito"];
  6.    
  7.  
  8.     // SELECCIONAMOS EL ÁMBITO.
  9.     $ambitos = ("SELECT ambitos.codAmbito, ambitos.descripAmbito FROM ambitos WHERE codAmbito = '$amb' ORDER BY codAmbito");
  10.     $resuambitos = mysql_query($ambitos);
  11.  
  12.    
  13.     // MIENTRAS HAYA ÁMBITO IMPRIME.
  14. while($datos = mysql_fetch_assoc($resuambitos)) {
  15.  
  16.     $mt = array();
  17.  
  18.     echo "<table border=\"0\" class=\"reportes\"><tr><td> <b>Datos Encuesta.<br>  Ambito: </b>  ".$datos['descripAmbito']."  </td> <td> <b>Medias Totales. <br>Ambito: </b> ".$datos['descripAmbito']."   </td></tr><tr><td>";
  19.     // IMPRIMIMOS EL TÍTULO Y ABRIMOS LA TABLA.
  20.     echo "<br>";
  21.     echo "<table border=\"1\" class=\"encuestas\"><tr><td><b>Centro</b></td><td><b>Numero Pregunta</b></td><td><b>Eval1</b></td><td><b>Eval2</b></td><td><b>Eval3</b></td><td><b>opinPos</b></td><td><b>opinNeg</b></td><td><b>Media</b></td><td><b>Ponderacion</b></td></tr>";
  22.    
  23.     // SELECIONAMOS TODOS LOS DATOS DE ENCUESTAS CUANDO TENGAN ESE CÓDIGO DE AMBITO.
  24.     $encuestas = ("SELECT descripAmbito, descripCentro, encuestas.codAmbito, encuestas.codCentro, numeroPregunta, evaluador1, evaluador2, evaluador3, opinPos, opinNeg, media, ponderacion
  25.     FROM ambitos, centros, encuestas
  26.     WHERE ambitos.codAmbito = '".$datos['codAmbito']."'
  27.     AND ambitos.codAmbito = encuestas.codAmbito
  28.     AND centros.codCentro = encuestas.codCentro
  29.     ORDER BY encuestas.numeroPregunta");
  30.     $resuencuestas = mysql_query($encuestas);
  31.        
  32.         // MIENTRAS  HAYA RESULTADOS IMPRIME.
  33.         while($datos2 = mysql_fetch_assoc($resuencuestas)) {
  34.                    
  35.  
  36.         $media = round($datos2['media'],2);
  37.         $ponderacion = round($datos2['ponderacion'],2);
  38.                    
  39.         // RELLENAMOS LA TABLA CON LOS DATOS.
  40.         echo "<tr>";
  41.         echo "<td align=\"left\">".$datos2['descripCentro']." </td>";
  42.         echo "<td align=\"center\">".$datos2['numeroPregunta']." </td>";
  43.         echo "<td align=\"center\">".$datos2['evaluador1']." </td>";
  44.         echo "<td align=\"center\">".$datos2['evaluador2']." </td>";
  45.         echo "<td align=\"center\">".$datos2['evaluador3']." </td>";
  46.         echo "<td align=\"center\"><textarea rows=\"5\" cols=\"25\" disabled>".$datos2['opinPos']." </textarea></td>";
  47.         echo "<td align=\"center\"><textarea rows=\"5\" cols=\"25\" disabled>".$datos2['opinNeg']." </textarea></td>";
  48.         echo "<td align=\"center\">".$media."</td>";
  49.         echo "<td align=\"center\">".$ponderacion."</td>";
  50.         echo "</tr>";
  51.        
  52.  
  53.    
  54.    
  55.             // CONTAMOS EL NÚMERO DE REGISTROS PARA DIVIDIR.
  56.             $sql4 = ("SELECT COUNT(*) FROM encuestas WHERE numeroPregunta = '".$datos2['numeroPregunta']."' AND codAmbito = '".$datos2['codAmbito']."'");
  57.             $resultados4 = mysql_query($sql4);
  58.             while($datos4 = mysql_fetch_array($resultados4)){
  59.                 $cuenta = $datos4[0];
  60.             }
  61.            
  62.             // SELECIONAMOS Y SUMAMOS LA MEDIA CUANDO SEA ESE NUMERO DE PREGUNTA EN ESE AMBITO.
  63.             $sql5 = ("SELECT SUM(ponderacion) as resultado FROM encuestas WHERE numeroPregunta = '".$datos2['numeroPregunta']."' AND codAmbito = '".$datos2['codAmbito']."'");
  64.             $resultados5 = mysql_query($sql5);
  65.             while($datos5 = mysql_fetch_array($resultados5)){
  66.                     $mediatotal = round($datos5[0],2);
  67.                    
  68.                    
  69.             }
  70.  
  71.         $mt [$datos2['numeroPregunta']]= $mediatotal;  
  72.         }
  73.  
  74.         // CERRAMOS LA TABLA.
  75.         echo "</table>";
  76.         echo "<br>";
  77.        
  78.         // IMPRIMIMOS LAS MEDIAS TOTALES.
  79.         echo "</td><td><div id=\"flotante\">";
  80.         echo "<table border=\"1\" class=\"encuestas\">";
  81.         echo "<br>";
  82.         echo "<tr><td><b>Numero Pregunta </b></td><td><b>Resultado</b></td></tr>";
  83.         foreach ($mt as $numpre => $mediattl){
  84.         echo "<tr><td>".$numpre."</td><td>".$mediattl."</td></tr>";
  85.  
  86. }
  87.  
  88. echo "</table>";
  89. echo "</div></td>";
  90. echo "</tr><tr><td colspan=\"2\" align=\"center\"> <img src=\"pdf.png\" height=\"80\" onClick=\"location.href = 'rp_pdf.php?ambito=$amb';\"> <img src=\"web.png\" height=\"80\" onClick=\"location.href = 'rp_web.php?ambito=$amb&archivo=rp_web.php';\"> <img src=\"printer.png\" height=\"80\" onClick=\"location.href = 'rp_print.php?ambito=$amb';\"> </td></tr></table>";
  91. echo "<br>";
  92.  
  93. }
  94. echo "<a href=\"crearp.php\" align=\"center\">Volver.</a>";
  95. ?>

En esa página me muestra una tabla con datos etc etc, que son los que quiero imprimir

al darle al boton me crea bien la página y tal, pero en vez de mostrarme los datos etc, me muestra las consultas PHP

que tendría que hacer para que me muestre el HTML obtenido del PHP?
__________________
Nunca dijeron que la vida sería fácil, sólo prometieron que valdría la pena vivirla.

Dar las gracias y añadir Karma, no cuesta nada, ¿Que menos si te ayudan? :)
  #4 (permalink)  
Antiguo 07/06/2012, 09:00
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Guardar copia de página web

Si, el error fue mío, es que para que tome el html generado hay que poner la url

quedaría asi (le inclui un par de lineas para hacerla segura y pueda ser llamada solo desde tu propio dominio). Solo tenés que configurar una cosa, yo la llame, autodescarga.php, si le cambiases el nombre , editale la primera linea.

Código PHP:
Ver original
  1. <?php
  2. ### Configuración
  3. # en la siguiente variable poner el nombre del archivo actual
  4. $este_archivo = 'autodescarga.php';
  5. #####
  6. $host = $_SERVER['HTTP_HOST'];
  7. $ruta = $_SERVER['SCRIPT_NAME'];
  8. $dir =str_replace($este_archivo,'',$ruta);
  9. $ref = $_SERVER['HTTP_REFERER'];
  10. $dominio_ref = parse_url($ref);
  11. if( $dominio_ref['host'] != $host){
  12. echo "Error: no autorizado";
  13. }
  14. if(isset($_GET['archivo'])){
  15. $archivo = $_GET['archivo'];
  16. }else{
  17. $archivo = "Error: archivo inexistente";
  18. }
  19. header('Content-Type: text/html;charset=utf-8');
  20. header("Content-Disposition:attachment ; filename=$archivo");      
  21.     header('Expires: 0');
  22.     header('Cache-Control: must-revalidate');
  23.     header('Pragma: public');
  24.     echo file_get_contents("http://" . $host . $dir . $archivo);
  25.     echo "\n\n\n<!-- Archivo descargado desde " . $_SERVER['HTTP_REFERER'] . " -->\n\n" ;
  26.     exit;
  27. ?>


El resto no cambia, la llamas
<p><a href="autodescarga.php?archivo=loguin.php">Descarg ar</a></p>

Y tenes que copiarla a cada carpeta de donde quieras se puedan descargar archivos.
Si tenes dudas, sería preferible a esta altura mover el tema a php

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: copia, html, página, botones
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 10:03.