什么呈现HTML?

时间:2011-05-31 22:00:00

标签: php html rendering

在PHP中,您可以与PHP一起编写html,例如:

<html>
    <head>
        <?php echo "HTML Title from PHP "; ?>
    </head>
    <body>
        <h1>hello world!</h1>
    </body>
</html>

我想知道这是什么,它是如何工作的,写的是什么,我需要多深才能理解它?

现在我听说template engines,但也有很多template engines for PHP,所以在模板引擎上编写模板引擎听起来很愚蠢(对我来说)也是我理解的模板引擎解析整个文件只是为了替换命令,然后它也开始输出文件内容,所以我觉得它不是系统的一部分,从而失去了性能。 (也许我完全错了,但认真地说,这就是我听到它时的感受:P)

修改

伙计们,当我说什么呈现HTML时,我的意思是什么在PHP中呈现HTML?在node.js文件中,您无法编写任何HTML,因为没有任何处理它。

6 个答案:

答案 0 :(得分:6)

试图避免过多的信息,但这是在Linux上与Apache一起使用时PHP的完整周期。

Prerequisities

常见的服务器设置称为LAMP堆栈,代表Linux,Apache,Mysql和PHP。通常,您可以找到许多现成的LAMP堆栈设置以及使用它们的指南,因此在您的问题的上下文中,您需要关注的是Apache和PHP。

第1阶段 - 授权

当Web浏览器通过PHP联系运行Apache的Web服务器时,第一步是让Apache找到所需的内容。假设您访问www.mywebsite.com/hello.php,Apache将会看到您正在寻找一个名为hello.php的文件。此时,由于后缀(.php),Apache知道这个文件需要由PHP解释,因此它将处理委托给PHP解释器。

第2阶段 - 设置

从Apache到PHP的交接包括一系列标题,告诉PHP以下内容:正在处理什么类型的事务(GET / POST / PUT / DELETE),传入请求的IP地址,浏览器的用户代理(Firefox,MSIE,IPhone等),如果有cookie。更重要的是,Apache向PHP提供了服务器上hello.php文件的路径。

第3阶段 - 处理

根据配置的不同,PHP可能需要做一些基本的内务处理(设置自己),但在理想的条件下它可以开始并打开hello.php PHP的一部分是一个名为lexer的模块,它查看hello.php和弄清楚如何处理文件。通过提供的示例,一个非常简单的示例可能如下所示:

  1. T_STRING =“&lt; html&gt; \ n \ t&lt; head&gt; \ n \ t”
  2. T_OPEN_TAG;
  3. T_ECHO;
  4. T_STRING =“PHP的HTML标题”;
  5. ;
  6. T_CLOSE_TAG;
  7. T_STRING =“\ t&lt; / head&gt; \ n \ t&lt; body&gt; \ n \ t&lt; h1&gt; hello world!&lt; / h1&gt; \ n \ t&lt; / body&gt; \ n&lt; / html&gt;”< / LI>

    注意,我已经编写了大部分T_代码,但它们非常接近真实的代码。

    第1行 - PHP知道它超出了所谓的范围,因此它立即将整个字符串传递给Apache,即Web服务器。 Apache很可能会将整个字符串传递到Web浏览器上。

    第2行。 - T_OPEN_TAG告诉PHP它正在进入PHP范围并等待它的第一条指令。

    第3行 - T_ECHO告诉PHP它将创建一个echo语句,因此它的规则然后启动以查找要输出的表达式或字符串。

    第4行 - 幸运的是,下一个标记是一个字符串,所以PHP现在知道它将回应“来自PHP的HTML标题”

    第5行 - ;告诉PHP,echo语句是完整的,更重要的是这在语法上是正确的......所以PHP将字符串“HTML Title from PHP”传递给Apache,并将其传递给浏览器。

    第6行 - 关闭?&gt; tag告诉PHP它正在离开PHP语言范围,因此它可以追溯到更简单的规则集

    第7行 - 与第1行一样,整个字符串传递给Apache以传递给Web浏览器

    此时,PHP到达所谓的EOF或文件结尾,并知道它已经完成了处理文件hello.php。它会进行清理工作,然后告诉Apache它已完成。

    定稿

    此时请求已基本完成,Apache很可能会挂起在Web浏览器上,发送所有内容完整的通知。

    如果您有任何问题或需要有关下一步的指示,请告诉我。另外请注意,为了简洁起见,还有很多细节,但是为了理解鸟类如何看待PHP与网络浏览器的关系。网络服务器,这应该足以开始。

    演示脚本

    $test = 'Hello world <' . '?' . 'php echo \'this is in scope\'; ?' . '> and we\'re done';
    
     $tokens = token_get_all($test);
    
     print_r($tokens);
    

    输出将是PHP生成的真实世界标记字符串。每个标记可以是一个字符串或三元素元组/数字数组,其中索引0 = =标记ID,索引1 ==原始字符串,我不能为我的生活记住第三个元素是什么。如果您对每个令牌的名称感到好奇,请使用token_name

