>> [音樂播放]
>> DAVID MALAN：這是CS50，和 這是八週的開始。
而且我們很高興地歡迎 背，大驚喜，CS50自己的拉蒙
高爾文，上升資深誰一直 消費在過去的幾個月
自七月在洛杉磯，在好萊塢， 從字面上工作一個全新的電視
節目叫殖民地，它的創造者 實際上是一個哈佛大學的明礬自己。
所以，我們非常興奮地看到這一 首次亮相美國網絡今年一月上。
敬請關注這一點，對於 對於週更拉蒙來。
>> 知道現在到底是近了。
而這是什麼意思是，有沒有 所有的東西離開了CS50的，痛心地說。
我們只有三個問題 套left--有
問題集six--這是在 你的手現在還是很快就會被，
由於稍後week--是為了彌補 我們在命令行中，其中世界
我們已經花費了我們大部分的時間用 C和Web編程的世界。
那麼，你會看到很多的想法 在命令行工作借來的，
但也有很多新的 而有趣的想法
這也將是有密切關係的 移動應用和技術，
更一般地，使用它 人都熟悉時下
在筆記本電腦和手機等。
>> 所以，你將實現不 一個網頁，或網站
本身，而是實際的web服務器。
您將編寫一個Web服務器的其它部分 C語言編寫的，其目的在生活中
是接收的HTTP請求，那些 我們一直談論的虛擬信封
對了，居然無論是與回應 一些靜態內容 - 就像一個圓點的HTML
文件，或一點陣JPEG或 任何其他數量的文件，
甚至是PHP文件，由此您的Web 服務器將解釋該PHP
代碼和吐出的結果。
現在，我們為您提供 相當多的框架
對於它 - 確實 對於問題的分佈碼
組六超過1000行代碼，一個 很多這是註釋，是fair--
但這實際上意味著 為契機
讓你的手臟跳水 到一個相當大的項目
我們已經非常明確 雕刻出件的你，
這樣真的，當你退出CS50和 進入編程的真實世界
並希望涉足 任何數量的項目，
你將有更大的 舒適下載一些源
代碼，一些開源 項目在網絡上，
和潛水，使 你認為合適的變化。
習題集七是將是關於 使自己的基於Web的應用程序
這需要動態輸入和 產生動力輸出形式
的etrade.com樣的網站。
而問題集8將集中在尚未 已知以JavaScript另一種語言。
>> 同時，最終 項目是在地平線上。
所謂預提案 一個星期從今天到期。
按照規範的預proposal--， 這是對CS50的website--
是一個很隨意的機會 你發送一個非常簡潔的電子郵件
你的助教 只是通知他
（她），你在想什麼， 用他或她作為一個傳聲筒。
而有理智check-- 不管你是想
關於貪得 太多或者太少，
也許你無論如何也沒辦法 並希望與其進行通話。
>> 其後是一個建議 和狀態報告，
所謂CS50這裡在黑客馬拉松 劍橋哈佛和耶魯大學的學生
一致好評。
最後一個項目的 實現是那麼所致。
然後這裡CS50公平，在劍橋， 還有另外一個在紐黑文。
所以建議，看看 該網站的詳情。
>> 但更令人興奮的，也同樣是一個 機會，讓你的手臟，
和你的頭腦開放給整個 一堆的主題和工具
和技術，是輔助 該課程的核心教學大綱，
但仍然相關。
而同樣精彩墊腳石 這樣做很酷的最終項目
遠遠超出了我們的材料已經覆蓋 正式的問題在課堂上設置或。
所以去CS50的網站 研討會整個花名冊。
如果你還沒有註冊，這很好。
來吧，註冊仍然和我們將 跟進直播流媒體鏈接，
的日期和時間是在網站上。
所有的一切都將是 記錄下來，放到網上
如果你不能使 特別的日期和時間。
>> 至於什麼樣的未來thereafter--好， 當然，還有的CS50黑客馬拉松。
這張照片，回憶，從零一周拍攝 凌晨4點左右的一個晚上在過去的幾年。
該CS50公平，這再次 將在這兩個城市。
然後，只需廠 種子，儘管我們仍然
有一個月加左學期，如果 你想加入CS50自己的教學
工作人員，並且要開始 想成為一個CA，
或教學老鄉，知道 我們將開始談論更多關於
後來這個學期。
但圖為 今年大部分時間的球隊。
>> 因此，PHP--我很傷心 上週[？ Allyse？]好心
去得到的努力 我們這些精彩的道具
我沒有使用結束，所以 真的只是看上去有點傻
我們有一個鐵鍬坐在這裡所有 日上週三，和一個小勺子。
但是，這是我的隱喻 試圖描繪方式
為什麼我們過渡的圖片 從C到PHP之類的語言。
並且同樣可以的任何所述 languages​​--的Java，Python和Ruby的數量
的others--但而在或串 C，比如，編寫C語言程序
通常可能是這樣 採取這樣的勺子
而挖的一個洞 地面上，在沙或污物。
PHP可以讓你花費太多 大咬出了問題，
編寫更少的代碼 用小得多的工具，
因為有這麼多 功能拼湊研究。
>> 現在，如果我們真的是戲劇性的， 我們不得不有所鏟
在這裡，但就這樣吧。
同時，其它 比喻，我們想出了
是的，當然，你可以 使用類似扳手
錘的東西都像釘子。
不過，當然，合適的 使用的工具是怎麼回事
是沒有這麼多的 所謂的語言C--
現在我只是生氣 [？桑德斯？]也許，
我們將解決這個問題later--如此 正確的工具經常使用
是不會被 這種最低水平的工具。
事實上，C是不是一種語言， 你們中的大多數都曾經打算使用，
還是應該必然再次使用。
>> 而事實上，一個小 secret--唯一一次
我用C自己之間幾乎 每一個秋天的九月和十二月
學期。
那是因為我們 以此為契機
教基本面 編程，
並與它的計算機 科學的基本原理，數據
結構，算法和 like--但很快會把你
現在看到的語法 和思想基礎C
如此奇妙 轉移到更現代的
更高層次的語言，如 PHP和Python和Perl和Java
和Objective-C--其實，與其說 目的-C--但斯威夫特，這些新
語言是很多人都會 然後涉足與你最後的項目。
>> 因此，事不宜遲，讓我們真正 使用PHP來解決一些問題。
回想一下，在年初，去年 本週，我們只是用CS50 IDE，
我們寫了一個極小的小程序 只是說，“世界，你好。”
然後我救了它 稱為文件hello.php。
然後我跑了這個命令。
>> 為什麼？
在英語中，這是怎麼回事嗎？
什麼是我在做的時候 我跑這個命令？
>> 是嗎？
>> 聽眾：有一些功能PHP 讀什麼in--明白這一點。
DAVID馬蘭：好，有一些功能 PHP--，讓我更具體，
有一個名為PHP程序，又名
一個解釋，那理解 hello.php的內容，
和頂部解釋它 底部，左到右，
然後做了這些命令說。
當然，在hello.php的命令， 僅僅是源代碼 - 功能
和變量和循環和 等等，我們自己
已經開始使用PHP編寫。
>> 但不同於C，這是 編譯語言，
PHP你只寫它，並運行它。
你跳過了中間商的步驟 將其轉換為0和1
然後運行它。
還等什麼是這種積極的一面？
為什麼我們省略這一步？
為什麼做更多的現代語言 往往會忽略這一步呢？
是什麼好處？
>> 或者只是直覺？
即使我們還沒有 之前寫太多PHP，
什麼是有益的關於不 編譯代碼，你覺得呢？
沒有？
不承諾？
抓你的頭？
是啊。
>> 聽眾：更有活力。
>> DAVID馬蘭：更多的活力呢？
什麼意思？
>> 聽眾：[聽不清]
DAVID馬蘭：OK，好，所以 取決於輸入，
你不必每次都進行編譯。
它真的是為 簡單that--什麼
繼續點 編譯代碼？
這僅僅是一個步驟中的 making--這是需要，
在過去的幾 週，兩倍的步驟
作為剛剛運行您的程序。
它是有益的看到你 看到一些錯誤信息等等，
但它仍然只是一個惱人的一步。
>> 所以程序員實現 隨著時間的推移，我們為什麼不
開始編寫語言的不 需要一個相當機械的步驟，
這樣就可以只寫 你的代碼並運行它。
但究竟是什麼價格 我們看到，我們付出
上週，有一個具體的例子？
是嗎？
>> 速度。
所以，[？什麼？]口譯 慢一點，
在零和一的 很好，速度很快的電腦
要了解，因為 Intel的CPU，或不管它是什麼，
只是明白這是怎麼回事 與這些位模式。
而一名翻譯 是一個程序，真的
有讀取ASCII源 您所編寫的代碼，
並將其轉換，可以這麼說，或者 弄清楚如何將它轉換最終
到零和一。
因此，它只是需要一點點 一個性能命中位。
所以這是一個有點折衷。
現在，如果我們做到這一點在這裡，讓我 繼續前進，做一個舉例如下。
如果我走在這裡，新的文件，我要去 再次保存，這是hello.php。
現在我要繼續前進 並說，“印刷世界你好” -
和回憶，我可以使用打印，我不 必須使用打印-F。而現在到這裡，
如果我做hello.php的PHP，huh--我 似乎沒有不同的方式解釋它。
我做了什麼錯？
>> 聽眾：有角度的手鐲。
>> DAVID馬蘭：是的，你需要 這個角度支架往上頂。
因此，它是一種惱人的，但 你習慣它很快。
如果我有寫PHP代碼，我 一般需要告訴程序，
或者告訴解釋，嘿嘿 PHP，這裡涉及一些PHP代碼。
然後，良好的措施，我想 關閉此與此，而是
只有問號角 支架，以至於現在到這裡，
如果我跑這一次，現在 我獲得所需的結果。
>> 現在，讓我們做一個輕微的優化， 只是讓你以前見過它。
這是種討厭我 必須運行PHP空間hello.php，
因為在過去我 可以只寫點斜線
節目的名字，這是一種很好的。
它是一種更好的用戶體驗。
>> 因此，原來你可以這樣做 與following--我的PHP
可以使用這個相當隱蔽 咒語在此處的頂部，
這一般被稱為認領， 因此，這是一個尖銳的象徵，
可以這麼說，這是一個爆炸 或感嘆號。
而現在這是通向一個程序 在一個典型的Linux系統，
被稱為環境，或包膜。
而這個line--漫長的故事 short--行一個剛
說，哎電腦，找到PHP 環境中的解釋對我來說，
發現它在你的記憶，可以這麼說。
>> 什麼是好的，現在，是 如果我去到這裡，
我可以做點斜線 你好點PHP，or--哼。
權限被拒絕。
那麼，你會看到更多的這 有問題設置七，如果你
還沒有準備好，與權限。
事實證明，我需要 執行此命令
所謂的[？ chamod？]變革 mode--一個X軸正hello.php。
我需要[聽不清]這一個額外的 步驟，告訴我的電腦，
使hello.php可執行文件。
而現在看什麼happens--點 斜線hello.php，它只是運行。
我並不需要指定 解釋了。
我可以讓它更漂亮， 不過，如果我重新命名這件事情。
如果我移動hello.php只 Hello--所以注意到在左上角，
該計劃的名稱是 實際上現在只是您好。
現在我可以使它看起來像一個C程序， 即使它寫在PHP--
或者坦白任何數量 其它語言。
>> 所以邊緣增強， 沒有功能差異。
但它只是一個小的好奇心 現在，這樣就可以編寫程序
在任何語言，而且用戶不 要知道或關心那些是什麼。
好吧，讓我們來看看一個更 現在引人注目的例子
我提前掀起了。
這就是所謂的quote.php。
而且它是可在網上。
並注意這是很short-- 但它是一個命令行程序，是
要查找股價 對我來說，這實際上是將
是有密切關係的問題設置七人。
>> 所以，讓我們來看看我在做什麼。
在最上面我已經得到了 開放式支架問號PHP。
然後，我已經得到了這條線，因此我 需要一個名為functions.php--文件
我們將看到 更多關於這一點，
但是這是像C的 版犀利包括，
你想要去 包括另一個文件。
PHP稱它為要求，雖然它 也有一個包括功能。
而事實證明，function.php是 只是我在課前寫的。
我把它放在同一個目錄下，因為 我想分解出一些代碼
我們可能要在其他地方使用。
>> 同時，你也許可以 推斷出是怎麼回事。
這是C--，但有一點不同 這是什麼意思通過確保正確使用？
技術上更翻譯此。
在什麼情況下我是 退出程序，或退出？
是嗎？
>> 聽眾：當你不具備 兩個命令行參數。
>> DAVID馬蘭：如果我沒有 以命令行參數。
請記住，其中之一 參數是該程序的名稱本身。
和第二將是 一個字我提示符後鍵入。
所以就像C，這 是我的檢查方式，
沒有用戶合作， 運行該程序，因為我打算？
現在，有什麼東西 有一點不同
與C--首先我們 有這樣的美元符號，
什麼做一美元 簽署表示在PHP？
只是一個變量。
這是all--只是一個變量後跟 無論你想實際調用它。
請注意，有一些東西 從我的PHP程序缺失，
就像它缺少最後 本週，對C，這是什麼？
>> A型，而且別的東西。
沒有東西 function--主要功能。
有沒有主要功能。
你剛開始寫 你的代碼，而不必
擔心一個比較隨意 命名一些默認的約定
功能為主。
所以ARG C是真的 一個全局變量
該解釋 使提供給我。
現在，這是有趣的。
所以查找的東西。
美元符號的股票是在 離開了，這是我的變量。
在右手側， 有明顯
在PHP中的函數調用查找的 我通過我的最後一個命令行
參數用於：不管這個詞。
我們將看到如何 工作在一個時刻。
>> 然後最後我匯報的價格。
我打印一顆顆 份額如此這般。
請記住，這是 在PHP--在PHP--的方式方法
在這裡，你不必做 美元符號s了。
你可以只用花括號 並插入一些變量。
你不必擔心 用printf以同樣的方式。
>> 而作為一個不談，當你把一個變量 雙引號像這裡面，
您使用的是看中技術 所謂的變量插值。
它只是意味著插上變量在這裡。
而作為一個拋開你，有的誰進來 從其他編程背景，
你可能不使用單引號 字串，做到這一點。
您必須使用雙引號 變量代換工作。
否則，你會從字面上 看到這些花括號。
>> 所以，最後，讓我們繼續並運行此。
讓我做我的終端大些。
讓我繼續運行 在我引用的目錄。
[？ CDsource？] [？ AM？] [？報價？] PHP的報價點PHP，
而我要尋找的東西 就像歌，這是它的股票代碼，
和一個共享的新名稱， 字母表公司，花費$ 717到今天為止。
好吧，如果我們想 再次運行此，任何人
還有一個股票行情 他們想看看嗎？
>> 微軟，我認為是 這其中，MSFT-- $ 53
我認為雅虎是可能的。
而Facebook是。
>> 那麼，什麼是這個程序在做什麼？
魔術似乎被嵌入 在查找功能。
因此，讓我們快速瀏覽一下。
>> 事實證明，不來 用PHP，它在functions.php中。
我們不會通過 這很詳細，
但注意的詞這裡 上functions.php--六線
我從字面上說功能。
我指定我的函數的名稱。
我然後指定任何 參數，或者參數，
我想這功能take--沒有類型。
然後，我實現它。
>> 我會揮揮手 在實施中，
因為它是相當先進的右 現在，但我們會再次看到它實際上
在一個星期中的問題設置七人。
但我可以打掃一下了。
我也包括在 今天的代碼版本
的報價，其中有沒有點PHP文件。
因為什麼大概是在 所謂剛引用程序的頂部？
這所謂的shebang--的 相當神秘的咒語
上面寫著發現PHP，然後 在我的代碼運行在這裡。
>> 好吧，這樣帶來的 我們的地方，我們離開
最後時間 - 儘管有 一些更高級的例子。
有任何疑問，迄今約 PHP還是我們在做什麼？
No--所有權利。
是嗎？
>> 聽眾：內 HTML文件，做你 -
[？你呢？] [？只是打電話了嗎？] 一個[聽不清] PHP文件？
DAVID馬蘭：好問題。
在網絡方面，我們是 從字面上即將過渡到，
你不使用所謂的 認領在頂部，
因為Web server--常 程序調用Apache或微軟
IIS，Internet信息服務器，或 任意數量的其他網絡服務器軟件，
知道，它認為，當 一個點的PHP文件，它
應在其上運行的解釋。
它不看那個第一行。
所以這第一行招 只是當你
寫命令行programs-- 我們不會做超的時候，
但它是我們的橋接方式 我們的C例子，現在我們的PHP。
>> 因此，讓我們確實彌補這個世界 在命令行天下網絡
通過執行以下操作。
讓我繼續前進，繪製 在這裡只是一瞬間。
因此，如果我們有一個web服務器，或者更確切地說， 如果我們有我的筆記本電腦在這裡，
我就畫這樣的。
在這裡，我們有 互聯網以某種形式。
然後在這裡，我們有 在building--服務器
這是怎樣的互聯網 works--在這裡
與一些燈光，也許一台服務器。
什麼是真正回事 這兩個連接之間？
>> 所以在這個建築是一個Web服務器。
這只是一台電腦 這在運行一些操作
系統 - 或許稱為自由軟件 阿帕奇，其中CS50 IDE運行。
所以，你可以實際 覺得這個建築
作為建設中 這CSt0 IDE存儲。
這就是所有你 帳戶，所有的你
擁有自己的Web服務器 運行時，所有的你
有自己獨特的網址， 當我們開始討論，
你會看到更多的在體育組六。
>> 這裡是我的筆記本電腦的地方 其他在互聯網上。
因此，當我訪問一個網址屬於 對我來說，互聯網流量是怎麼回事
轉移到服務器，該服務器的 收到HTTP request--
像獲得的index.html，它的 回复該網頁。
所以這是一般的範例。
而一切行動 到現在為止的今天，一切都
不僅是發生在 這座大樓的界限。
我用我的筆記本電腦，但 我是連接到CS50 IDE，
因此，所有這些程序我跑 是服務器，它本身的內部。
>> 但現在，讓我們開始重新使用PHP 寫一些實際的程序
由網絡服務器提供。
而要做到這一點，我要去 到一大堆的例子
這裡介紹了這個想法。
因此，這是怎樣的一種奇特的方式 描述一個編程範例。
>> 而事實上，當你退出CS50 或工作的最終項目，
或者採取一些後續 在類中，你會開始
地看到，天下 - 特別是已經長大了
與語言，如C 是超低level--
意識到有更好 如何寫軟件。
有一定的 模式可以遵循，
整理文件的某些方面 和命名你的函數的方法，
使長話短說， 世界已經到來了
有一大堆縮寫詞 和名稱進行編程的方法。
這些都是你可以只使用技巧。
>> 其中之一稱為MVC中， 對於模型視圖控制器。
而這僅僅是為 現在，一個過於複雜
的說你應該怎麼佈置方式 一個基於PHP的網站，在我們的例子。
你如何組織你的文件， 你如何安排你的邏輯，
的方式，可以更容易地 編寫更複雜的網站？
事實上，我們很快就會 那裡用對置7。
>> 因此，在MVC的世界裡，你會 看到我們的代碼一般可以
被表徵為型號代碼， 或控制器的代碼，或查看代碼。
而我要去 過分簡單化它作為follows--
所述控制器是 你的程序的大腦，
這其中所有的 有趣的邏輯發生。
所以，一切，我們已經 寫迄今在課堂上，
是一種像控制器 代碼 - 它的控制
你的程序，你的循環，你的 條件，你的函數
和變量和所有。
>> 意見，現在，將是一個小 在幅材的世界更明顯。
視圖是美學 你的網站。
這就是用戶sees--的圖像， 在HTML表格，HTML標記，並且所有
這一點，所有的蓬鬆美感 東西並不難寫，
但僅僅是要生成什麼， 是所謂的觀點，美觀。
和型號，最終會 是數據庫stuff--這
我們將開始深入到這些 更本週三。
所以控制器是邏輯， 視圖是審美的東西，
和型號將是哪裡 我們保存我們的實際數據。
>> 因此，讓我們看看這個更具體 用下面的例子。
我要進入我的目錄位置 今天的源代碼 - 所有這些都
可在網上。
而且我要進入零版本。
在這裡，is--讓我們叫它 的CS50的網站版本0。
沒有太多在這裡的。
這是一個非常簡單的網頁，是 可能使用什麼HTML tags--剛
從過去的例子猜？
>> 那是什麼？
H1--可能為大黑體 標題，這標誌向上頂，CS50。
而且是在玩什麼？
是嗎？
聽眾：無序列表。
DAVID馬蘭：無序列表中 - 所以 UL標籤，也許一對夫婦LI標籤。
如果你不記得這些， 老實說，這並不重要。
這些都是蓬鬆排序 HTML的實現細節
您快速查找 和你回來的路上。
我們將更多的精力放在編程 想法是多汁件。
>> 那麼就讓我們來簡單 看HTML--的確
如果我打開查看源代碼在這裡，是啊， 這正是這裡發生了。
這裡有一個UL標記。
那裡面嵌套是LI標籤。
然後，我借來的網址 這裡實際的教學大綱。
>> 然後在 lectures.php顯然是
另一個動態生成的頁面 這將不得不讓我們see--啊，
前兩週的講座。
所以有一周零一周，讓我們 看this--如果我查看網頁源代碼，
也超簡單。
這些都導致​​了兩頁 所謂week0.php和week1.php。
所以，現在考慮發生了什麼。
>> 當我點擊week0.php，我的筆記本電腦 正在為week0.php請求。
Web服務器，也叫做CS50 IDE， 正在接收該虛擬包絡。
它看到一個消息 像，得到week0.php。
它然後解釋該文件中，頂 至底部，左到right--文件
所謂week0.php--和 吐出的結果。
所以此文件的內部， week0.php，必須
在生成控制器邏輯 這個HTML，我們將很快看到。
>> 但現在，讓我點擊零一周， 現在我們有三，五，
現在我們有幻燈片 慢慢的從零一周。
你可能還記得 這從遙想當年。
所以，這就是這個網站是做什麼。
>> 因此，讓我們考慮一下它是如何做這個。
我要去回 這裡的源代碼，在CS50 IDE，
我要去開拓的index.php。
在該文件的頂部 是一堆意見。
然後在該文件中的中間，它 事實證明，沒有PHP代碼任何責任。
因為如果你沒有任何的 開放式支架問號PHP標籤，
你可以自由地只是把HTML。
>> 因為是PHP 解釋是應該做的，
是當它讀取該file-- 從上到下，左right--
它只是解釋它看到的代碼 這些尖括號問號。
和其他任何它不 承認PHP，它只是吐出來。
而HTML是其中的東西 它只會吐了出來。
>> 因此，這個文件可以有 被稱為index.html的，
但我命名的一切 點PHP的墊腳石。
Lectures.php--類似 給人留下深刻印象，它只是一些HTML。
Week0.php，同樣只是一些HTML。
>> 但現在讓我們把對 眾所周知工程帽，
並考慮我們如何才能改善這一點。
這並不難做到這一點，但我種 中演化成複製和粘貼。
而事實上，如果我做兩個星期，你 知道我可能會做什麼？
我要去week1.php，我 要突出一切。
我要去複製，粘貼 到一個名為week2.php新的文件，
調整一些網址，以及我的路。
>> 因此，基於我們所 可見在C中已經，
這感覺不對，希望。
複製，粘貼，很少正確的解決方案。
那我們可以開始 要怎樣才能提高呢？
機會在哪裡 為更好的設計？
>> 到時候我去 8週，這是怎麼回事
是真的很煩人 如果我想改變
每一個的字體 我的網頁，或者如果我想
改變佈局的結構。
因此，哪來的機會 為更好的設計？
好吧，讓我們來看看什麼是 在所有這些文件的共享。
>> 這裡有一個星期，這裡的一周 零，這裡的lectures.php，
這裡的index.php--什麼是相同的， 所不同的是，粗略地講，
在每個文件？
是嗎？
>> 聽眾：[聽不清]
DAVID馬蘭：好，好。
因此，有一種模式，當然，其中 每次我選擇我的演講，
我應該產生 非常相似漂亮的網頁。
所以，也許我可以利用 事實真是，
我們特意數值 索引我們的lectures--
如果我可以把更多的 也就是說在你的答案。
什麼是唯一的，真的， 這為期一周的變化埃德蒙頓
讓我向下滾動，所​​以它是 大致處於同一place--
所以這裡是零一周， 大致在頂部。
這裡是一個星期，週 零個，一個星期，零週。
OK，從字面上如果你知道 沒有任何程序，
這是現在就像一個 模式匹配遊戲。
那麼，有什麼不同呢？
是嗎？
>> 聽眾：[聽不清]
DAVID馬蘭：好，所以標題 是變化的，非常輕微。
零是怎麼回事，當然，一。
同樣的事情發生了，在H1標籤。
同時，我們也不太把它看成很容易， 因為URL是有點長。
但是，這些網址被稍微改變。
>> 但是，什麼是沒有改變的是，敢跟我 說，大多數的page--的內容
HTML標記是相同的，頭部是 相同的，標題是幾乎相同的，
身是相同的，並 幾乎一切
是除了同一 這些小的調整。
那麼，如何才能去 一些保本了呢？
>> 那麼，讓我提出確切 在未來的版本。
因此，這裡的一個版本，我有確切 相同的文件，以及其他幾個。
下面是index.php--即使 你從來沒見過的PHP之前，
那我可能做來解決這個 根據problem--你在這裡看到的？
是啊，是輕微的承諾？
沒有？
是的，去上。
>> 聽眾：[聽不清]
>> DAVID馬蘭：是的。
>> 聽眾：[聽不清]
>> DAVID馬蘭：我需要你 只是大聲一點說話。
>> 聽眾：[聽不清]
DAVID馬蘭：好，好。
我think--是 很難聽到你 - 但我
以為你在說什麼是 這是常見的往上頂的標籤，
那是常見的標籤 底部，現在已經被提取出來，
或降級哪些文件？
header.php文件，footer.php-- 我們要去
做出一些調整，以 這些關注你只是
提出了關於數字變化，為 舉例來說，如果我沒有聽說你。
>> 但是，這似乎是它的要點。
如果有大量的 冗餘的頁面的頂部，
且數額巨大的 冗餘底部，
讓我們從字面上只是亮點 切的內容了，
把它放在一個單獨的file--就像 CSS中，我們提取出來的想法
非常相似的美學，把 它在一個單獨的點PHP文件，
使用需要mechanism--這 是像C銳利包括 - 這
基本上好像是說去 抓住的header.php的內容，
和複製並粘貼到這裡。
>> 但是，這意味著什麼，現在在 的index.php，我有這兩條線。
在lectures.php，我也 有那些兩行。
在week0.php，我也 有那些兩行。
>> 所以，現在，如果我想改變 我的所有網頁的標題，
或者我想改變 基本結構，
我可以在一個地方，現在改變它， 兩places--頁眉和頁腳，
分別。
現在代碼的開始看 多了幾分神秘，對吧？
但是，如果你想想頁面 是doing--如果我請求week0.php，
就像在畫過 當week0.php要求這裡 - ，
這是什麼意思？
>> 從字面上看，這個文件是 由瀏覽器請求。
該網站server--又名
CS50 ID--抓住這個 文件，week0.php，並讀出
它從上到下，從左到右。
線之一，它立即遭遇 開放式支架問號PHP，需要
頭點PHP，等等 什麼PHP解釋器
does--是內置於網絡 服務器，因為我們預先配置
它為你 - 它會自動進入 成的header.php，複製的內容，
在這裡它們粘貼。
>> 但隨後的解釋遭遇 問號密切支架，
所以這一切都做了思考。
現在，它只是盲目地吐出 出線路2至7，
因為它只是原始的HTML。
獲取到線八條，並做了 同樣神奇的again--打開文件，
斂的內容，並 要求他們或者將其粘貼
那麼好吧或出現。
>> 但我只是提到了一個錯誤。
這是一個局部的退步， 因為如果我們看在header.php中，
那種我剪了一個角落。
我才給什麼功能了，為了 獲得這一有爭議的更好的設計？
是嗎？
聽眾：[聽不清]
DAVID馬蘭：是啊，我種 切一個平凡的角落。
你指出什麼改變 是標題，在標題的數量，
並在H1的數目。
所以我的解決辦法是，OK， 讓我們只重命名頁面，
並沒有涉及這 遇到任何問題。
所以這是一個局部 倒退是肯定的。
>> 但是，這裡值得注意的是 是，我做了什麼
另有因素 所有常見的東西。
而在footer.php，通知我分解 出了這一切，儘管較小，
常見的東西。
所以，我需要以某種方式現在能 走又前進了一步，並修復
該標題的問題。
因此，讓我們做到這一點。
>> 讓我進入我的第二個版本 這裡，這又具有相同的文件
除了一個新的補充。
它是一個多一點 詳細，但我們如果我們看看
可以梳理出哪些是怎麼回事。
因此，而不是要求 的header.php和footer.php，
我似乎只需要一個 file--叫，當然，helpers.php。
讓我現在的規定， 什麼是helpers.php內
只是一堆功能 我寫的，就像以前一樣。
但我把它叫做helpers.php。
>> 現在很明顯，在 三線和10，我
調用兩個functions-- 渲染頁眉，頁腳渲染。
那些不來 PHP的，我寫這些我自己。
我把它們放在helpers.php。
>> 現在，我們只看到此語法 一次，它是超級簡單。
但是，這顯然是一個參數 渲染報頭，該函數。
為什麼我知道？
那麼這裡有一個密切的括號， 這裡是一個開放的括號。
當然，就像在C， 這些括號內的任何
是input--或 函數的參數。
>> 這是什麼參數的數據類型， 根據我所強調？
什麼做的那些方括號 表示，根據上週？
是的，這是一個array-- 特別是關聯數組。
而這個語法誠然 有點時髦，
但這只是路過 在一個鍵值對。
最關鍵的是，報價引文結束 標題，並且該值是CS50。
>> 如果我們做到了這一點 在C中，它可能會改為
看起來更像這樣， 只是報價引文結束CS50--
或者實際上這將是捲曲 括號，或者類似的東西在C，
其中鍵是零， 和的值是CS50。
但同樣，在PHP，即使 語法是，再次，這一點都不奇怪，
它可以讓你傳遞 字來代替的數
將密鑰與值關聯。
>> 那麼，這意味著什麼？
如果我進入helpers.php， 讓我們來看看這個功能。
renderHeader.php，而 renderHeader是我的功能，
我知道，因為我看到 這裡function關鍵字。
這是顯然C--它新 採用所謂的數據 - 一個參數
但我可以把這種現象稱之為 任何事情，但我把它叫做數據，
僅僅是一個小clean--和 只是採取一種猜測，尤其是
如果您在其他一些已設定 高級語言之前，東西
上述C，概念上。
>> 這是什麼平等的開放式支架 括號大概是什麼意思？
或者什麼可能它是什麼意思？
我們還沒有看到這一點C.呀？
>> 空數組。
具體而言，這意味著，如果 用戶不調用renderHeader
有一個參數，我仍然會 有所謂的數據參數，
但它的默認值是 將是一個空數組。
所以這是一個不錯的便利性。
我沒有要罵的用戶， 或者說，你用我的功能失常。
我可以給用戶一個默認 值，如果我沒有特別在意。
現在這個功能，我 要揮揮手的。
但是，這種提取物功能允許 我們通過數據這些變量
入的header.php以下列方式。
這是最後一塊， 我想時髦的語法。
這裡是我的新版本 的header.php--它
常說，從字面上看，開 支架標題CS50，僅此而已。
而同樣的事，H1。
>> 現在它顯然說 一些漂亮時髦。
讓我簡化 一會兒如下。
這就是我 改變了我的標題是。
但是，它變得有點難看 不斷開放的支架用PHP，
然後使用打印功能。
事實證明，PHP有一個速記 符號對於這一點，這僅僅是
一個等號，這在技術上是一個 函數調用呼應，而不是打印，
但它同樣的事情，有效。
>> 這只是看起來更好。
這只是一個語法 糖，如果你願意，
這使得我的代碼看起來更好一點。
但事實證明，和 我們將再次看到這
沒多久，​​我們必須把這種 煩人稱為長功能
在HTML特殊字符 PHP的，因為事實證明
有一定的投入 用戶可能給我們，
或者說用戶可能給我們， 這是要打破我們的網站。
但是，我們會看到下一個 一周使用JavaScript。
但現在，只知道 這個文件，headers.php，只需
取的標題， 我通過了，這讓
確保它的安全，可以注入到網絡 頁面，它吐出它作為我的標題
和我的H1。
所以，如果我進入現在這個版本， 注意聽課有它的標題後面，
零星期都有它的標題後面， 事實上，HTML我生成
是相同的就是我的第一個版本 was--除了我的空白，
因為我已經開始格式化 我的代碼有點不同。
但我所產生的所有 我在乎的代碼。
因此，讓我停下來 只是一瞬間，看看
如果有任何問題， 或混亂，我創建的。
好吧，讓我們扭轉 稍微用力在這裡
看看是否有一個 機會改善。
Helpers.php也有過這種 函數，稱為renderFooter。
這有什麼值得一提的約 renderHeader和renderFooter？
再次，對於今天的目的，知道 該提取物的功能僅僅是
我傳遞參數的方法 成的header.php和footer.php。
>> 對不起？
>> 聽眾：[聽不清]
DAVID馬蘭：是啊，我只 改變需要對線路。
所以從字面上看，我犯了罪 複製和粘貼，再次。
這不是一個巨大的數字 行不過來on--
如果我複製和粘貼的一切 只是改變一個小小的字，
而一個小小的字艾倫點 出在這裡軀，與頭在這裡。
否則，一切都是 相同的，除了為，
當然，該功能的名稱。
那麼，我們能否做得更好？
>> 那麼，讓我開了這個版本 這裡，由此helpers.php，
為什麼不讓我只是得到一個 小聰明這件事？
寫稍微複雜 代碼，但把它渲染？
所以，我有什麼根本性的變化？
>> 它需要一個參數now-- 兩個參數，數據依舊。
然後，什麼是第一 名稱可能被用於，
基於你在這裡閱讀什麼？
即使有些語法仍然是新的。
什麼是美元符號的模板？
>> 對不起？
>> 聽眾：頁眉或頁腳。
>> DAVID馬蘭：頁眉或頁腳。
所以很明顯，我決定，如果 唯一的事情正在發生變化
是我想要的模板 以print--和模板
我的意思是，這是藍圖 我想輸出代碼，
但我想在一些堵塞 values​​--因此，如果這只是頭
或頁腳，我為什麼不參數 這和調用的參數美元符號
模板？
然後，這個時髦的語法，讓我 在一個變量在這裡營造出路徑。
>> 所以美元符號路徑是一個變量。
這是什麼語法 這樣做，如果你熟悉嗎？
是嗎？
>> 聽眾：[聽不清]
DAVID馬蘭：沒錯。
如果模板，報價引文結束， 頭，或者如果模板是，
報價引文結束，頁腳，該行有 我已經強調，八線，
是簡單地把這個名字，像頭， 和連接用點PHP。
因此，我們沒有這個操作符 在C這點運算符
一個了不起的事情在PHP--如果你 熟悉JavaScript或Java，
您可以使用加 簽字做串聯。
>> 在C中，它是在一個neck--疼痛 我很抱歉，在對組六，
你將不得不做 this--它是在頸部疼痛
連接字符串。
為什麼呢？
好了，因為如果你有 一個字符串，它是此長，
而另一個字符串是這個漫長的， 你不能只是插在一起。
你是什​​麼，而不是必須做在C中？
是嗎？
>> 聽眾：[聽不清]
>> DAVID馬蘭：你對malloc 存儲器，或在堆棧上使用的陣列。
而你確實有 使該數組足夠大
以適應這種加這個， 再加上反斜線零。
然後用它們串聯在一起 攪拌貓或手動與一個for循環，
或任何數量的技術。
我們向您展示一對夫婦在對組六。
>> 這是在頸部疼痛。
這是真正的我是什麼意思約 這與this--像C與PHP。
你只要能獲得更多 免費的功能，
這樣您就可以集中精力， 理想情況下，就開心
編碼的一部分，該 你想解決的項目，
而不是低電平細節。
>> 因此，這只是產生的header.php或 基於哪一個我稱之為footer.php。
事實上，如果我去 到index.php，通知
所有這一切changed--代替 調用呈現頁眉或頁腳渲染，
我打電話渲染，其次是 我想要做的模板名稱。
你會看到這一點，也是如此， 在問題設置七，
因此我們允許您使​​用 同樣的功能，使串
與不同的網頁束。
>> 因此，而不是糾纏太多 這些details--更多
你會再次看到 習題集seven--讓我們來看看
在溶液的現在的開始 一個更有趣的問題。
到目前為止，沒有什麼我們已經 做有保存的數據。
事實上，唯一的一次，我們曾經保存 這是我們已經在這個類進行
當我們有一個非常簡單的演示一段時間 回來，因此我們使用的文件IO在C，
我認為我輸入我的名字， 漢娜的名字，和瑪麗亞的名字，
或者是安迪的名字， 那麼，我們節省了CSV file--
逗號分隔值文件。
>> 我們用fopen--我想 我們使用fprintf中我記得，
我們保存的文件。
現在，這是最簡單的 形式的數據庫。
如果你想為一個網站 Frosh即時消息程序，即新生
可以註冊一個運動，你理想 想要做的事與該數據。
上週，我們什麼也沒做 與數據 - 我們剛才說的，
您已註冊，不是真的。
或者，也許我給的 監考官，那就是它。
>> 但是，如果，如​​果我能很好 給那個監考CSV文件，
就像一個Excel文件。
或者更好的是，它會 如果我能很好
把這些用戶的名稱和 宿舍名稱和所有的
成的數據庫 只是住在永遠，
直到我選擇要刪除的數據。
數據庫允許 我要查詢的信息。
事實上，這是一個數據庫是什麼。
>> 我們今天介紹，和 下週也是如此，一個技術
所謂SQL--結構化查詢 語言，這是另一種語言。
它本質上是一種編程 語言，但對於數據庫。
而對於現在的數據庫，只是 認為作為一個超級花哨版本
Microsoft Excel或谷歌的 電子表格，或Apple數字。
這通常是一個程序，允許 您存儲一大堆數據
以行和列，相當 就像你可能在Excel中。
>> 但是，什麼是好的，特別是當 我們不是超級熟悉的Excel，
什麼SQL允許你做的是查詢本 通過編寫代碼行信息
在那裡你可以，即使你的 數據庫有一百萬行吧，
你可以找到的東西超級快。
事實上，Excel是特別 壞的大型數據集。
而事實上，高達幾 年前，橫空出世
Excel中只允許你存儲 最多65,535行其數據 - 的
聽起來很多，但在 那時候我是個研究生，
我記得絆倒 這是因為我正在生成
CSV文件，我的研究，我 想快速分析它們
由剛剛開放在Excel中。
當然，我的電腦正好死機， 因為我有超過65,000行。
>> 但做了65,535來自哪裡？
什麼是微軟在做，大概？
如果你是好與你的兩個大國？
是的，他們使用的是16位 值來表示的行號。
而二至16 65,536-- 上下一心，因為如果你
零指數意味著是 大部分的行數，我可以有。
而這只是一個設計決策。
通過保存16位，他們限制我 16000行不是4十億，
我可以有理想的。
但現在，我們要 介紹這個更在網絡環境。
什麼是好的關於SQL的是，即使 雖然它是非常強大的，漂亮
複雜的，它真的沸騰 下降到四鍵操作，四
關鍵的功能，如果你will--選擇， 用於檢索數據，搜索
數據;刪除或刪除數據; 插入的行添加到數據庫;
和更新。
所以，如果你曾經使用過谷歌 電子表格，蘋果的數字，微軟
Excel，您已經執行， 最有可能的，所有的
這些操作作為一個人受 只是用你的鍵盤和mouse--
插入數據，用你​​的眼睛 選擇或搜索的數據，
或更新數據或刪除數據。
>> 所以，這是什麼意思？
那麼，預先安裝在CS50 IDE是一個名為mysql程序。
這是一個自由的，開放源碼 數據庫是超人氣。
實，例如，使用它來此 天，其中，它們使用其他工具。
而很多非常受歡迎的網站使用 這在很大程度上是因為它的快速，
因為它是免費的。
雖然的確存在替代品。
而有些人可能有玩水 替代品的最終項目。
>> 這是一個屏幕截圖，同時， 一個基於Web的工具，稱為phpMyAdmin的。
這是一個巧合， 這個基於Web的工具也是
寫在一個語言，PHP， 但它的意思做
是給我們一個基於Web的 接口到數據庫。
由於MySQL通常是 東西，從歷史上看，你
也只有互動 使用命令行。
這將是超 討厭和奧術有
鍵入文本命令來選擇 數據，插入數據和刪除數據。
所以有些人在互聯網上 寫了一個基於Web的程序
這只是讓我們管理 在我們的數據庫中的數據。
這就像雙擊Excel和 其運行的基於網絡的版本。
>> 你要怎麼使用它進行 最終在下週，而不是在對組六，
但要建立的東西 所謂的CS50融資，這
將有一個數據庫 用戶，與用戶名和密碼，
美元數額，他們 在他們的銀行賬戶。
這將是 是你用它來存儲
的符號和數量 個股用戶
已經使用虛擬購買 美元，你就會給他們。
而這將允許用戶 註冊為您的網站，
所以，即使你的朋友 可以調整到您的網站
而實際註冊， 登錄，和玩
並試圖找到故障代碼， 並試圖找到您的網站的錯誤。
他們會簡單地註冊通過 加入自己，有效，
通過代碼編寫到數據庫。
>> 例如，這是一個快速截圖 一個什麼樣的數據庫可能是什麼樣子。
這是從一個 去年solutions--
這就像一個小型的Excel 文件，存儲在數據庫中，
存儲在該軟件名為MySQL的。
在左邊，我已經很明顯 給出的每個用戶的唯一編號。
在第二列中，我已經給 人人用戶name--我自己
在他們之中。
和在右手側， 我已經給了他們一個哈希值。
>> 現在，這實際上是一個密碼， 但它不是一個純文本的密碼。
這是一個加密的密碼，如果 你願意，或哈希密碼。
我們將回來不久。
>> 但是，如果你讀過 有關如何文章
您的密碼在某個銀行或者一些 網站可能受到了侵害，
它一般意味著兩件事情之一。
因此，這是六個用戶只是摘錄。
在座的各位，現在自己看著辦 出通過黑客或破解
就是我們六個人的密碼。
但是，如果你收到 警報或道歉
從公司或網站上說， 對不起，黑客闖入我們的數據庫，
你或許應該改變你 密碼，可能是什麼意思？
>> 嗯，一，可能意味著 公司一直比較魯鈍，
並已存儲你的密碼 在這樣的專欄，未加密的。
這意味著對手， 誰偷了數據庫，
從字面上知道您 用戶名和密碼。
這是最差的情況。
正如你會在P-集看 七，所以容易避免。
絕對沒有任何藉口了 愚蠢的在今天的網絡形式。
Two--，我們會發現一些文章 作證的事實，這仍然
情況發生，nonetheless-- 二，也許是對手
偷了這個版本的數據庫。
這仍然是有種不好的，因為現在 他們知道，我有六個客戶，
我知道用戶名 這六個客戶，
我知道的加密 版本，或散列版本，
的那六個客戶的密碼。
但是，任何你誰可能 做了[？黑客2？]
在那裡你破解密碼，或把 一看那個版本的問題
集，為什麼還是有點令人擔憂 如果攻擊者知道你的哈希
密碼？
>> 聽眾：因為他們可以 進入整個字典
入散列函數。
如果你的密碼是一個字典 一句話，[？他們可以match--？]
>> DAVID馬蘭：沒錯，對手 可以只寫代碼，就像你們中的一些
沒有為[？黑客？] 2， 因此你遍歷
所有的在字典中的詞語， A或所有可能的組合
到Z和一個通過nine-- 這聽起來好像很多，它是。
但對於一台電腦， 這是相當不錯的快。
而事實上，這是 點[嗎？黑客2，η]為
取東西， 從字面上看起來像這樣，
和反向工程 它實際上是什麼。
>> 因此，我們將看看我們如何能夠 更有效地存儲這一點。
事實證明，幸運的是在MySQL中， 那裡將是數據類型。
而有趣的部分約一個 數據庫設計，說實話，
實際上是決定自己 你應該如何表示數據？
如果您代表電話號碼 一個int，像一個巨大的數字，或長？
或者你真正做到這一點 作為一個字符序列？
並且可以有很 這種非平凡的影響。
>> 事實上，人們的 最早的，好玩的鍺的故事
是當馬克·扎克伯格正在建設 Facebook的，它最初寫成，
仍然主要是用PHP寫的。
而其中最大的挑戰之一 他們早早就被縮放面對。
當他們不停地之後加入學校 學校放學後，據我所知，
原始的解決方案之一 基本上是複製和粘貼
一些數據庫的 和一些代碼，
使哈佛 其自己的服務器上運行，
麻省理工學院在自己的服務器上運行。
這就是為什麼，對於一些 你們誰可能還記得，
你可以沒有朋友 在其它網絡。
>> 你可能根本不具備的朋友 麻省理工學院或哈佛10年前左右，
但你不能跨越網絡 對於部分的原因。
而對的最大挑戰之一 馬克和Facebook這樣的公司
實際上是處理數百 和千千萬萬
每秒請求。
所以這個事情我們將開始 說起這個星期
真的會是有密切關係的 編寫好的軟件和普遍
成功的工具， 能夠處理大量的用戶。
>> 因此，我們將討論有關事項 像索引和搜索，
但它是今天。
我們會看到你更多的週三。
>> [MUSIC - “宋飛正傳”的主題]
DAVID馬蘭：你可以 它，並減去它。
你不必堅持 一些預定量的存儲器。
那麼，什麼是將要叫什麼？
>> 揚聲器1：哦，這是怎麼回事？
揚聲器2：你是什麼意思？
他給一個講座。
DAVID馬蘭：我們可以用一個 函數調用的malloc到memory--
>> 揚聲器1：為什麼不是他的懷裡動？
>> 揚聲器2：嗯that's-- 你知道，這是正常的。
這就像他剛才 大香腸掛在那裡。
>> 揚聲器1：這是正常的？
>> 揚聲器2：是的，我想我們 只是假設他意外
取代他的除臭劑與強力膠。