Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取HTML页面并将其存储在MYSQL中-如何 将带有CSS的格式化html页面存储到MYSQL数据库的最佳方法是什么?可能吗_Php_Mysql_Html - Fatal编程技术网

Php 获取HTML页面并将其存储在MYSQL中-如何 将带有CSS的格式化html页面存储到MYSQL数据库的最佳方法是什么?可能吗

Php 获取HTML页面并将其存储在MYSQL中-如何 将带有CSS的格式化html页面存储到MYSQL数据库的最佳方法是什么?可能吗,php,mysql,html,Php,Mysql,Html,列类型应该是什么?如何检索存储的格式化HTML并使用PHP正确显示它 如果我要获取的页面包含图片和视频,则显示我将页面存储为blob 使用PHP-CURL、fopen、…-获取页面的最佳方法是什么 很多问题,伙计们,但我真的需要你们的帮助,让我走上正确的道路 非常感谢 您可以将数据作为文本数据类型存储在mysql中 但是您必须转换数据bcz页面可能包含许多引号和特殊字符。 您可以看到这个问题与您的问题并不完全一致,但当您将数据存储到数据库中时,它会有所帮助。 关于图像和视频…如果您正在存储页面

列类型应该是什么?如何检索存储的格式化HTML并使用PHP正确显示它

  • 如果我要获取的页面包含图片和视频,则显示我将页面存储为blob

  • 使用PHP-CURL、fopen、…-获取页面的最佳方法是什么

  • 很多问题,伙计们,但我真的需要你们的帮助,让我走上正确的道路


    非常感谢

    您可以将数据作为文本数据类型存储在mysql中
    但是您必须转换数据bcz页面可能包含许多引号和特殊字符。
    您可以看到这个问题与您的问题并不完全一致,但当您将数据存储到数据库中时,它会有所帮助。

    关于图像和视频…如果您正在存储页面内容,则只有该图像和视频的路径。。所以,当您存储在数据库中时,不会出现任何问题。

    使用fopen下拉整个页面并解析出任何URL(如图像和css)。您需要运行一个循环来获取生成页面的文件的每个URL。同时存储这些文件,并用新链接替换用于链接到其他站点文件的URL。(这将避免将来更改或删除文件时出现任何问题)

    我建议使用blob数据类型,因为它允许您将所有文件存储在一个表中,但您可以使用文本数据类型为页面创建一个表,使用blob创建另一个表以存储图像和其他文件

    编辑:
    如果存储为blob数据类型,请查看base64_encode(),这将增加服务器上的存储空间,但可以避免引号和特殊字符的问题。

    不要使用关系数据库存储文件。使用文件系统或NoSQL解决方案


    您可能希望查看各种可用的开源spider(请记住htdig和httrack)。

    我将URL存储在数据库中,并定期执行
    cron
    作业以
    wget
    页面,将它们存储在自己的键控本地目录中。使用
    wget
    将允许您缓存页面,并可以选择缓存其图像、脚本等。。。也您还可以让
    wget
    命令更改嵌入的URL,这样就不必缓存所有内容

    ,你也可以考虑搜索“WGET备份网站”或类似的内容。


    (所谓“键控目录”,我的意思是你的数据库表将有两个字段,一个“键”和一个“url”;[unique]“键”将是你使用
    wget
    存档网站的路径)

    非常简单,试试我为你编写的代码

    这是在数据库中获取和保存源代码的基础

    我没有把错误处理或其他任何东西,只是保持简单的时刻

    我没有使用函数来显示结果,但是您可以打印$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表示大部分内容不可读,大部分内容错误。处理引号不需要“转换”数据,只需要执行将数据插入数据库的标准常规方法。此外,当HTML从其原始URI移出时,相对URI将立即中断。当您有带有样式的数据和带有多个引号的数据时,您将明白我的观点。我认为你的网页内容没有引用或没有样式表。大多数情况下,当您存储用户将输入的数据时,您不知道用户将输入什么。所以如果你不喜欢,那就好了。。。。如果您的数据仅由您输入,那么您将负责报价。当您启动查询时,引号将出现问题。如果我错了,请纠正我,您建议分两步解析页面。第一个没有链接到css和图像,第二个有链接。我的问题是,我应该如何将所有的想法放在一起,存储在一个blob中,然后用正确的格式检索和显示它?请你再解释一下好吗?你不能将整个页面保存为一个文件。您需要收集页面内的链接(css、javascript、图像等),然后在本地打开并保存这些文件。很多链接都是相对的,请修改它们以便fopen可以打开文件。在本地保存这些文件后,将html中的链接更改为本地链接。您还必须检查任何javascript和css的链接,并对这些文件重复该过程~我假设您使用它从其他站点(类似于)翻页,而不是使用它存储本地创建的模板。您知道用PHP实现的快速HTML解析器可以完成此任务吗?我从未使用过它,但我相信它相当容易设置,应该允许您更改HTML以满足您的需要。有很多解析器,谷歌快速查询就能找到其中的大部分。为什么不呢?因为网页的URL非常小,我认为将网页内容保存在文本或blob中没有问题。我相信从数据库中获取60KB左右的数据比本地硬盘更快。非常感谢您提供的代码。我需要存储一个带有CSS和图片的格式化网页,所以当我回显它时,结果将是一个与原始网页一样的格式化网页。我不感谢上面的代码会这样做。如果我错了,请纠正我。是的,会的,你自己试试,使用:echo GetPage(');您将看到与google相同的页面。如果这不是你想要的,我不明白你的要求…谢谢,我要试试。