答案 1 :(得分:5)

首先, PHP是模板引擎,当您在示例中使用它时。

如果你想保持简单,你真的不需要任何东西。

答案 2 :(得分:4)

<? ?>大括号内的任何内容都是php代码 - 它在服务器端执行,然后它将纯HTML输出到客户端,此时客户端的Web浏览器呈现它。

看看这个diagram

答案 3 :(得分:4)

您的浏览器只是呈现HTML的东西。无论是通过PHP,javascript还是asp编写的,最终,文本意味着什么(因为html只是文本)是你的浏览器。

答案 4 :(得分:2)

渲染的最终产品由您的网络浏览器处理。 (FF用C / C ++编写)

在传输之前,apache通过用C编写的PHP(预处理器)运行所有php脚本

如果您使用PHP本身编写的PHP模板引擎(例如:Smarty

如果您真的关心性能,请切换到另一种语言。 PHP模板引擎不是为了节省CPU周期,甚至是速度,而是提高了生产力和可维护性,而且它们使前端开发人员能够在不知道PHP的情况下维护更复杂的模板,从而提高了工作的价值,同时免费开发人员要做更严肃的编码。

答案 5 :(得分:1)

嗯,您需要了解Web开发的历史 给你一个问题的“答案”。

在199x开始Web开发时,很多人都在使用 Perl的。在这些日子里,你经常有这样的代码:

print "<html>";
print "    <head>";
print "    <title>", get_site_name(), "</title>";
print "    </head>";
print "<body>Hello, World!</body>";
print "</html>";

正如您在此示例中所看到的,在这些日子里,您经常会结束 写了很多HTML,只是包含一些小动态的东西。 就像一个柜台,一个显示时间或其他时间的时钟 的东西。在这些日子里,PHP诞生了很多这个过程 更轻松。而不是编写打印大量HTML的代码, PHP是/是一个允许你编写的模板引擎 HTML,只包含您的代码。在这些日子里你可能 最终写出90%的HTML和10%的逻辑。在这些日子里 这就是你所需要的一切,而且更容易 这样。

但时间变了。今天,Web开发变得更加复杂 和早些时候一样。今天你可能只写90%的逻辑 10%的HTML。今天几乎所有事情都有 自动生成,来自数据库。因为 引发的肤色,今天你经常写你的PHP 应用程序如

<?php
    echo "<html>";
    echo "<head>";
echo "...";
echo "</html>";
?>

你可以看到,进化是倒退的。并非如此 和前几天一样有很大的不同。 PHP程序 大部分以启动php Tag并生成所有内容结束 并回应过去所需的一切 与Perl。

但是,这仍然没有实现,你结束了你的起点。因为 今天你在应用程序中编写了更多的逻辑, 将你的应用分成许多安宁是个好主意。 您可以将应用程序与逻辑分开,以及如何显示 你的数据。

逻辑本身用PHP编写,但要显示 数据人们倾向于使用其他模板引擎,这很多 今天更现代化,更好地满足需求。

是的,拥有模板引擎似乎有点尴尬 提升为通用语言,模板化 引擎已写入,但就是这样。

如何呈现HTML的问题,你有一个“php”解释器经常直接嵌入到Apache(mod_php)中,可以完成所有这些工作,但是对于这个描述,已经存在更好的答案。