在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,因为没有任何处理它。
答案 0 :(得分:6)
试图避免过多的信息,但这是在Linux上与Apache一起使用时PHP的完整周期。
常见的服务器设置称为LAMP堆栈,代表Linux,Apache,Mysql和PHP。通常,您可以找到许多现成的LAMP堆栈设置以及使用它们的指南,因此在您的问题的上下文中,您需要关注的是Apache和PHP。
当Web浏览器通过PHP联系运行Apache的Web服务器时,第一步是让Apache找到所需的内容。假设您访问www.mywebsite.com/hello.php,Apache将会看到您正在寻找一个名为hello.php的文件。此时,由于后缀(.php),Apache知道这个文件需要由PHP解释,因此它将处理委托给PHP解释器。
从Apache到PHP的交接包括一系列标题,告诉PHP以下内容:正在处理什么类型的事务(GET / POST / PUT / DELETE),传入请求的IP地址,浏览器的用户代理(Firefox,MSIE,IPhone等),如果有cookie。更重要的是,Apache向PHP提供了服务器上hello.php文件的路径。
根据配置的不同,PHP可能需要做一些基本的内务处理(设置自己),但在理想的条件下它可以开始并打开hello.php PHP的一部分是一个名为lexer的模块,它查看hello.php和弄清楚如何处理文件。通过提供的示例,一个非常简单的示例可能如下所示:
注意,我已经编写了大部分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)中,可以完成所有这些工作,但是对于这个描述,已经存在更好的答案。