>> 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。