【问题标题】:Modify the html code of site with DOM and CURL用DOM和CURL修改站点的html代码
【发布时间】:2014-05-22 17:09:34
【问题描述】:

我正在尝试修改本地站点的内容,因此我使用 CURL PHP 恢复站点的内容,然后使用 DOM 解析它并更改 html 代码以优化它。例如,我将标记更改为或这个例子,我最后改变了脚本javascript的位置。不,我需要在站点中应用此修改,所以我如何使用 curl 或其他解决方案(如果存在)来上传站点的新内容。

<?php
$URLs = "http://localhost/...";// url of site 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URLs);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
$source = curl_exec($ch);
libxml_use_internal_errors(true);
$dom = new DOMDocument();   
 $dom->recover = true;
 $dom->substituteEntities = true;
 $xhtml = (preg_match('/XHTML/', $source)) ? true : false;
        switch ($xhtml) {
            case true:
                $dom->loadXML($source);
                break;
            case false:
                $dom->loadHTML($source);
                break;
        }
libxml_use_internal_errors(false);
$body = @$dom->getElementsByTagName('body')->item(0);
        foreach (@$dom->getElementsByTagName('head') as $head) {
            foreach (@$head->childNodes as $node) {
                if ($node instanceof DOMComment) {
                    if (preg_match('/<script/i', $node->nodeValue)){
                        $src = $node->nodeValue;
                         $moveme[] = $node;
                    unset($src);
                    }
                }
                if ($node->nodeName == 'script' && $node->attributes->getNamedItem('type')->nodeValue == 'text/javascript') {
                    if (@$src = $node->attributes->getNamedItem('src')->nodeValue) {
                                        } else {
                        $src = $node->nodeValue;

                    }
                     $moveme[] = $node;
                    unset($src);
                }                
            }
        }
          foreach ($moveme as $moveit) {
            $body->appendChild($moveit->cloneNode(true));
            $moveit->parentNode->removeChild($moveit);
        } 
         $body = $xhtml ? $dom->saveXML() : $dom->saveHTML();

【问题讨论】:

    标签: php dom curl


    【解决方案1】:

    您可以将一些站点内容存储在临时文件夹中(包括时间戳)并将其用于站点。每隔 xxx 分钟左右,您可以运行脚本并将输出内容写入该临时文件夹。为此,您的脚本需要放在网络服务器上。
    我还找到了一个网站,它更详细地解释了我写的内容: http://www.snipe.net/2009/03/quick-and-dirty-php-caching/
    请注意,该教程被称为又快又脏是有原因的 :)

    【讨论】:

    • 谢谢。但是我不明白我可以在网站中加载新内容(或新的 html 代码)的人,你能解释一下吗
    • 添加行 file_put_contents( 'filename.html', $body );到您的脚本 - 脚本需要安装在同一个网络服务器上 - 您可以使用“隐藏” url(security-by-obscurity)并将该脚本放在那里 - 一旦您激活脚本,整个页面将被更改或开始来自命令行的脚本(例如来自 cron )并使用该脚本更新文件
    • 我尝试但没有结果,我为优化站点开发了一个组件,所以我在 joomla 中测试了我的组件(我的脚本)
    • so .. 脚本正在运行,您想在网站上上传代码。该代码是静态的……还是网站是动态的(例如使用 php)。如果它是动态的(使用 php),你不能使用我之前写的方法。这可以通过输出缓冲区而不是 curl_exec 来完成。如果它是一个静态页面并且您希望优化只完成一次,您需要在那里上传您的脚本......否则您需要包含一些 ftp 方式来上传您的优化脚本。如果脚本上传了,你只需要重写文件,即在url中调用
    • 我想我应该解释一下我到底在做什么,因为我不太了解你。首先,我是一名学生,我的 PFE 研究是开发一个用于分析网站的工具和一个适合任何 CMS 网站优化的组件。我尝试开发组件和插件 joomla 之类的组件,但不同之处在于我的组件是用 PHP 开发的(所以我不使用 JFactory ....来自 joomla)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2012-10-15
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多