Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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输出已经输出时,是否可以更改它?_Php - Fatal编程技术网

当PHP HTML输出已经输出时,是否可以更改它?

当PHP HTML输出已经输出时,是否可以更改它?,php,Php,是否可以更改已输出的内容?我知道装箱输出缓冲区是可以的,但我们讨论的是已经打印的内容 这就是index.php: <html> Hello <?php // Is it possible to change already outputed "Hello" here? ?> 你好 我甚至不能把这个问题说清楚。这不应该是“使用PHP进行递归输出操作”吗?是的,您需要使用这些函数根据您的评论,这里是一个假定的实现: <?php // start by c

是否可以更改已输出的内容?我知道装箱输出缓冲区是可以的,但我们讨论的是已经打印的内容

这就是
index.php

<html>

Hello

<?php

// Is it possible to change already outputed "Hello" here?

?>

你好

我甚至不能把这个问题说清楚。这不应该是“使用PHP进行递归输出操作”吗?

是的,您需要使用这些函数

根据您的评论,这里是一个假定的实现:

<?php 
// start by capturing output in a buffer to capture the html output
ob_start(); ?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Document</title>
    </head>
    <body>
        <p>Hello</p>
    </body>
</html>

<?php
// next, clean the buffer and assign to variable
$html = ob_get_clean();
// create a DOMDocument and load the captured output
$doc = new DOMDocument();
$doc->loadHTML($html);
// let's do something to the rendered output,
// for example, find the first <p> node and change its value
$nodes = $doc->getElementsByTagName('p');
$p = $nodes->item(0);
$p->nodeValue = 'replaced!';

// finally, echo the updated content as normal
echo $doc->saveXML();

文件
你好


如果响应已经提供给客户端:否。除非您的响应是HTML并且您使用javascript。考虑到第一件事,javascript超出了这个问题的范围:我们在这里讨论后端,正如您建议的客户端操作所指出的,我理解这一点。这不是我评论的中心点。我评论的中心点是,这是不可能的——因为您似乎排除了原始帖子中的输出缓冲。如果没有具体的细节,我认为很难给出答案,所以你应该考虑更新你的问题。例如,我们不知道您的内容是否已经提供,或者例如,您是否正在生成文件的输出渲染。请参阅@Ed Heal链接到文档-这是可能的,我现在正在使用
ob_start
执行此操作,如下所示:!我看到你对@Ed Heal答案的评论:输出缓冲是可以接受的。所以,让我推测一下。。。我想您有一个脚本,可以创建一些HTML输出。您希望捕获此信息,然后进行某种操作。您还没有阐明您想要做什么,但是让我们假设您想要对这个HTML进行一些DOM操作。是的,通过输出缓冲和
DOMDocument::loadHTML()
,这是完全可能的;e、 g:
ob_start();包括“template.php”;/*在这里做事*/$html=ob_get_clean()
将html捕获为字符串并传递到
DOMDocument
。它是否准确地回答了我的问题?正如我看到的文档状态:
输出控制函数不影响…,只影响PHP代码块之间的echo和data等函数
——这意味着无法修改PHP代码块之外的“Hello”。您的答案是我一直在寻找的答案,但是还有一个可能的改进窗口。@Ultra-为什么不首先编写合理的代码,这样您就不会编写东西,除非您确定它将被发送。似乎是更好的解决方案重写某些东西;-)重构不是问题option@ultra-只是懒惰,而不是重写工作不正常的代码。您必须编写一些代码来修复这两种情况。为什么不只是修复实际问题,而不是它的synptomsEd Heal?您是否曾经编辑过多年前创建的用于商业用途的代码,这些代码必须在合理的时间内完成更改后才能运行?你知道重构不是一个选项。“使用缓冲区会很麻烦。”-为什么?缓冲有它的用途,但在模板生成之外,我很少在代码中看到它,除非它被包装在大量代码中以修复“headers ready sent”(标题已发送)类型错误——通常是在页面中包含大量混合代码和输出的
if/else
语句。这很麻烦,因为它会使调试更加复杂。