使用DOM和CURL修改站点的html代码

时间:2014-04-09 13:08:57

标签: php dom curl

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

<?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();

1 个答案:

答案 0 :(得分:0)

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