DOUG LLOYD:所以在我们的 视频PHP语法, 我们谈了很多关于如何PHP 可以在命令行中使用 运行的方式程序 我们非常熟悉的C. 但正如我也提到 在该视频,PHP 最初开发 实现网络编程,网站。 所以,在这个视频我们 要谈谈我们如何 在Web开发环境中使用PHP。 我们知道,已经从 我们的视频在HTML, 该网站建 出了一套HTML标签的 即语义定义 网页的结构。 但网站是 建有纯HTML 从一个非常痛苦, 非常严重的限制。 并说明此限制, 让我们来考虑下。 所以现在我想建立一个网页 即,每当用户访问它, 它给了我目前的 时间在马萨诸塞州剑桥市, 显示它的最新分钟。 如果我现在做这一权利, 我可能会说这样的事情。 当前时间Cambridge--所以我有 HTML标签,头标签,标题标签, 身体tags--当前 时间在剑桥为14:08, 打印出军用时间。 如果它现在14:09,14:09,会发生什么? 好了,到目前为止,使用HTML,我有 去中和它更改为14:09。 再一分钟后, 我必须再次进行更改。 再一分钟后, 我必须再次进行更改。 正如你可以想像,这是 可能是最糟糕的工作不断。 你是站长的网页, 每一分钟,一天24小时, 您需要通过更新当前时间 手动打开为time.html和改变 代码只是片段说的 当前时间以小时和分钟。 这可能不是一个非常 很好地利用我们的资源, 人类和计算。 网站都是HTML 是完全静态的。 您可以更新的唯一途径 内容,正如我们所看到的, 是手动打开这些源 文件,编辑它们,并保存它们。 然后当用户 刷新页面, 或访问该页面的第一 一次,他们将获得的最新内容。 但仅仅因为我们已经 手动编辑它。 如果我们开始把一些PHP在那里, 我们的代码可以得到很多更灵活。 我们可以有办法为我们的网页 是动态的,或更新自己, 而不需要我们可怜 网站管理员在前面的例子 要手动更新的东西。 他们可以自动地做到这一点。 我们没有介入。 我们可以睡个安稳觉。 这可能是一件好事,如果 你做了很多的网络编程。 因此,在CS50 IDE中,我们运行 Web服务器Apache的叫。 这是一个很常用的, 开源Web服务器系统。 该系统具有 能力来解释 PHP,这将是非常有用的话 你想要做的任何PHP编程。 而在CS50 IDE,我们有一个命令 使这个很容易做到, apache50启动。 然后那条斜线 路径,以斜线,斜线 目录,这只是一个非常普通的方法 说明你在这里指定的内容 是一个路径到特定 目录你 想是根 现场,或根页, 或文件夹从您的Web服务器 将开始检查文件和服务 他们去谁要求他们的客户。 因此,让我们突然过来CS50 IDE,只是为了 告诉你,真快,是如何工作的。 所以,在这里CS50 IDE,我在一个 目录下名为周零点九。 我有two--我有 执行一个ls命令只 上面告诉你,我有 在这里两个目录,PHP, 这是我用在组文件中的 在PHP语法的视频,然后PHP的网站, 这是一组文件,我 想在这个视频中使用。 我想先 一个Web服务器实例 与PHP的Web文件夹中的内容 因为文件被端上来。 所以,我该怎么办? 我要去型apache50空间 开始,PHP空间,破折号网络。 这就是目录的路径 从那里我目前。 然后,我敲回车。 它会做一个 东西一点在这里。 然后它会说, Apache的成功启动。 您的网站现在可以at--和 再有就是网址的网站。 所以,我该怎么办? 我要快速复制这一点。 而我要去开up--和 我会缩小一点点这里 - 我要去开拓 一个新的选项卡浏览器。 而我要访问该网址。 我要敲回车。 这将加载。 我会再次缩小。 而且我们可以在这里看到的是 我的PHP网页目录的内容。 所以,现在基本上是从发生 在这里,CS50的IDE我的实例 在这些文件中提供长达 任何人谁要求他们。 而过的课程 这段视频中,我们将整理的 看看这些一堆 在上下文中不同的文件。 要测试你的Apache 服务器工作正常, 其通常会 是这种情况在CS50 IDE中, 但如果你这样做更普遍, 你开始建立自己的网站 服务器,有一个真正的 不同凡响的模拟, “世界你好”,也就是通常 用于PHP的Web开发。 这是有一个文件 由眼前这个代码 - 中 PHP的分隔符设置PHP的信息, 括号,分号之间。 这基本上是一个特殊的 PHP函数,告诉你 什么版本的PHP您正在运行。 因此,在CS50的IDE,我有 可用的文件只是 给大家展示一下这会是什么样子。 所以,我看我的索引 从我的PHP实例。 我的Apache实例运行 PHP的网站的内容。 我有一个文件,这里叫做info.php的。 我要点击它,缩小。 这是你将成为怎样 看看,漂亮多了。 这只是告诉我, 我的Apache服务器的工作。 这是,很显然,在 版本的PHP我参加竞选。 这是我模拟的“hello world”。 所以我知道事情是可操作的。 因此,我们好去。 我们可以从这里出发。 因此,让我们重温那 时间例子我们 谈到与我们可怜的站长 谁曾不断更新页面。 这可能是怎样的修复 我想实现的东西 使网站管理员没 必须不断更新的时间。 它会只是有点 自动发生。 下下来,HTML,它的 非常相似,但有一个例外。 但在这里我有一些PHP在顶部。 我有,显然,称这 功能date_default_timezone_set。 我们不谈论所有 在CS50这些功能, 因为PHP有​​可能 成千上万。 这可能是一个比特的 夸张,但它可能不是。 它有大量的内置函数。 所以这是一个功能明显 设置我的时区为美国/东部, 这是我的时区 目前在制作这部影片。 然后,我打电话到 函数调用,日期。 而且,很明显,我存储的 HIS一种叫,时间。 所以,这是怎么回事吗? 好了,基本上什么 发生的事情是,我在打电话 一些服务器,是要 告诉我现在是什么时候了。 而我将其转换为一种格式 时,分,秒。 其原因是大写的H是这样的 是要给我24小时时间,而不是12 小时的时间,这将是小写小时。 而我只是存储的 在一个名为变量,时间。 使PHP的第二行 那里,调用的功能, 迄今为止,在刚开 一些字符串,这是 要给我的日期,和 时间,和一堆其他信息。 还有第一个参数,即HIS, 只是提取重要组成部分 我关心在这个例子中, 这是小时,分钟和秒。 所以这是所有这回事。 所以,我存储在一个变量$时间。 再往下的 最底层那里,我 有简写 打印出当前时间。 所以我只是要打印 出当前时间是什么。 因此,让我们来看看这 CS50 IDE,看看我们现在怎么是 保存该站长了很多麻烦。 好了,所以我在这里再次 回到根目录 我的Apache实例。 我这里有一个名为time.php。 我只是要点击的。 我会向上滚动,因为 我们在很远放大。 目前的时间是14点20分34秒。 所以,我做的时间, 分钟和秒。 我可以刷新 页面,并获得新的时间。 --41。 我要去刷新页面 并获得新的时间,44,46,47。 所以,我显然不是 改变任何事情我自己。 我在这里刷新页面。 所以,我不能回到那里编辑它。 我向你保证,我不 有什么同党 谁正在编辑的文件 以我的名义就在身边。 我只是使用PHP函数, 时间,生成的时间,我 自动。 所以,即使我睡着了, 和我的Web服务器正在运行, 谁访问该网页仍然是用户 要得到完全相同的当前时间。 所以,这是相当不错的。 我做了我的网站更具活力 有没有太多的PHP代码。 这只是两行代码,然后 print语句的一点点。 而且我已经有一个 更加动态的网站 比第一个例子中我们看到了 在视频的开头。 因此,从PHP语法视频回顾 该PHP解释器运行时 我们的程序,它会忽略一切 这不是PHP的分隔符内, 吐了出来。 在该示例中,东西什么 它被吐出了HTML。 这意味着我可以现在 点缀HTML和PHP在一起。 由于翻译只会 忽略HTML和字面上把它输出。 这是很好的,对不对? 因为据推测, 在一天结束时, 我想我的网站 的HTML构成。 使得任何web浏览器可以解释 它,或理解页面上的HTML 并使它的东西,我们 实际上可以理解为人类。 而我只能用PHP 我的网站的部分 在需要活力,需要我 有东西不断更新。 所述静态信息 可以保持不变。 好了,这很好。 但是,为什么要这样做呢? 为什么我会混合使用HTML和PHP? 我可以只打印出所有的 HTML,使用PHP打印功能。 我为什么不这样做呢? 想想看一秒钟。 为什么,当我可以只打印out--我 可能有PHP的线条,只是说, 打印HTML标记,打印头。 我为什么不这样做呢? 为什么我混合PHP和HTML吗? 好吧,如果你认为 它一秒钟。 PHP的解释有 来解释它认为。 所以,这将有 要执行的代码行。 打印出的HTML。 打印出开放的头标记。 打印出开放的标题标签。 这将有 执行和解释 该方式的每一步。 为什么不只是让 解释只是掩饰 事情不明白 并自动做到这一点? 这将节省我很多时间 混合我的HTML和我的PHP在一起。 所以这就是为什么我们不这样做 只需打开PHP定界符 然后只需打印出整个 我们网页的内容,一个巨大的PHP 调用的功能,打印,然后 关闭PHP的分隔符,我们就大功告成了。 所以这就是为什么我们将它们混合在一起。 到目前为止,我们还没有看到太多的 从一般的PHP语法的差异。 它是非常简单的。 我们已经看到了 问号,平等的。 我们看到了一些新的函数调用, 但没有什么花哨的事情。 我们也许做的事情 一个小票友。 如果我们想传递的信息 不同的PHP文件之间, 所以,也许用户可以 提交信息给我。 然后我可以做一些事情 它另一页上。 因此,PHP有支持 所谓超级全球 变量,这听起来相当真棒。 他们真的只是 巨大的关联数组 能够帮助实现这个 路过的功能 PHP文件之间的信息 在我们现有的Web服务器上。 其中的第一个超级 全局变量被称为$ _GET。 而且它可能是 最简单的理解。 与$ _GET,会发生什么? 好了,基本上,用户 要输入额外的信息 在我们的URL的结尾。 而无论他们输入,假设 它的格式以特定的方式 称为查询串,这仅仅是 一组键值对分离 由&符号。 这些键值对会 存储在$ _GET关联数组。 而从我们的视频 PHP语法,我们知道 如何一起工作 关联数组了。 因此,这里是一个例子 一些PHP,在那里也许我 提取所有键值对 URL中提供的用户。 所以,我有我打开PHP的分隔符。 我有一个foreach循环。 我对面的超级迭代 全球阵列称为$ _GET。 而且我希望能够参考 两者的键和值。 而我只是将它们打印 出,每一个上明显 在这里它自己的段落标记。 我打印了一些HTML 和内插的值 的键和值到了语句。 因此,让我们来看看如何 实际上在我们的IDE工作。 也许这将帮助 说明一点点 什么GET实际上在做什么。 所以,我回到我的Web根目录。 我会放大一 点点向您展示 我有一个称为文件,get1.php。 因此,让我们点击get1.php。 而且我没有看到任何内容。 这是奇怪的,对不对? 嗯,不是真的实际。 因为我没有提供 任何在URL中。 我要去get1.php,但我 没有提供任何键值对 作为我的查询字符串的一部分。 因此,让我们添加一个查询字符串 看看这个文件可以做到。 首先查询字符串您 只需键入问号。 那么也许我会说的名字=道格 - 年= 2015年。 然后,我会按Enter键。 现在可以看到发生了什么。 我仍然在get1.php。 但现在我已经提供 键值对,我 打印出来的自己 paragraph--名称,Doug--年,2015年。 这也正是代码,我们只是 刚才看到的幻灯片。 如果我想也许再添 键值对,与类= CS50。 现在我有另一个关键价值 该集团的印刷出对 当我再次重温URL。 现在,也许这不是 格式化的非常好。 所以,我有另一个版本get.php的。 这是get2.php。 在此差 一个是我的CSS文件, 它格式化东西 多一点很好地适合我。 这也许不是最 美丽的CSS的世界。 但它这样做的另一种方式。 所以,我仍然可以访问 使用$ _GET我的变量。 在这种情况下,我只是种 使CSS多一点花哨。 如果我们突然过来 我的IDE一秒钟, 我会告诉你在我的PHP网站 目录在这里,get2.php。 我们将在这里打开它,一些HTML。 显然,我链接入 CSS文件我在说什么。 我打开表的标签。 然后这里是我的foreach循环。 这里是什么我 显示之前的幻灯片。 唯一不同的是我 有这个键和值CSS 造型是我申请到它。 但是,这是我做的,是我 跨$ _GET迭代来获取所有 的键值对。 而我打印出来的表格。 而且,很明显,我格式化键 以一种方式,与