2010-05-03 3 views
11
  • Каков наилучший способ сохранить отформатированную страницу html с CSS в базе данных MYSQL? Является ли это возможным?
  • Какой тип столбца должен быть? Как получить сохраненный форматированный HTML и правильно отобразить его с помощью PHP?Извлечь HTML-страницу и сохранить ее в MYSQL. Как сделать

  • Что делать, если страница, которую я хотел бы принести есть фото и видео, показать храню страницу как сгустка

  • Какой самый лучший способ загрузки страницы с помощью PHP-CURL, Еореп, ..-?

Многие вопросы ребята, но мне очень нужна ваша помощь, чтобы поместить меня на правильный путь.

Большое спасибо.

ответ

7

Простой, попробуйте этот код, который я сделал для вас.

Это основа для захвата и сохранения источника в БД.

Я не ставил обработку ошибок или что-то еще, просто держать его просто на данный момент ...

Я не сделал функцию, чтобы показать результат, но вы можете напечатать $ источника для просмотра результат.

Надеюсь, это вам поможет.

<?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

Большое спасибо за код. Мне нужно сохранить отформатированную веб-страницу с помощью CSS и pics, поэтому, когда я повторяю ее, результат будет отформатированной веб-страницей, как и оригинал. Я не благодарю, что код выше сделал бы это. Пожалуйста, поправьте меня, если я ошибаюсь. – codemaker

+0

Да, попробуйте сами, используйте: echo GetPage ('http://www.google.com'); Вы увидите ту же страницу, что и Google. Если это не то, что вы хотите, я не понял ваш запрос ... – geek1983

+0

Извините, echo GetPage ('http://www.google.com'); – geek1983

-2

Вы можете сохранить данные в виде текстового типа в mysql
, но вам нужно преобразовать данные. Страница bcz может содержать много цитат и специальных символов.
вы можете увидеть этот вопрос THIS Его не точный вопрос, но он поможет, когда вы будете хранить данные в базе данных.
об этих изображениях и видео ... если вы сохраняете содержимое страницы, тогда будут только пути к этим изображениям и видеороликам .. поэтому никаких проблем не возникнет, когда вы будете хранить в базе данных.

+0

-1 для того, чтобы быть в основном нечитаемыми и в основном неправильными. Работа с кавычками не требует, чтобы данные были «преобразованы», а просто выполнялись стандартные стандартные подходы к вставке данных в базу данных. Кроме того, относительные URI будут разбиваться, как только HTML будет удален от исходного URI. – Quentin

+0

Когда у вас были данные со стилями и данными со многими кавычками ... тогда вы получите мою мысль. я думаю, что у вас нет содержимого кавычек или нет таблиц стилей. в основном при сохранении данных, которые будут введены пользователем, тогда вы не знаете, что они будут вводить. , так что если вам не нравится, тогда это нормально .... , если ваши данные введены вами только тогда, вы позаботитесь о котировках. цитаты приходят в проблему, когда вы будете запускать запрос. – Nitz

1

Потяните всю страницу, используя fopen и проанализируйте любые URL-адреса (например, изображения и css). Вы хотите запустить цикл, чтобы захватить каждый URL-адрес для файлов, которые генерируют страницу. Сохраните их также и замените URL-адреса, которые использовались для ссылки на другие файлы сайтов с вашими новыми ссылками. (это позволит избежать любых проблем, если файлы должны быть изменены или удалены в будущем).

Я бы рекомендовал использовать тип данных blob только потому, что он позволит вам хранить все файлы в одной таблице, но вы можете сделать таблицу для страниц с текстовым типом данных, а другой с blob для хранения изображений и других файлов.

Редактировать: Если вы храните в качестве типа данных blob в base64_encode(), это увеличит объем хранения на сервере, но вы избежите проблем с кавычками и специальными символами.

+0

Исправьте меня, если я ошибаюсь, вы предлагаете проанализировать страницу за 2 шага. Сначала без ссылок на css и изображения, а затем со ссылками. Мой вопрос заключается в том, как я должен все вместе думать и хранить его в блобе, а затем извлекать и отображать его с правильным форматом? Не могли бы вы объяснить больше? – codemaker

+0

Вы не можете сохранить всю страницу как один файл. Вам нужно собрать ссылки на странице (css, javascript, ect изображений). Затем fopen и сохранить эти файлы локально. Многие ссылки будут относительными, измените их, чтобы fopen мог открыть файлы. Как только эти файлы были сохранены, локально измените ссылки в html на ваши локальные ссылки. Вам также нужно будет проверить любые javascript и css для ссылок, а также повторить процесс для этих файлов. ~ Я предполагаю, что вы используете это для копирования страниц с других сайтов (аналогично http://www.archive.org/) и не используете его для хранения шаблонов, созданных локально. – Mestore

+0

Знаете ли вы быстрый HTML-парсер, реализованный в PHP для достижения этой задачи? – codemaker

1

Не используйте базу данных отношений для хранения файлов. Используйте файловую систему или решение NoSQL.

Возможно, вы захотите изучить различный открытый паук с открытым исходным кодом (htdig и httrack приходят на ум).

1

Я бы сохранил URL-адреса в базе данных и делал задание cron на wget страницах регулярно, сохраняя их в своих собственных локальных каталогах с ключами. Использование wget позволит вам кэшировать страницу и, при необходимости, кэшировать ее изображения, скрипты и т. Д. .... Вы также можете использовать команду wget, чтобы изменить внедренные URL-адреса, чтобы вам не нужно было кэшировать все.

Here is the man page for wget, вы также можете рассмотреть поиск «веб-сайта резервного копирования» или аналогичного.

(Под «ключевыми каталогами» я имею в виду, что ваша таблица базы данных будет иметь 2 поля, «ключ» и «url», [уникальный] «ключ» будет тем местом, где вы архивируете веб-сайт для использования wget.)

+0

Почему нет, поскольку URL-адрес веб-страницы очень мал по размеру, я не вижу проблем в сохранении содержимого страницы в тексте или блобе. Я считаю, что получение 60 КБ или около того из базы данных будет более быстрым, чем локальный жесткий диск. – codemaker