DOUG LLOYD: Vì vậy, trong chúng tôi video trên PHP cú pháp, chúng tôi nói chuyện rất nhiều về cách PHP có thể được sử dụng tại các dòng lệnh để chạy các chương trình trong một cách mà chúng tôi đang khá quen thuộc với từ C. Nhưng như tôi cũng đã đề cập trong đó video, PHP bước đầu đã được phát triển để thực hiện lập trình web, các trang web. Và như vậy trong video này chúng tôi sẽ nói về cách chúng tôi sử dụng PHP trong bối cảnh phát triển web. Chúng tôi biết, đã có, từ video của chúng tôi trên HTML, rằng các trang web được xây dựng ra một tập hợp các thẻ HTML mà ngữ nghĩa xác định cấu trúc của một trang web. Nhưng các trang web mà được xây dựng với tinh khiết HTML bị một rất, hạn chế rất nghiêm trọng. Và để minh họa cho sự hạn chế này, chúng ta hãy xem xét những điều sau đây. Vì vậy, bây giờ tôi muốn xây dựng một trang web rằng, bất cứ khi nào người dùng truy cập nó, nó mang lại cho tôi hiện nay Hiện tại Cambridge, Mass., hiển thị nó cho phút mới nhất. Nếu tôi đã làm điều này ngay bây giờ, Tôi có thể nói một cái gì đó như thế này. Thời gian hiện tại trong Cambridge-- vì vậy tôi có Thẻ HTML, thẻ đầu, thẻ tiêu đề, cơ thể tags-- hiện nay Hiện tại là 14:08 Cambridge, in ra thời gian quân sự. Điều gì xảy ra nếu nó bây giờ 02:09, 14:09? Vâng cho đến nay, với HTML, tôi có đi vào và thay đổi nó để 14:09. Và sau đó một phút sau, Tôi phải thay đổi nó một lần nữa. Và sau đó một phút sau, Tôi phải thay đổi nó một lần nữa. Và như bạn có thể tưởng tượng, đó là có lẽ là công việc tồi tệ nhất bao giờ hết. Bạn là người quản trị trang web cho một trang web, và mỗi phút, 24 giờ một ngày, bạn cần phải cập nhật thời điểm hiện tại tự mở time.html và thay đổi Chỉ là đoạn mã để nói thời gian hiện tại trong giờ và phút. Đó có lẽ không phải là một rất sử dụng tốt các nguồn lực của chúng tôi, cả con người và tính toán. Các trang web có tất cả HTML là hoàn toàn tĩnh. Cách duy nhất bạn có thể cập nhật nội dung, như chúng ta đã thấy, là để tự mở những nguồn các tập tin, chỉnh sửa, và lưu chúng. Và sau đó khi người dùng làm mới trang, hoặc thăm trang để là người đầu tiên thời gian, họ sẽ nhận được những nội dung mới nhất. Nhưng chỉ vì chúng tôi đã tự chỉnh sửa nó. Nếu chúng ta bắt đầu kết hợp một số PHP trong đó, mã của chúng tôi có thể nhận được rất nhiều linh hoạt hơn. Và chúng ta có thể có một cách để trang của chúng tôi phải năng động, hoặc tự cập nhật, mà không yêu cầu người nghèo của chúng tôi webmaster trong các ví dụ trước để được tự cập nhật mọi thứ. Họ có thể làm điều đó tự động. Chúng tôi không cần phải can thiệp. Chúng tôi có thể nhận được một số giấc ngủ. Mà có lẽ là một điều tốt nếu bạn đang làm rất nhiều về lập trình web. Vì vậy, trong CS50 IDE, chúng tôi chạy một máy chủ web được gọi là Apache. Đó là một rất thường được sử dụng, mã nguồn mở hệ thống máy chủ web. Hệ thống này có năng lực để giải thích PHP, đó là sẽ có ích nếu bạn muốn làm bất kỳ lập trình PHP. Và trong CS50 IDE, chúng tôi có một lệnh để thực hiện điều này rất dễ dàng để làm, apache50 bắt đầu. Và sau đó là dấu gạch chéo con đường, dấu gạch chéo để, dấu gạch chéo dir, đó chỉ là một cách thực sự phổ biến của chỉ ra những gì bạn đã quy định ở đây là một đường dẫn đến một đặc biệt thư mục mà bạn muốn là người gốc trang web, hoặc các trang gốc, hoặc thư mục mà từ đó máy chủ web của bạn sẽ bắt đầu kiểm tra các tập tin và phục vụ họ lên các khách hàng yêu cầu họ. Vì vậy, hãy bật hơn để CS50 IDE, chỉ để cho bạn thấy, thực sự nhanh chóng, cách làm việc này. Vì vậy, ở đây trong CS50 IDE, tôi đang ở trong một thư mục gọi là Tuần Zero, Nine. Và tôi có two-- Tôi có thực thi một lệnh LS chỉ ở trên để cho bạn thấy rằng tôi có hai thư mục ở đây, PHP, đó là tập hợp các tập tin mà tôi được sử dụng trong video cú pháp PHP, và sau đó PHP-web, đó là tập hợp các tập tin mà tôi muốn sử dụng trong video này. Và tôi muốn bắt đầu một ví dụ máy chủ web với các nội dung của thư mục PHP-web như các tập tin đang được phục vụ lên. Vì vậy, những gì tôi sẽ làm gì? Tôi sẽ gõ apache50 gian bắt đầu, không gian PHP, dash web. Đó là con đường dẫn đến thư mục từ nơi tôi hiện nay. Sau đó tôi nhấn Enter. Nó sẽ làm một chút chút về công cụ ở đây. Và sau đó nó sẽ nói, Apache bắt đầu thành công. Trang web của bạn bây giờ đã có at-- và sau đó có các URL cho trang web. Vì vậy, những gì tôi sẽ làm gì? Tôi sẽ nhanh chóng sao chép này. Và tôi sẽ mở up-- và Tôi sẽ phóng to ra một chút here-- Tôi sẽ mở ra một tab mới trong Chrome. Và tôi sẽ đến thăm URL đó. Tôi sẽ nhấn Enter. Nó sẽ load. Và tôi sẽ thu nhỏ lại. Và chúng ta có thể thấy ở đây là nội dung của thư mục web PHP của tôi. Vì vậy, bây giờ những gì là cơ bản xảy ra ở đây là, ví dụ của tôi về CS50 IDE đang phục vụ lên các tập tin này ai yêu cầu chúng. Và trong quá trình video này, chúng tôi sẽ sắp xếp của hãy nhìn vào một bó của các tập tin khác nhau trong ngữ cảnh. Để kiểm tra rằng Apache của bạn máy chủ đang làm việc, mà nói chung là đi là trường hợp trong CS50 IDE, nhưng nếu bạn làm điều này nói chung, và bạn bắt đầu xây dựng trang web riêng của bạn máy chủ, có một thực sự loại phổ biến của tương tự để, "hello world", mà thường là được sử dụng để phát triển web PHP. Mà là để có một tập tin chỉ bao gồm các code-- này một dấu phân cách PHP thiết với thông tin PHP, dấu ngoặc đơn, dấu chấm phẩy ở giữa. Mà về cơ bản là một đặc biệt PHP chức năng đó cho bạn những phiên bản của PHP bạn đang chạy. Vì vậy, trong CS50 IDE, tôi có file có sẵn chỉ để cho bạn thấy những điều này sẽ như thế nào. Vì vậy, tôi đang nhìn vào chỉ số của tôi từ ví dụ PHP của tôi. Ví dụ Apache của tôi đang chạy các nội dung của PHP-Web. Và tôi có một tập tin ở đây được gọi là info.php. Tôi sẽ bấm vào nó, thu nhỏ. Đây là những gì bạn đang đi để xem, khá nhiều. Đây chỉ là nói cho tôi rằng máy chủ Apache của tôi đang làm việc. Và đây là, rõ ràng, phiên bản của PHP rằng tôi đang chạy. Điều này là tương tự của tôi để "hello thế giới." Vì vậy, tôi biết mọi thứ đang hoạt động. Vì vậy, chúng tôi đang tốt để đi. Chúng tôi có thể tiến hành từ đây. Vì vậy, chúng ta hãy xem lại mà thời gian ví dụ chúng tôi nói về với webmaster nghèo của chúng tôi người đã phải cập nhật các trang liên tục. Đây có thể là một sửa chữa cho cách Tôi sẽ thực hiện những điều để các webmaster không phải tiếp tục cập nhật thời gian. Nó sẽ chỉ là loại xảy ra tự động. Các xuống bên dưới, HTML, nó khá giống nhau, với một ngoại lệ. Nhưng ở đây tôi đã có một số PHP ở đầu trang. Tôi đã, rõ ràng, gọi này chức năng date_default_timezone_set. Và chúng tôi không nói về tất cả các chức năng này trong CS50, vì PHP có lẽ Mười nghìn đồng. Đó có thể là một chút của một cường điệu, nhưng nó không thể được. Nó có rất nhiều chức năng được xây dựng trong. Và vì vậy đây là một chức năng rõ ràng đặt múi giờ của tôi là Mỹ / Đông, đó là múi giờ mà tôi hiện tại làm cho video này. Sau đó, tôi thực hiện một cuộc gọi đến chức năng gọi, ngày tháng. Và, rõ ràng, tôi đang lưu trữ HIS của một cái gì đó gọi là, thời gian. Vì vậy, những gì đang xảy ra ở đây? Vâng, về cơ bản những gì xảy ra là, tôi đang làm cho một cuộc gọi một số máy chủ có nghĩa là sẽ cho tôi biết những gì thời gian hiện tại là. Và tôi là chuyển đổi nó sang định dạng giờ, phút, giây. Và lý do nó vốn là H này là sẽ cho tôi thời gian 24 giờ, không phải 12 Hiện giờ, đó sẽ là chữ thường h. Và tôi chỉ cần lưu trữ đó trong một biến gọi, thời gian. Vì vậy, dòng thứ hai của PHP ở đó, các cuộc gọi đến các chức năng, ngày, chỉ là nhận được một số chuỗi, đó là sẽ đưa cho tôi ngày đó, và các thời gian, và một loạt các thông tin khác. Và các đối số đầu tiên ở đó, mà HIS, được chỉ trích các phần quan trọng mà tôi quan tâm cho ví dụ này, đó là giờ, phút và giây. Vì vậy, đó là tất cả những gì đang xảy ra. Vì vậy, tôi lưu trữ trong một thời gian biến $. Và sau đó xuống rất đáy ở đó, tôi có mà viết tắt cho in ra thời gian hiện tại. Vì vậy, tôi chỉ cần đi để in ra những gì thời gian hiện tại là. Vì vậy, chúng ta hãy nhìn vào điều này trong CS50 IDE và xem cách chúng tôi bây giờ tiết kiệm webmaster rằng rất nhiều rắc rối. Tất cả các quyền, do đó tôi lại ngồi đây lại ở thư mục gốc thẩm Apache của tôi. Và tôi có một tập tin ở đây được gọi là time.php. Tôi chỉ cần đi để bấm vào đó. Và tôi sẽ di chuyển lên, bởi vì chúng tôi đang thu nhỏ trong khá xa. Thời gian hiện tại là 14:20:34. Vì vậy, tôi đang làm nó giờ, phút và giây. Và tôi có thể làm mới trang và có được thời gian mới. --41. Tôi sẽ làm mới trang và có được thời gian mới, 44, 46, 47. Vì vậy, tôi không rõ thay đổi bất cứ điều gì bản thân mình. Tôi đang ở đây làm mới trang. Vì vậy, tôi không thể qua lại có chỉnh sửa nó. Và tôi hứa với các bạn, tôi không có bất kỳ confederates người đang chỉnh sửa các tập tin thay mặt cho tôi bên cạnh. Tôi chỉ sử dụng mà chức năng PHP, thời gian, để tạo ra thời gian cho tôi tự động. Vì vậy mà ngay cả khi tôi đang ngủ, và máy chủ web của tôi đang chạy, người sử dụng những người thăm trang đó vẫn là sẽ nhận được chính xác thời gian hiện tại. Vì vậy, đó là khá tốt. Tôi đã thực hiện trang web của tôi năng động hơn với không quá nhiều code PHP. Đó chỉ là hai dòng mã và sau đó một chút của một lệnh in. Và đã được tôi có một trang web nhiều năng động hơn hơn so với ví dụ đầu tiên chúng ta đã thấy ở đầu video. Vì vậy, nhớ lại từ video về cú pháp PHP rằng khi các thông dịch viên PHP chạy Chương trình của chúng tôi, nó bỏ qua tất cả mọi thứ đó không phải là ký tự phân cách bên trong của PHP, nhổ ra. Trong ví dụ này, những gì các điều rằng nó đã được phun ra là HTML. Và điều này có nghĩa là tôi có thể bây giờ vãi ra HTML và PHP với nhau. Bởi vì các phiên dịch viên sẽ chỉ bỏ qua HTML và nghĩa đen đầu ra nó. Đó là tốt, phải không? Bởi lẽ, cuối ngày, Tôi muốn trang web của tôi để được xây dựng bằng HTML. Vì vậy mà bất kỳ trình duyệt web có thể giải thích nó, hoặc hiểu HTML trên trang và làm cho nó như là một cái gì đó mà chúng ta thực sự có thể hiểu như con người. Và tôi chỉ có thể sử dụng PHP cho các bộ phận của trang web của tôi các yêu cầu năng động, yêu cầu tôi để có những điều mà cập nhật liên tục. Các thông tin tĩnh có thể ở lại cùng. OK, vì vậy đó là tốt. Nhưng tại sao tôi làm điều này? Tại sao tôi sẽ trộn HTML và PHP? Tôi chỉ có thể in ra tất cả các HTML, cách sử dụng chức năng PHP in. Tại sao tôi không làm điều đó? Hãy suy nghĩ về nó cho một thứ hai. Tại sao, khi tôi chỉ có thể in out-- tôi có thể có dòng PHP mà chỉ nói, tag HTML in, đầu in. Tại sao tôi không làm điều đó? Tại sao tôi trộn PHP và HTML? Vâng, nếu bạn nghĩ về nó cho một thứ hai. PHP, các thông dịch viên có để giải thích những gì nó thấy. Và do đó, nó sẽ có để thực thi một dòng mã. In ra HTML. In thẻ đầu mở. In thẻ tiêu đề mở. Nó sẽ phải thực hiện và giải thích rằng mỗi bước của con đường. Tại sao không chỉ cho các thông dịch viên chỉ che đậy điều nó không hiểu và làm điều đó tự động? Nó sẽ tiết kiệm cho tôi rất nhiều thời gian để trộn HTML của tôi và PHP tôi lại với nhau. Và đó là lý do tại sao chúng ta không làm chỉ có mở PHP delimiter và sau đó chỉ cần in ra toàn bộ nội dung của các trang của chúng tôi là một trong PHP khổng lồ gọi đến chức năng, in, và sau đó gần PHP delimiter và chúng tôi đang thực hiện. Vì vậy, đó là lý do tại sao chúng ta trộn lẫn chúng với nhau. Cho đến nay, chúng tôi đã không nhìn thấy quá nhiều một sự khác biệt từ cú pháp PHP nói chung. Đó là khá đơn giản. Chúng ta đã thấy các dấu hỏi, bình đẳng. Chúng tôi đã nhìn thấy một vài cuộc gọi chức năng mới, nhưng không thực sự ưa thích xảy ra. Hãy làm những điều có thể một chút fancier. Điều gì nếu chúng tôi muốn truyền thông tin giữa các file PHP khác nhau, vì vậy mà có lẽ người dùng có thể gửi thông tin cho tôi. Và sau đó tôi có thể làm điều gì đó với nó trên một trang khác. Vì vậy, PHP đã hỗ trợ cho một cái gì đó gọi là Super toàn cầu Biến, mà âm thanh khá tuyệt vời. Họ thực sự chỉ mảng kết hợp khổng lồ mà có thể giúp thực hiện điều này chức năng của qua thông tin giữa các file PHP đang tồn tại trên máy chủ web của chúng tôi. Việc đầu tiên của những siêu globals được gọi là $ _GET. Và nó có thể là đơn giản nhất để hiểu. Điều gì xảy ra với $ _GET? Vâng, về cơ bản, người dùng sẽ gõ thêm thông tin vào cuối URL của chúng ta. Và bất cứ điều gì họ gõ, giả sử nó được định dạng trong một cách đặc biệt được gọi là một chuỗi truy vấn, mà chỉ là một tập hợp các cặp giá trị tách bằng ký hiệu. Những cặp giá trị sẽ được được lưu trữ trong một mảng kết hợp $ _GET. Và từ video của chúng tôi trên PHP cú pháp, chúng ta biết làm thế nào để làm việc với mảng kết đã. Vì vậy, đây là một ví dụ về một số PHP, nơi mà có lẽ tôi là nén tất cả các cặp giá trị mà người sử dụng được cung cấp trong các URL. Vì vậy, tôi có mở PHP delimiter của tôi. Tôi có một vòng lặp foreach. Tôi lặp qua Super Mảng toàn cầu được gọi là $ _GET. Và tôi muốn để có thể tham khảo để cả chìa khóa và giá trị. Và tôi chỉ in chúng ra, mỗi cái trên dường tag đoạn riêng của mình ở đây. Tôi in ra một số HTML và nội suy các giá trị các khóa và giá trị vào câu nói đó. Vì vậy, chúng ta hãy xem làm thế nào đây thực sự sẽ làm việc trên IDE của chúng tôi. Và có lẽ điều này sẽ giúp minh họa một chút về những gì đang thực sự làm GET. Vì vậy, tôi trở lại đây trong thư mục gốc web của tôi. Và tôi sẽ phóng to một chút ít để cho thấy bạn rằng tôi có một tập tin tên, get1.php. Vì vậy, hãy click vào get1.php. Và tôi không thấy bất kỳ nội dung. Đó là lạ, phải không? Vâng, không thực sự thực sự. Bởi vì tôi đã không cung cấp bất cứ điều gì trong URL. Tôi sẽ get1.php, nhưng tôi không cung cấp bất kỳ cặp giá trị như là một phần của chuỗi truy vấn của tôi. Vì vậy, hãy thêm một chuỗi truy vấn và xem những tập tin này có thể làm. Để bắt đầu một chuỗi truy vấn bạn chỉ cần gõ dấu hỏi. Sau đó, có lẽ tôi sẽ nói tên = Doug & năm = 2015. Và sau đó tôi sẽ nhấn Enter. Bây giờ thông báo những gì đang xảy ra. Tôi vẫn đang trong get1.php. Nhưng bây giờ tôi đã cung cấp cặp giá trị quan trọng, và tôi in chúng ra trên riêng của họ Tên paragraph--, năm Doug--, 2015. Đó chính là đoạn mã chúng ta chỉ thấy trên slide một chút thời gian trước đây. Và nếu tôi muốn có thêm một cặp giá trị quan trọng, và class = CS50. Bây giờ tôi có một giá trị quan trọng cặp đó được in ra khi tôi xem lại các URL một lần nữa. Bây giờ có lẽ đây không phải là định dạng khủng khiếp tốt. Vì vậy, tôi có một phiên bản khác của get.php. Đó là get2.php. Sự khác biệt ở đây một là tôi có tập tin CSS, và nó định dạng thứ một ít độc đáo hơn cho tôi. Đó có lẽ không phải là nhất CSS đẹp trên thế giới. Nhưng nó chỉ là một cách khác để làm việc đó. Vì vậy, tôi vẫn có thể truy cập cho các biến của tôi bằng cách sử dụng $ _GET. Và trong trường hợp này, tôi chỉ là loại làm cho CSS một chút ưa thích hơn. Và nếu chúng ta bật qua IDE của tôi cho một thứ hai, Tôi sẽ chỉ cho bạn trong web PHP của tôi thư mục ở đây, get2.php. Chúng tôi sẽ mở nó lên, một số mã HTML ở đây. Rõ ràng tôi đang liên kết trong đó File CSS Tôi đã nói về. Tôi mở một thẻ bảng. Và sau đó ở đây là vòng lặp foreach của tôi. Ở đây là, những gì tôi thấy trên slide trước. Sự khác biệt duy nhất là tôi có chìa khóa này và giá trị CSS tạo kiểu tóc mà tôi đang áp dụng với nó. Nhưng đó là tất cả tôi đang làm, là tôi iterating qua $ _GET để có được tất cả của các cặp giá trị quan trọng. Và tôi in ra như bảng. Và, rõ ràng, tôi đang định dạng các phím trong một cách, với