Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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 替换特定图像链接的更快方法XPath/Preg_replace_Php_Dom_Xpath_Getattribute - Fatal编程技术网

Php 替换特定图像链接的更快方法XPath/Preg_replace

Php 替换特定图像链接的更快方法XPath/Preg_replace,php,dom,xpath,getattribute,Php,Dom,Xpath,Getattribute,我已经编写了一小段加载HTML内容的代码。处理每个图像并检查其是否具有完整的URL集 如果没有,它会添加它 目前我正在使用XPath进行此操作。 但是我感觉这个过程需要大量的CPU。 因此,我想知道是否有一个更快的方法,我目前正在做什么 我写的代码 ///######## START A NEW DOM DOCUMENT $dom = new DOMDocument; ///######## LOAD THE HTML INT

我已经编写了一小段加载HTML内容的代码。处理每个图像并检查其是否具有完整的URL集

如果没有,它会添加它

目前我正在使用XPath进行此操作。 但是我感觉这个过程需要大量的CPU。 因此,我想知道是否有一个更快的方法,我目前正在做什么

我写的代码

        ///######## START A NEW DOM DOCUMENT
        $dom            = new DOMDocument;
        ///######## LOAD THE HTML INTO THE DOM DOCUMENT
        $dom->loadHTML($html);
        ///######## GET ALL IMAGES WITH XPath
        $Images         = $dom->getElementsByTagName('img');
        ///######## SETUP AN EMPTY SOURCE AND TARGET ARRAY
        $SourceArray    = $TargetArray = array();

        ///######## RUN THROUGH ALL SET IMAGE NODES
        foreach ($Images as $node) {
            ///######## GET THE URL ATTRIBUTE
            $SetURL = $node->getAttribute('src').PHP_EOL;

            ///######## IF THE URL DOES NOT START WITH HTTP
            if(substr($SetURL, 0, 4) != 'http'){
                ///######## SET THE URL TO THE SOURCE ARRAY
                $SourceArray[] = 'img src="'.$SetURL;
                ///######## SET THE TARGET URL
                $TargetArray[] = 'img src="'.__APPBASE__.'/'.$this->TEMPLATEDIR.'/'.$SetURL;
            }
        }
        ///######## REMOVE THE BREAKS FROM BOTH ARRAYS
        $SourceArray    = str_replace(PHP_EOL, NULL, $SourceArray);
        $TargetArray    = str_replace(PHP_EOL, NULL, $TargetArray);
        ///######## REPLACE THE HTML TEXT
        $html           = str_replace($SourceArray, $TargetArray, $html);

        ///######## UNSET THE VARIABLES {free up memory}
        unset($dom);
        unset($SourceArray);
        unset($TargetArray);

一种感觉是一种不好的解决问题的方式。还有,为什么不在一次性eventWell中修复HTML内容呢。。如果我告诉你在保存的时候我不能修复HTML呢。我想设置绝对URL。但每个实例都可能发生变化。因此,这就是为什么我想这样做。。。但问题是。。。如果你想链接一个外部图像,它也会被修复。这正是我想要阻止的。使用外部网站为您的网站创建图像不是一个好主意-这很可能会破坏。图像链接比超链接更脆弱。因为人们倾向于把latter@EdHeal,也许吧,但我仍然想支持它,因为我正在创建的系统应该支持所有类型的出站链接和信息。我不在乎它是否能正常工作一个月,然后就消失了。因为它应该只存储一周的数据。