列类型应该是什么?如何检索存储的格式化HTML并使用PHP正确显示?
如果我想要提取的页面有图片和视频,请显示我将页面存储为blob
使用PHP-CURL获取页面的最佳方法是什么,fopen,..-?
很多问题的人,但我真的需要你的帮助才能让我以正确的方式去做。
非常感谢。
答案 0 :(得分:8)
非常简单,请尝试我为您制作的代码。
在数据库中获取和保存源是基础知识。
我没有提出错误处理或其他任何内容,暂时保持简单...
我没有让函数显示结果,但你可以打印$ 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);
?>
答案 1 :(得分:1)
使用fopen下拉整个页面并解析出任何URL(如图像和CSS)。您需要运行循环来获取生成页面的文件的每个URL。也存储这些,并用新链接替换用于链接到其他站点文件的URL。 (如果文件应该更改或将来删除,这将避免任何问题。)
我建议使用blob数据类型,因为它允许您将所有文件存储在一个表中,但是您可以为具有text数据类型的页面执行表格,而使用blob存储另一个表格来存储图像和其他文件。“ / p>
编辑: 如果您将blob数据类型存储到base64_encode()中,它将增加服务器上的存储空间,但您将避免引号和特殊字符的任何问题。
答案 2 :(得分:1)
不要使用关系数据库来存储文件。使用文件系统或NoSQL解决方案。
你可能想要查看可用的各种开源蜘蛛(想想htdig和httrack)。
答案 3 :(得分:1)
我将URL存储在数据库中,并定期向cron
页面wget
作业,将它们存储在自己的键控本地目录中。使用wget
将允许您缓存页面,并可选择缓存其图像,脚本等。您还可以使用wget
命令更改嵌入的URL,以便不必缓存所有内容。
Here is the man page for wget,您也可以考虑搜索“wget备份网站”或类似内容。
(通过“键控目录”我的意思是你的数据库表将有2个字段,一个'key'和一个'url',[unique]'key'将是你将网站存档到使用{的路径{ {1}}。)
答案 4 :(得分:-1)
您可以将数据存储为mysql中的text数据类型
但你必须转换数据bcz页面可能内容很多引号和特殊字符
你可以看到这个问题THIS它与你的问题不完全相同,但是当你将数据存储在数据库中时它会有所帮助。
关于那些图像和视频...如果你正在存储页面内容,那么将只有那些图像和视频的路径......所以当你将存储在数据库中时不会出现问题。