2012-02-16 38 views
21

Một câu hỏi rất cơ bản cho bạn. Tôi chỉ tìm thấy hai tập tin thực thi php-cgi.exephp.exe trong thư mục bin của máy chủ WAMP trên máy tính xách tay của tôi. Tôi đang học PHP và không thể tìm ra sự khác biệt. Sự khác nhau giữa chúng là gì?Sự khác nhau giữa php cli và php cgi là gì?

+1

bản sao có thể có của [Sự khác biệt giữa việc thực thi php từ dòng lệnh và từ bên Http] (http://stackoverflow.com/questions/3016281/difference-between-executing-php-from-the-commandline-and-from -e-http-side) – mario

+0

@mario làm thế nào để bạn tìm thấy bản sao? Tôi không thể tìm thấy bất kỳ bản sao nào. – user1208865

Trả lời

15

PHP CLI là giao diện dòng lệnh cho PHP (ví dụ như để tạo các ứng dụng độc lập)
PHP CGI là giao diện phổ biến cửa ngõ cho PHP (ví dụ cho các ứng dụng web)

+18

và PHP là Php Hypertext Preprocessor. Đó có thực sự là câu trả lời không ?! Tôi không nghĩ như vậy – Trix

4

CLI là cho các kịch bản dòng lệnh, CGI dành cho các yêu cầu web

13

php-cgi dành cho máy chủ web. Trong số những thứ khác, nó xử lý các tiêu đề HTTP cho bạn.

Phiên bản CLI được thiết kế để chạy trên dòng lệnh (do đó "Giao diện dòng lệnh"). Điều này không xử lý tiêu đề, hoặc bất kỳ điều gì khác liên quan đến máy chủ.

3

php-cli có nghĩa là để chạy PHP trên dòng lệnh. php-cgi thực hiện những điều bổ sung cho bạn, chẳng hạn như tiêu đề HTTP và các sửa đổi bảo mật nhất định.

Có nói rằng, hãy xem xét cài đặt mô-đun FastCGI và sử dụng PHP's FastCGI interface. Điều này sẽ chạy PHP nhanh hơn đáng kể so với php-cgi. Tôi tin rằng mô-đun FastCGI chuẩn của Apache là mod_fcgid.

28

Từ http://www.php-cli.com/php-cli-cgi.shtml

Đây là những khác biệt quan trọng nhất giữa CLI và CGI:

  • Khác với SAPI CGI, CLI viết không có tiêu đề để đầu ra theo mặc định
  • Có một số php.ini các chỉ thị bị ghi đè bởi CLI SAPI vì chúng không có ý nghĩa trong môi trường vỏ:
    • html_errors: CLI mặc định là FALSE
    • implicit_flush: CLI mặc định là TRUE
    • max_execution_time: CLI mặc định là 0 (không giới hạn)
    • register_argc_argv: CLI mặc định là TRUE
  • Bạn có thể có đối số dòng lệnh với tập lệnh của mình! Biến số "$ argc" cung cấp cho bạn một số đối số được chuyển đến ứng dụng . Và mảng "$ argv" cung cấp cho bạn một mảng đối số thực tế
  • Có 3 hằng số mới được xác định cho môi trường vỏ: STDIN, STDOUT, STDERR. Tất cả chúng đều là các trình xử lý tệp cho các thiết bị trình bao tương ứng . Ví dụ STDIN là trình xử lý cho fopen ('php: // stdin', 'r'). Vì vậy, bạn có thể đọc một dòng từ STDIN như điều này: $ strLine = trim (fgets (STDIN)) ;. STDIN đã được xác định cho bạn bằng PHP CLI!
  • PHP CLI không thay đổi thư mục hiện tại thành thư mục của tập lệnh được thực hiện.Thư mục hiện tại cho tập lệnh sẽ là thư mục nơi bạn gõ lệnh PHP CLI.
  • Có một số tùy chọn có sẵn cho PHP CLI. Điều này sẽ cho phép bạn nhận một số thông tin có giá trị về thiết lập php của bạn, tập lệnh php hoặc chạy tập lệnh ở các chế độ khác nhau.
  • Trong PHP 5 có một số thay đổi trong tên tệp CLI và CGI. Trong PHP 5, phiên bản CGI đã được đổi tên thành php-cgi.exe (trước đây là php.exe) và phiên bản CLI hiện nằm trong thư mục chính (trước đây là cli/php.exe).
  • Trong PHP 5, nó cũng được giới thiệu một chế độ mới: php-win.exe. Đây là bằng phiên bản CLI, ngoại trừ việc php-win không xuất ra bất cứ điều gì và do đó không cung cấp bàn điều khiển (không có "hộp dos" xuất hiện trên màn hình). Hành vi này tương tự như PHP GTK.
+0

Xin chào, bạn có biết nó có thời gian chờ không? Ý tôi là nếu cần chạy một tập lệnh quá dài để chạy. Nó là một lựa chọn tốt để chạy trên CLI? –

+1

Có, chắc chắn. Trong CLI max_execution_time: mặc định là 0 (không giới hạn). –

6

này có thể cung cấp cho bạn một sự hiểu biết rộng hơn về sự khác biệt của họ:

CGI: (giao diện cổng chung) Đây là một đặc điểm kỹ thuật "giao thức" để chuyển thông tin giữa các máy chủ Web và một chương trình CGI .

Chương trình CGI là bất kỳ chương trình nào được thiết kế để chấp nhận và trả lại dữ liệu phù hợp với đặc điểm kỹ thuật CGI.

Về cơ bản đó là cách để chạy tập lệnh phía máy chủ (PHP, Perl, Python, ...) khi có yêu cầu HTTP.

CGI rất chậm so với các lựa chọn thay thế khác.


FastCGI: là CGI tốt hơn.

CGI nhanh là một cách tiếp cận khác với kết quả nhanh hơn nhiều.

Đây là CGI chỉ với một vài tiện ích mở rộng.

Triển khai FastCGI không còn khả dụng nữa, có lợi cho PHP-FPM.


PHP-FPM: (FastCGI Process Manager), đó là một thực hiện FastCGI tốt hơn so với FastCGI cũ.

Nó hoạt động như một máy chủ FastCGI độc lập.

Nói chung nó là giao diện PHP cho các máy chủ web (Apache, Nginx ..) để cho phép Máy chủ Web tương tác với PHP.

Không giống như PHP-CLI là giao diện dòng lệnh cho PHP để cho phép Người dùng tương tác với PHP qua thiết bị đầu cuối.


mod_php: một module Apache để chạy PHP.

Nó thực thi các tập lệnh PHP bên trong Máy chủ Web trực tiếp như một phần của máy chủ web mà không cần liên lạc với chương trình CGI.


mod_SuPHP: cũng tương tự như mod_php nhưng có thể thay đổi người dùng/nhóm rằng quá trình chạy dưới.

Về cơ bản nó giải quyết một số vấn đề của mod_php liên quan đến quyền.

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