2010-05-03 7 views
11
  • ¿Cuál es la mejor manera de almacenar una página html formateada con CSS en la base de datos MYSQL? ¿Es posible?
  • ¿Cuál debe ser el tipo de columna? ¿Cómo recuperar el HTML formateado almacenado y mostrarlo correctamente utilizando PHP?Obtener página HTML y almacenarla en MYSQL- Cómo

  • ¿Qué pasa si la página me gustaría a buscar tiene fotografías y videos, espectáculo que guardar la página como blob

  • ¿Cuál es la mejor manera de obtener una página con PHP-Curl, fopen, ..-?

Muchas preguntas chicos pero realmente necesito su ayuda para ponerme en el camino correcto para hacerlo.

Muchas gracias.

Respuesta

7

Bastante simple, pruebe este código que hice para usted.

Lo básico es capturar y guardar la fuente en una base de datos.

no puse el tratamiento de errores o cualquier otra cosa, De una manera sencilla, por el momento ...

Yo no hice la función para mostrar el resultado, pero puede imprimir la fuente $ para ver el resultado.

Espero que esto te ayude.

<?php 

function GetPage($URL) 
{ 
    #Get the source content of the URL 
    $source = file_get_contents($URL); 

    #Extract the raw URl from the current one 
    $scheme = parse_url($URL, PHP_URL_SCHEME); //Ex: http 
    $host = parse_url($URL, PHP_URL_HOST); //Ex: www.google.com 
    $raw_url = $scheme . '://' . $host; //Ex: http://www.google.com 

    #Replace the relative link by an absolute one 
    $relative = array(); 
    $absolute = array(); 

    #String to search 
    $relative[0] = '/src="\//'; 
    $relative[1] = '/href="\//'; 

    #String to remplace by 
    $absolute[0] = 'src="' . $raw_url . '/'; 
    $absolute[1] = 'href="' . $raw_url . '/'; 

    $source = preg_replace($relative, $absolute, $source); //Ex: src="/image/google.png" to src="http://www.google.com/image/google.png" 

    return $source; 
} 

function SaveToDB($source) 
{ 
    #Connect to the DB 
    $db = mysql_connect('localhost', 'root', ''); 

    #Select the DB name 
    mysql_select_db('test'); 

    #Ask for UTF-8 encoding 
    mysql_query("SET NAMES 'utf8'"); 

    #Escape special chars 
    $source = mysql_real_escape_string($source); 

    #Set the Query 
    $query = "INSERT INTO website (source) VALUES ('$source')"; //Save it in a text row, that's it... 

    #Run the query 
    mysql_query($query); 

    #Close the connection 
    mysql_close($db); 
} 

$source = GetPage('http://www.google.com'); 

SaveToDB($source); 

?> 
+0

Muchas gracias por el código. Necesito almacenar una página web formateada con CSS y fotos, así que cuando la repita, el resultado será una página web formateada como la original. No agradezco el código anterior que haría eso. Por favor corrígeme si estoy equivocado. – codemaker

+0

Sí lo hará, pruébelo usted mismo, use: echo GetPage ('http://www.google.com'); Verá la página idéntica a google. Si eso no es lo que quiere, no entendí su solicitud ... – geek1983

+0

Lo siento, echo GetPage ('http://www.google.com'); – geek1983

-2

Puede almacenar los datos como tipo de datos de texto en mysql
pero debe convertir la página de datos bcz puede contener muchas comillas y caracteres especiales.
puede ver esta pregunta THIS No es exacto a su pregunta, pero le ayudará cuando va a almacenar los datos en la base de datos.
sobre esas imágenes y videos ... si está almacenando contenido de la página, entonces solo habrá rutas de esas imágenes y videos ... por lo que no surgirá ningún problema cuando vaya a almacenar en la base de datos.

+0

-1 por ser en su mayoría ilegible y en gran medida incorrecto. Tratar con citas no requiere que los datos sean "convertidos", simplemente que usted realiza los enfoques estándar y de rutina para insertar datos en una base de datos. Además, los URI relativos se interrumpirán tan pronto como el HTML se aleje de su URI original. – Quentin

+0

Cuando tenía datos con sus estilos y datos con muchas citas ... entonces obtendrá mi punto. Creo que el contenido de la página no tiene citas ni hojas de estilo. mayormente cuando almacenaste los datos que ingresará el usuario, entonces no sabes en qué ingresarán. así que si no te gusta, entonces está bien .... si solo ingresas tus datos, entonces te ocuparás de las comillas. Las citas aparecerán en un problema cuando active la consulta. – Nitz

1

Abra toda la página usando fopen y analice cualquier URL (como imágenes y css). Querrá ejecutar un bucle para tomar cada una de las URL de los archivos que generan la página. Almacene estos también, y reemplace las URL que solían vincular a los otros archivos de sitios con sus nuevos enlaces. (Esto evitará cualquier problema si los archivos cambian o se eliminan en el futuro).

Lo recomiendo usando un tipo de datos blob solo porque le permite almacenar todos los archivos en una tabla, pero podría hacer una tabla para las páginas con un tipo de datos de texto y otra con blob para almacenar imágenes y otros archivos.

Edit: Si está almacenando como un tipo de datos blob mire en base64_encode() aumentará la huella de almacenamiento en el servidor pero evitará cualquier problema con comillas y caracteres especiales.

+0

Corrígeme si me equivoco, sugiera analizar la página en 2 pasos. Primero sin enlaces a css e imágenes y segundo con los enlaces. Mi pregunta es: ¿cómo debo pensar todo junto y almacenarlo en un blob y luego recuperarlo y mostrarlo con el formato correcto? ¿Podrías explicar más? – codemaker

+0

No puede guardar toda la página como un solo archivo. Necesitas recopilar enlaces dentro de la página (css, javascript, etc. de imágenes). Luego abre y guarda esos archivos localmente. Muchos de los enlaces serán relativos, modifíquelos para que fopen pueda abrir los archivos. Una vez que esos archivos han sido guardados localmente, cambie los enlaces en el html a sus enlaces locales. También deberá verificar los javascript y css de los enlaces y repetir el proceso para esos archivos. ~ Supongo que está utilizando esto para copiar páginas de otros sitios (similar a http://www.archive.org/) y no usarlo para almacenar plantillas creadas localmente. – Mestore

+0

¿Conoces un analizador HTML rápido implementado en PHP para lograr la tarea? – codemaker

1

No utilice una base de datos de relaciones para almacenar archivos. Use un sistema de archivos o una solución NoSQL.

Es posible que desee ver las diversas arañas de código abierto que están disponibles (htdig y httrack vienen a la mente).

1

Guardaría las direcciones URL en una base de datos, y realizaría un trabajo en wget las páginas regularmente, almacenándolas en sus propios directorios locales con clave. El uso de wget le permitirá almacenar en caché la página y, opcionalmente, almacenar en caché sus imágenes, secuencias de comandos, etc. También puede hacer que su comando wget cambie las URL incrustadas para que no tenga que almacenar todo en caché.

Here is the man page for wget, también puede considerar buscar "wget ​​backup website" o similar.

(Por "directorios clave" quiero decir que su tabla de base de datos tendría 2 campos, una "clave" y una "url", la "clave" única sería la ruta donde archivaría el sitio web para usar wget.)

+0

Por qué no, dado que una URL de una página web es muy pequeña, no veo ningún problema para guardar el contenido de la página en un texto o blob. Creo que obtener más de 60 KB de una base de datos sería más rápido que un disco duro local. – codemaker

Cuestiones relacionadas