2010-10-17 12 views
46

Tôi đã cố gắng hiểu ý nghĩa/mục đích chính xác của việc tải php làm mô-đun apache so với phần còn lại.mod_php vs cgi vs fast-cgi

Khi php được cài đặt làm mô-đun apache, điều gì xảy ra chính xác? Ví dụ, không đọc các tập tin php-ini xảy ra mỗi khi yêu cầu php đến hoặc khi các module php được tải một mình?

Trả lời

22

php.ini được đọc khi mô-đun PHP được tải trong cả mod_php, FastCGI và FPM. Trong chế độ CGI thông thường, tệp cấu hình phải được đọc trong thời gian chạy vì không có bất kỳ quy trình làm sẵn nào.

Tôi nghĩ rằng lợi thế thực sự duy nhất của việc chạy PHP như một mô-đun bên trong máy chủ web là cấu hình có thể dễ dàng hơn. Bạn nhận được hiệu năng tốt hơn nhiều khi bạn chạy nó trong chế độ FastCGI hoặc FPM và có thể sử dụng Apache hoặc ren (thay vì chia nhỏ) Apache, hoặc khi bạn có thể ném Apache hoàn toàn.

+0

Vì vậy, để cụ thể hơn, hãy nói Nếu tôi có một biến có thể được sử dụng bởi tất cả các yêu cầu. Nói cách khác, giả sử chúng ta phải làm cho trình thông dịch php tìm kiếm các tệp liên quan đến đường dẫn cerstain (/ home/user/documents). Tôi có thể lưu trữ/home/user/documents trong một cấu hình và tải nó một lần vào một số biến toàn cầu? Bằng cách này, nếu người dùng phát hành file_get_contents ("new.txt"), nó được dịch sang file_get_contents ("/ home/user/documents/new.txt") –

+0

Kiểm tra cài đặt PHP auto_prepend_file, nó sẽ cho bạn cơ hội để thêm vào PHP mã sẽ được chạy trước khi yêu cầu thực tế được phân tích cú pháp. bên trong tệp auto_prepended của bạn, sử dụng chdir() để thay đổi thư mục. Lưu ý rằng điều này sẽ chặn tất cả các hoạt động tệp, thậm chí bao gồm() và require()! –

+1

@Karthick: Tại sao trình thông dịch PHP lưu trữ thông tin đó? Đó là loại thông tin cho mã của bạn để làm phiền về. Khi bạn không cung cấp đường dẫn tuyệt đối cho một tệp, nó có vẻ liên quan đến tập lệnh đang được trình thông dịch PHP thực hiện. Và không, các phiên bản thông dịch PHP khác nhau không thể và không được chia sẻ dữ liệu giữa chúng. – Anand

2

php.ini được đọc khi mô-đun được tải trong trường hợp mô-đun Apache. PHP CGI sử dụng một trình thông dịch php thực thi giống như bất kỳ kịch bản lệnh shell nào khác sẽ làm. Vì không có trạng thái nào liên quan đến mỗi lời gọi, tệp cấu hình sẽ phải được đọc từng lần trong trường hợp CGI.

+0

Vui lòng đọc nhận xét tôi vừa đăng lên câu trả lời khác. Xem Nếu bạn có thể có được một! –