【发布时间】:2011-02-15 05:08:02
【问题描述】:
- 将带有 CSS 的格式化 html 页面存储到 MYSQL 数据库的最佳方式是什么?可能吗?
列类型应该是什么?如何检索存储的格式化 HTML 并使用 PHP 正确显示?
如果我要获取的页面有图片和视频怎么办,显示我将页面存储为 blob
使用 PHP-CURL、fopen、..- 获取页面的最佳方法是什么?
伙计们有很多问题,但我真的需要你的帮助才能让我走上正确的道路。
非常感谢。
【问题讨论】:
列类型应该是什么?如何检索存储的格式化 HTML 并使用 PHP 正确显示?
如果我要获取的页面有图片和视频怎么办,显示我将页面存储为 blob
使用 PHP-CURL、fopen、..- 获取页面的最佳方法是什么?
伙计们有很多问题,但我真的需要你的帮助才能让我走上正确的道路。
非常感谢。
【问题讨论】:
很简单,试试我为你做的这段代码。
这是获取源代码并将其保存在数据库中的基础知识。
我没有放错误处理或其他什么,只是暂时保持简单......
我没有做显示结果的函数,但是你可以打印$source来查看结果。
希望这会对你有所帮助。
<?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);
?>
【讨论】:
使用 fopen 拉下整个页面并解析出任何 URL(如图像和 css)。您需要运行一个循环来获取生成页面的文件的每个 url。也存储这些,并用您的新链接替换用于链接到其他站点文件的 url。 (这将避免将来更改或删除文件时出现任何问题)。
我建议使用 blob 数据类型,因为它允许您将所有文件存储在一个表中,但您可以为具有文本数据类型的页面和另一个具有 blob 的页面创建一个表来存储图像和其他文件。
编辑: 如果您将存储为 blob 数据类型,请查看 base64_encode() 它将增加服务器上的存储空间,但您可以避免引号和特殊字符的任何问题。
【讨论】:
不要使用关系数据库来存储文件。使用文件系统或 NoSQL 解决方案。
您可能想了解各种可用的开源蜘蛛(想到 htdig 和 httrack)。
【讨论】:
我会将 URL 存储在数据库中,并定期为 wget 页面创建 cron 作业,并将它们存储在它们自己的键控本地目录中。使用wget 将允许您缓存页面,并且还可以选择缓存其图像、脚本等……。您还可以让 wget 命令更改嵌入的 URL,这样您就不必缓存所有内容。
Here is the man page for wget,你也可以考虑搜索“wget backup website”之类的。
(通过“键控目录”,我的意思是您的数据库表将有 2 个字段,一个“键”和一个“URL”,然后 [唯一]“键”将是您使用 @ 存档网站的路径987654326@.)
【讨论】:
您可以将数据存储为 mysql 中的文本数据类型
但是您必须转换数据 bcz 页面可能包含许多引号和特殊字符。
你可以看到这个问题THIS它并不完全符合你的问题,但是当你将数据存储在数据库中时它会有所帮助。
关于该图像和视频...如果您正在存储页面内容,那么将只有该图像和视频的路径..所以当您存储在数据库中时不会出现问题。
【讨论】: