2010-01-09 29 views
17

Chúng ta đều đã thấy nhiều câu hỏi về StackOverflow được thành lập dựa trên ý tưởng rằng PHP hoạt động như Javascript. Trong trường hợp người đó hiểu rõ ràng rằng PHP là Nhà cung cấp trước và chỉ hoạt động trước khi trang được gửi đi.Tại sao kịch bản PHP không phải là workig trong một trình duyệt web?

Ví dụ rõ ràng về điều này là trong mã sau, trong đó runCommand() sẽ không chạy khi người dùng nhấn nút.

<a href="<?php runCommand(); ?>">Click Me!</a> 

vì nó sẽ trong Javascript

<a href="javascript:runCommand();">Click Me!</a> 

Tôi đã nhìn thấy rất nhiều câu hỏi như thế này mà là từ những người mới mà chỉ đơn giản là không nhận ra 'cách' PHP hoạt động.

Câu hỏi của tôi là: Tài nguyên tuyệt vời giải thích cách PHP hoạt động?.

Tôi muốn có thể chuyển hướng mọi người đến trang có thể giúp họ tiếp tục đúng tuyến đường và biết phương tiện tiền tố Preproccessor là gì.

(Điều này cũng cho phép tôi được lười biếng và không phải viết một lời giải thích mỗi khi nó đi lên, nhưng đừng nói cho ai biết!)

Nếu bạn không biết về một nơi mà mô tả điều này tốt, cảm thấy tự do để cung cấp giải thích của riêng bạn.

Carl Smotricz chỉ ra, có một phần của PHP có thể được sử dụng bên ngoài trình duyệt. Nhưng tôi chủ yếu nói về một môi trường Apache nơi một người dùng yêu cầu một trang web, và hy vọng sẽ lấy lại được thứ gì đó, thường là trong HTML.

+12

Sự khác biệt đơn giản hơn thế. PHP được thực thi phía máy chủ, JavaScript được thực thi phía máy khách. –

+0

PHP hoặc Preprocessor? Googling Preprocessor hoặc PHP sẽ cung cấp cho bạn những gì bạn cần. –

+0

@Christopher: Có nhưng thường người mới bắt đầu không hiểu điểm đó. –

Trả lời

28

Wikipedia luôn là nguồn thông tin tuyệt vời.Tôi đề nghị:

Server-side scripting

vs

Client-side scripting


Và Wikipedia cũng has pictures:

enter image description here

+0

Thêm vào đó (đó là trường học cũ CGI 'ngày, nhưng có thể là một chính tốt cho một số): http://www.garshol.priv.no/download/text/http-tut.html – micahwittman

+0

+1 cho câu trả lời đơn giản cho câu hỏi đơn giản;) – Strae

+1

Cũng quan trọng là JS trong DOM là sự kiện dựa trên, so với kiểu lô của PHP. Điều này cũng không kém phần quan trọng vì sao ví dụ JS hoạt động như thế nào, và tôi ngạc nhiên không ai khác ở đây đã bình luận về điều đó. – JAL

2

Mã PHP được giải thích ở phía máy chủ chỉ một đầu ra của mã PHP của bạn sẽ được gửi cho khách hàng.

Vì vậy, nếu tệp PHP được yêu cầu, máy chủ web sẽ gửi mã PHP tới trình thông dịch PHP, đợi đầu ra và sau đó gửi đầu ra trở lại máy khách.

+0

Ồ, tôi có thể có một mẫu HTML với "mã phía sau" không? Tôi tìm hiểu asp.net, html và mã phía sau là trên "trang" khác nhau: x – CodeGuru

11

Có thể bạn là người không hiểu PHP hoạt động như thế nào. PHP là một trình thông dịch ngôn ngữ đầy đủ, và hoàn toàn có thể chạy các kịch bản lệnh PHP mà không cần trình duyệt, bên ngoài một máy chủ Web: Trên dòng lệnh hoặc trong một môi trường IDE hoặc GUI khác.

Trình tiền xử lý PHP mà bạn nói chỉ là chức năng của mô-đun Apache gọi trên trình thông dịch PHP cho mục đích giới hạn cụ thể này.

+0

Hầu hết các câu hỏi tôi liên quan đến nó trong việc sử dụng với một máy chủ web. Tôi đã xác định rằng trong câu hỏi. –

+1

Trong khi điều này là đúng, ngữ cảnh mà 99,9% của tất cả các cuộc thảo luận PHP phát triển xung quanh là kịch bản phía máy chủ. Kịch bản phía máy chủ, sau khi tất cả, những gì PHP được thiết kế cho. Giả sử rằng PHP == kịch bản phía máy chủ theo mặc định là rất thực tế. – kusma

+0

Tôi đồng ý, phần tiền xử lý có phần hơi lỗi thời tại thời điểm này và chủ yếu là trong tên để làm cho từ viết tắt hoạt động. – JAL

0

php trả lời các yêu cầu http trong kịch bản phía máy chủ điển hình. trình duyệt đọc phản hồi này và chịu trách nhiệm hiển thị nó và chạy bất kỳ tập lệnh động bổ sung nào được nhúng trong phản hồi ở phía máy khách. đó là cơ bản phân chia lao động trong kịch bản đó.

1

Một khác biệt quan trọng là JavaSc ript trong một trình duyệt là sự kiện điều khiển. Đó là lý do tại sao trình xử lý nhấp chuột không được thực thi ngay lập tức khi trang tải. Các javascript không thể chờ đợi để đáp ứng với nhấp chuột đó, hoặc, nếu nó không phải là cho sự kiện theo định hướng phong cách lập trình dom.

Tôi không thực sự nghĩ đây là ý nghĩa của thuật ngữ 'tiền xử lý'. sự phân biệt phía máy khách/máy chủ là quan trọng hơn. Ví dụ, bạn có nghe nói về bất kỳ ngôn ngữ phía máy chủ nào khác được gọi là tiền xử lý khi thực hiện các tác vụ giống như PHP không?

2

Tóm lại, PHP thuộc về máy chủ, nó thường xuất ra HTML nhưng không có ở đây cho điều đó (hoặc ít nhất, không chỉ cho điều đó). Trình duyệt người dùng "nhìn thấy" chỉ những gì còn lại sau php đã làm điều đó.

Javascript thuộc về ứng dụng khách (còn gọi là trình duyệt): nó thường xử lý DOM được tạo bằng cách phân tích cú pháp HTML, có thể được tạo ra bằng cách thực thi PHP. Javascript có thể hoạt động khác nhau trong các trình duyệt khác nhau (tất cả những người viết kịch bản JS biết về các vấn đề liên quan đến trình duyệt, bạn có nhớ IE6 không?) Javascript không thể tự mình xử lý cơ sở dữ liệu; Nó phải dựa vào ngôn ngữ phía máy chủ (php, có thể?;) (Ngoại trừ nếu nói về node.js)

BTW, AJAX có thể là một tham chiếu tốt để hiểu chính xác PHP đang làm gì và JS làm gì.

0

PHP là ngôn ngữ kịch bản phía máy chủ có nghĩa là tất cả mã php được thực thi trước khi trang được gửi đến phía máy khách. Vì lý do đó bạn sẽ không bao giờ thấy

<?php ... ?> 

trong nguồn trang.

Trên mức trừu tượng cao ... Bạn có thể xem xét máy chủ web (phần cứng) là thành phần của bốn phần khác nhau. Webserver (phần mềm, ví dụ Apache), File system, database và PHP plugin. Vì vậy, ví dụ như khi bạn gửi yêu cầu trang (cho một số trang .../example.php) đến máy chủ web Apache sẽ cố gắng tìm trang đó trong hệ thống tệp và nếu trang tồn tại, anh ta sẽ gọi php plugin để thực thi tất cả

<?php ... ?> 

mã (tất nhiên bao gồm các truy vấn db). Sau khi trang đó được gửi trả lại cho phía khách hàng, nơi bạn có thể thao tác với trang thông qua JavaScript, thiết kế nó thông qua CSS ...

Thông tin thêm về: https://www.youtube.com/watch?v=PemsuAfc7Jw

+0

Nói chung, PHP KHÔNG CHỈ LÀ ngôn ngữ kịch bản lệnh SERVER-SIDE. Vui lòng đọc phần http://stackoverflow.com/tags/php/info, "hỗ trợ SAPI". – doc

0

Lý do tại sao kịch bản PHP không làm việc trong một trình duyệt web là chỉ vì trình duyệt web không hỗ trợ PHP (ít nhất tôi không biết bất kỳ). Thực tế này không phải là tầm thường như người ta có thể nghĩ.

Và điều này nghe có vẻ đáng lo ngại, vì vậy hãy xem thông số kỹ thuật HTML trên trang web W3C của HTML 5HTML 4.01 (vì nó có nhiều ví dụ tiết hơn). Những gì bạn có thể tìm thấy? Các tập lệnh đó có thể được viết bằng các ngôn ngữ khác ngoài JavaScript!

Đây là ví dụ từ tài liệu HTML 4.01 (phần có tiêu đề Specifying the scripting language).


(...)

Dưới đây là một handler cửa sổ thú vị hơn:

<SCRIPT type="text/javascript"> 
     function my_onload() { 
     . . . 
     } 

     var win = window.open("some/other/URI") 
     if (win) win.onload = my_onload 
</SCRIPT> 

Trong Tcl này trông giống như:

<SCRIPT type="text/tcl"> 
    proc my_onload {} { 
     . . . 
    } 
    set win [window open "some/other/URI"] 
    if {$win != ""} { 
     $win onload my_onload 
    } 
</SCRIPT> 

Script viết bằng Tcl hoàn toàn ổn trong HTML! Còn PHP thì sao? HTML5 documentation nói:

Một user agent được cho là hỗ trợ các ngôn ngữ kịch bản nếu mỗi thành phần loại khối kịch bản là một ASCII case-insensitive phù hợp cho các thành phần tương ứng trong chuỗi kiểu MIME của một ngôn ngữ scripting mà tác nhân người dùng triển khai. (...) Tác nhân người dùng có thể hỗ trợ các loại MIME khác cho các ngôn ngữ khác, nhưng không được hỗ trợ các loại MIME khác cho các ngôn ngữ trong danh sách ở trên. Tác nhân người dùng không bắt buộc phải hỗ trợ các ngôn ngữ được liệt kê ở trên.

Do đó, nó chỉ cập nhật trình duyệt web (tác nhân người dùng) nếu nó hỗ trợ PHP hay không. Chơi với ví dụ W3C, trình duyệt web nhận thức PHP có thể đã chấp nhận một cái gì đó như thế này.

<script type="text/php"> 
     function my_onload() { 
     . . . 
     } 

     $win = $window->open('some/other/URI'); 
     if ($win !== false) 
      $win->onload = 'my_onload'; 
</script> 

Vì vậy, lý do mọi người đặt câu hỏi như vậy không phải là họ không biết PHP hoạt động như thế nào. Đó là bởi vì họ không hiểu công nghệ web nói chung. Họ thất bại tại điểm, đòi hỏi sự hiểu biết về những gì, ở đâu và tại sao được cho là sẽ được thực thi.

Các vấn đề liên quan