Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.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-删除div的内容不';不能在特定文件中工作_Php - Fatal编程技术网

PHP-删除div的内容不';不能在特定文件中工作

PHP-删除div的内容不';不能在特定文件中工作,php,Php,我编写了一个函数,它打开一个HTML文件,用某个类删除div的内容并保存文件。我在三个不同的位置创建了3个测试文件。我的函数在site.html和site3.html上运行得很好,但在site2.html上不行 文件夹结构如下所示: /testing/script.php//包含我的函数 /测试/site.html /测试/folder1/site2.html//脚本在此文件中不起作用 folder2/site3.html 文件的HTML是相同的 <!DOCTYPE html PUBL

我编写了一个函数,它打开一个HTML文件,用某个类删除div的内容并保存文件。我在三个不同的位置创建了3个测试文件。我的函数在site.html和site3.html上运行得很好,但在site2.html上不行

文件夹结构如下所示:

/testing/script.php//包含我的函数

  • /测试/site.html
  • /测试/folder1/site2.html//脚本在此文件中不起作用
  • folder2/site3.html
文件的HTML是相同的

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="string">Content of site2.html</div>
<div id="well">not here</div>
<div id="empty"></div>
<div>foo</div>
</body>
</html>
我猜

<div id="empty"></div>

导致您的“空异常”。里面没有什么可以移除的

我想

<div id="empty"></div>


导致您的“空异常”。里面没有什么可以移除的

我只能建议在删除firstChild之前对其进行测试,因为在其他方面,您的代码似乎很好

foreach ( $pDivs as $div )
{
    if( $div->firstChild )
    {
      $div->removeChild( $div->firstChild );
    }
}

我所能建议的就是在删除firstChild之前对其进行测试,因为在其他方面,您的代码似乎很好

foreach ( $pDivs as $div )
{
    if( $div->firstChild )
    {
      $div->removeChild( $div->firstChild );
    }
}


/folder1/site2.html
这是相对于根的,当您将其设置为相对路径时会发生什么(删除第一个斜杠“folder1/site2.html”)?@AaronW。如果这三个文件都完全相同,我无法想象问题出在代码上。权限?尝试var_转储每个文件的内容并对其进行区分?删除整个div是否更有意义,还是需要保留该容器<代码>$div->parentNode->removeChild($div)否则,您需要一个循环,因为将有很多子节点类型,例如属性(您的@class是子节点)、文本节点和其他元素节点。etc和“firstChild”可能不是您所期望的。
/folder1/site2.html
这是相对于根的,当您将其设置为相对路径时会发生什么情况(删除第一个斜杠“folder1/site2.html”)?@AaronW。如果这三个文件都完全相同,我无法想象问题出在代码上。权限?尝试var_转储每个文件的内容并对其进行区分?删除整个div是否更有意义,还是需要保留该容器<代码>$div->parentNode->removeChild($div)否则,您需要一个循环,因为将有很多子节点类型,例如属性(您的@class是子节点)、文本节点和其他元素节点。等等,“第一个孩子”可能不是你所期望的。你是对的!我怎样才能解决这个问题?因为有时文件中可能有一个空div…xpath不会选择该div,因为它的class属性与单词
string
不匹配您是对的!我怎样才能解决这个问题?因为有时文件中可能有一个空div…xpath不会选择该div,因为它的class属性与单词
string
不匹配,这很有效!但我不明白为什么。这段代码不只是测试div是否有firstChild(本例中firstChild=content)?抱歉,我刚开始使用PHPI,我真的不知道到底发生了什么,你可以用
var_dump($dom->saveHTML($div))转储div
var_dump($dom->saveHTML($div->firstChild))从循环中了解代码的工作原理,请明天检查。顺便问一下,你认为我的代码使用安全吗?我想在非常重要的文件上使用我的脚本,这些文件比我的测试文件大得多。其次,您知道一个简单的解决方案来避免DOMXPath添加一些标记和doctype吗?您的方法似乎很好,从文件系统的角度来看,用户可以与之交互的内容很少。我不确定为生成有效文档而添加的额外doctype内容,我确定在某些地方有一些dom设置。这很有效!但我不明白为什么。这段代码不只是测试div是否有firstChild(本例中firstChild=content)?抱歉,我刚开始使用PHPI,我真的不知道到底发生了什么,你可以用
var_dump($dom->saveHTML($div))转储div
var_dump($dom->saveHTML($div->firstChild))从循环中了解代码的工作原理,请明天检查。顺便问一下,你认为我的代码使用安全吗?我想在非常重要的文件上使用我的脚本,这些文件比我的测试文件大得多。其次,您知道一个简单的解决方案来避免DOMXPath添加一些标记和doctype吗?您的方法似乎很好,从文件系统的角度来看,用户可以与之交互的内容很少。我不确定为生成有效文档而添加的额外doctype内容,我肯定在某些地方有一些dom设置。