>> 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迭代来获取所有
的键值对。
>> 而我打印出来的表格。
而且，很明显，我格式化键 以一种方式，与<TD类=“键”。
因此很明显，适用于一些 类选择在我的CSS文件GET.CSS。
而且，很明显，我打印出 我的价值观完全不同的方法。
这是相当多的 我们在这里看到，在这里
我们的价值观被印 蓝色背景，
与我们的钥匙被印 黄色背景。
所以这是我应得 这些不同的风格。
因为我使用的是不同的CSS类。
但是，这几乎是它为GET。
像我刚才提取信息。
在这种情况下，我只是 它打印到屏幕上。
我得到它的URL， 而这正是GET为我们做。
>> 你看到的可能 问题就在这里，虽然？
为什么我们也许 不想使用$ _GET？
如果有什么，也许，我正在此查询？
--to get3.php，我 没有在我的IDE。
这只是一个假设性的文件。
但是请注意，在这里，显然 通过我的密码研究。
也许我的密码是尴尬。
或者，也许我不希望人们 知道我的密码，正确的。
>> 如果我如果我在使用它传递though-- 在$ _ GET方法，会发生什么情况是，
这将是在URL中。
所以一些恶意用户可能 能看到我在做什么。
我可以将它们传递 敏感信息。
或者，也许它甚至不是一个恶意用户。
也许这只是你的朋友谁 站在你的肩膀。
而现在，他们知道密码 你的Facebook帐户。
>> 也许他们不会 用它做任何事情。
但是，如果你的密码是 通过$ _GET向Facebook提交，
现在他们知道你的Facebook密码。
因为它是正确的，在该网址 当你完成提交信息。
>> 所以，也许这是不是最好的 的方式来传递敏感信息。
这是传递信息的好方法 我们不特别
在乎的是过于敏感。
因为GET是蛮快的， 相对于其它超级全局
我们要谈论的话题。
但也许不是最好的工具 敏感信息。
>> 为此，我们可能要 使用一种叫做$ _ POST，
这是另一种超级全局变量。
它的另一个关联数组。
因此，它的工作原理非常 完全一样的GET。
除，而不是提取 从URL信息，
它通过HTTP标头的东西。
因此，从回顾我们 视频HTTP，我们聊
有关如何浏览器，服务器， 与客户沟通。
而信息传递回 来回的HTTP标头。
>> 随着$ _ POST，信息通常是 通过这些HTTP头发送。
我们将最常用看到$ _ POST在 提交的HTML形式的情况下。
您仍然可以使用HTML表单 提交事情就搞定了。
但是，它们通常使用 在开机自检的范围内。
>> 因此，这里的HTML表单的例子。
现在，我们已经见过这些，但我们有 没有看到这部分，行动=“post.php中”。
因此，当我们谈到的形式在 HTML的背景下，我有一个提交按钮。
如果你还记得，我会点击提交 然后页面只是刷新，
什么也没做。
>> 在这种情况下，我提交 无论我请在这种形式下，
名为post.php中的PHP文件。
而且，很明显，该办法，我这样做， 在这种形式使用POST方法。
所以每一条信息 我键入此表
将提交 通过HTTP标头。
>> 这将是在post.php中访问， 因为这是我的窗体的动作。
这将是可访问的 通过将$ _ POST。
而且很显然，这样，我就可以 获得在每个单独的元素
与该关联数组 与这个属性，
我们的输入标签的名称属性。
>> 因此很明显，我可以说，$ _ POST方 括号中的名字让任何用户
输入的第一个字段。
而$ _ POST密码，伪线相当， 得到在任何用户输入
在第二个字段。
>> 因此，让我们一起来看看 这种过度的CS50 IDE。
所以我们在这里，我会 放大一秒钟。
我们有一个叫做post.html文件。
我点击post.html。
在最高层在这里我有 一个非常简单的Web表单。
这是我们刚才看到的形式 在幻灯片上一秒钟前。
>> 我可以打字，道格，我可以 输入我的密码，我们都
知道squadgoals。
我会点击提交。
而且很显然，这 提交到post.php中。
而我显然是打印的。
所以我摆脱所有的安全性 这个职位给我，只需打印出
的用户名和密码。
>> 用户的名字是道格。
用户的密码是squadgoals。
我是如何做到这一点？
好吧，流行过来的IDE 再一秒钟。
我们将向下滚动拿 看看post.php中，这是
我用行动来这里提交。
那是我的HTML表单的动作。
而这一切，我在干什么。
用户的名字是什么，我就是印刷 出$ _ POST“名”的内容。
然后将用户的密码 为$ _ POST“密码”。
所以我得到的信息 通过提交HTML表单。
我可以用$ _ POST现在提取它 因为我用来传输方法
与表单数据是POST方法。
>> 现在，它可能不是 所以great--我要去
回去一秒钟 我们设定这里 -
它可能没有那么大，如果我 与POST提交信息，
这是表面上更安全。
它可能不是那么大 如果我这样做，然后
打印出该用户的口令。
这应该是更安全的。
>> OK，但它不是完全安全的。
所以在这一点 片段在这里我想
只是请你注意一些 数据安全问题，只是一些
想想，你是 工作或使用互联网。
这仅仅是要考虑的事情。
>> 我告诉你信息 通过HTTP头提交
当您使用POST方法。
这意味着他们并不是完全安全的。
他们很难找到比 使用GET方法，其中
它只是在正确的URL。
不过，还是有办法找到它。
而我只是想展示 你这一点，你也许
开始思考这个问题 为你工作，或者使用
网站和提交 密码，也许使用
在一个相同的密码 很多不同的地方。
要知道，是还是实际上相当 不难看出别人的密码。
>> 所以在这里，我要去 去post2.html。
而随着post2.html的区别 和post2.php是相当微妙的。
所不同的是只 我不打印出来
密码，当我提交表单。
>> 所以，我要键入，道格。
而且我会打字 在，squadgoals，甚至
尽管我们知道这就是密码。
在我提交 形式，虽然，我要去
开拓开发工具，只是 告诉你什么会发生在这里。
因此，在Chrome浏览器，我只是打F12。
这是怎么回事打开我的 开发工具的右手边。
我还没有提交表单呢。
现在，我要揍提交关于我的形式。
而且很显然，我做了一个 打电话，或我提出的要求
到post2.php，这是有道理的。
我要点击的。
>> 那么在这里，我要去 点击标题。
有很多东西会在这里的。
但是，如果我向下滚动到非常 底部，权通知那里 - 我的日历
已阻止它的second--权 在最底层角落里，
name--道格，pw-- squadgoals。
所以，即使我使用POST 方法，这是更安全的，
要知道，当你这样做的话， 你还在传递信息
通过HTTP。
而且它仍然可以 被对手发现。
这只是一些我们要 有应付真的。
也许有一些方法来加密我们 密码之前，我们寄过去，
这将是一个更好的， 而我不是在这里做。
>> 但要知道，在POST 方法有其局限性太大。
这是在改进GET 术语是立即可见。
但它不是一个完整的修补程序。
所以这里有一个例子 一个快速的在家里锻炼
你可以用它来得到一些 练习用PHP工作。
创建以下对网页。
首先应该只是一个很简单的 形成具有单一字段和提交
按钮。
所以非常类似于我们 只是做与post.html。
>> 然后第二 文件，你应该创建
是一个文件，一个PHP文件时， 通过POST期待的输入，
和基于什么用户输入，其 可以假定为一个整数。
你不必做任何 错误检查或类似物。
你可以假设用户 将键入一个整数值，
或者类似的解释的 PHP作为一个整数，到该形式。
你只是想创建一个 由N乘法表。
>> 因此，如果用户提交10，我们希望 有10×10乘法表。
如果用户提交一个12，我们希望 12 12乘法表。
只是让你可以看到什么 我们驱车在这里，
我们就来看看 这个文件在我的IDE。
>> 所以在这里的IDE，我有mult_form.html。
我会点击它。
所有我想要做的就是提交的值。
在10个类型，点击提交。
而显然，mult_table.php，这 我们可以在顶部在URL看到有，
我是一个10×10创造 乘法表。
>> 如果我输入15，并点击提交，现在我 有15 15乘法表。
林，当然不会显示 你mult_table.php的内容，
因为，将采取的乐趣 出了这家练习。
但是，这是一个伟大的方式来得到一些 练习用PHP循环工作
与POST方法很简单，希望 强调自由的例子，只是
做练习一点点。
我也有一个小的CSS怎么回事 在这里，使我的个人的表
只是种细胞突然掀起了 点点，看起来多了几分
像乘法表， 而不仅仅是文字只
样的坐在那里。
最后一个超级全局，我们来谈谈 在这段视频中被称为什么
$ _SESSION。
也许这实际上是 某事的最佳典范
我们会考虑全球性的。
这是另一个数组。
它的另一个关联数组。
但它是通过每一个访问 存在我们的系统上的PHP文件。
>> 我们没有提出 信息一页的时间
像我们做的GET和POST用。
它总是在那里。
所以，这是伟大的一页 你在哪里登录，例如，
你希望你的登录信息 从页面到坚持到一页一页。
>> 你可以只启动一个会话，然后 使用$ _SESSION保存之类的东西
的用户的名称，或者用户的 ID信息，等等。
并且，该信息会保留在 $ _SESSION，直到你摧毁了会议
一点点以后。
>> 写作与动态网站 PHP使他们好多了。
你的网站变得很 动态的，而你不知道
所要做的比得更多的是什么 否则你会做只是
与HTML这样做。
但它需要实践， 大量的实践。
>> 你已经知道如何用C工作， 所以跳跃到PHP是不是太靠谱。
什么是也许有点 有些棘手的工作
用GET和POST的新思路， 也许混合HTML和你的PHP
在一起。
但也意识到，互联网 是信息的一个巨大的资源库。
和PHP的文档可 在很多地方，但也许是最
标准地在php.net。
你可以找到在那里， 很多不同的功能，
并使用的情况下，和实施例 当例子，在例子。
在那里，如果你想尝试和数字 如何做一些事情，赔率是，
之前，有人可能是做到了。
你可以用它们作为 灵感来实现什么
这是你要实现了。
>> 我是道格·劳埃德。
这是CS50。