2009-07-29 30 views
7

OB_start của PHP có thể được gọi nhiều hơn sau đó một lần không?OB_start của PHP có thể được gọi nhiều hơn sau đó một lần không?

Xin lỗi nếu đây là câu hỏi ngớ ngẩn nhưng tôi thực sự không biết.

Trang web của tôi thực sự lớn (số lượng tệp), mạng xã hội và một trong các tệp được bao gồm sử dụng bộ đệm đầu ra của PHP cho một thứ gì đó, tôi không phải người khác đã bắt đầu trang web của tôi từ lâu và bây giờ của tôi, tôi cần phải nhìn vào nó nhiều hơn để xem những gì nó làm chính xác.

Dù sao tôi cũng muốn sử dụng ob_start ("ob_gzhandler"); để nén các tệp CSS và tất cả các tệp trên trang web của tôi được tải (bao gồm) thông qua tệp chỉ mục vì vậy tôi muốn biết liệu tôi có thể sử dụng tệp đó ngay cả khi nó đã được sử dụng ở đâu đó trong mã không?

Trả lời

15

Có, bạn có thể gọi nó nhiều lần. Nó tạo ra một bộ đệm mới mỗi lần tuy nhiên, vì vậy hãy cẩn thận.

Từ manual: "Bộ đệm đầu ra có thể xếp chồng được, tức là bạn có thể gọi hàm ob_start() trong khi ob_start() khác đang hoạt động. Chỉ cần đảm bảo rằng bạn gọi hàm ob_end_flush() với số lần thích hợp. chức năng đang hoạt động, đầu ra được lọc tuần tự thông qua mỗi trong số chúng theo thứ tự lồng nhau. "

+0

Cảm ơn và như tôi đã đề cập đến nó đã được gọi là trong kịch bản của tôi, tôi cần phải theo dõi và xem nếu ob_end_flush() thậm chí còn được gọi là, nếu nó không phải là điều này sẽ gây ra? – JasonDavis

+0

Ai biết được, có thể đã thử nó. –

+1

Bộ đệm đầu ra được xóa sạch ở cuối thực thi tập lệnh nếu bạn không tự làm với 'ob_flush()' hoặc 'ob_end_flush()'. Tuy nhiên, nếu bạn có nhiều bộ đệm lồng nhau và bạn mong muốn xử lý nội dung của chúng theo một thứ tự cụ thể, thì bạn có thể thấy đầu ra lạ. – zombat

2

Bạn nói điều này:

Tôi muốn sử dụng ob_start ("ob_gzhandler"); để nén CSS file

Tôi thà phục vụ và nén JS/CSS (tốt, tĩnh) file là công việc của máy chủ Web (tức là Apache), chứ không phải PHP.

Về điều đó, bạn có thể có một cái nhìn tại mod_deflate - ít nhất, nếu bạn đang sử dụng Apache 2.

tất cả các tập tin trên trang web của tôi có được nạp (bao gồm) thông qua các tập tin index

Điều đó có thực sự cần thiết không? Bạn đang làm việc với PHP không có lý do rõ ràng (?), Theo cách đó.
(Lưu ý rằng ngay cả khi tệp CSS/JS được phân phối qua PHP, Apache sẽ có thể nén chúng với mod_deflate; tương tự cũng đúng đối với HTML, JSON, ...btw)

Một ưu điểm khác của việc không đi qua PHP để máy chủ các tập tin là nó sẽ dễ dàng hơn để có được họ phục vụ bởi máy chủ khác, như trang web của bạn sẽ phát triển (nếu nó phát triển đủ, trên thực tế):

  • bạn có thể có một loạt các "máy chủ PHP", để xử lý các trang PHP
  • và một hoặc hai "máy chủ tệp tĩnh", chỉ với CSS/JS/hình ảnh của máy chủ và làm nhẹ tải hoặc "máy chủ ứng dụng" của bạn ; không cần PHP cho những cái này; bạn cũng có thể sử dụng giống như lighttpd thay vì Apache


Điều đó đang được nói, ob_start nói điều này:

bộ đệm đầu ra là stackable, có nghĩa là, bạn có thể gọi ob_start() trong khi người khác ob_start() đang hoạt động. Chỉ cần đảm bảo mà bạn gọi ob_end_flush() số thích hợp. Nếu nhiều chức năng gọi lại đầu ra là hoạt động, đầu ra đang được lọc tuần tự qua từng lệnh trong số thứ tự lồng nhau.

Vì vậy, tôi nghĩ rằng câu trả lời cho câu hỏi của bạn là "có" :-)

+0

Cảm ơn thông tin và vâng tôi có kế hoạch sử dụng lighthttpd cho hình ảnh cuối cùng như để bao gồm các tập tin thông qua chỉ mục của tôi, tôi làm điều này; $ pageId ['account.profile.settingsBETA'] = 'member/account.profile.settingsBETA.php'; nó làm cho nó dễ dàng cho tôi để theo dõi tất cả các trang, rất nhiều trang web làm điều này, nó không phải là tốt? – JasonDavis

+0

Chỉ mục cơ bản bao gồm tệp tiêu đề, sau đó bao gồm nội dung từ những gì tôi đã đăng ở trên, sau đó bao gồm chân trang – JasonDavis

+0

OK về điều đó đối với tệp PHP; nhưng bạn đang làm nó cũng cho các tập tin CSS? (hoặc tôi không hiểu những gì bạn nói lần đầu) –

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