2010-09-14 20 views
12

Tôi là nhà phát triển Java và C#, và tôi thừa nhận, tôi không giỏi về PHP.Làm cách nào để lưu dữ liệu trong phạm vi ứng dụng trong PHP?

Tôi cần lưu trữ một đối tượng trong phạm vi ứng dụng, miễn là bản thân ứng dụng đang chạy. Tôi không thể lưu nó trong phiên, bởi vì nó hết hạn, tôi cũng không thể serialize nó vào đĩa.

Có điều gì giống như đối tượng C# Application trong PHP không?

+0

Hãy lưu ý rằng không giống như trong Java (và có thể trong C#), mã PHP không tồn tại bên ngoài yêu cầu trang. Bạn sẽ phải tự lưu trữ nó và lấy nó ở đâu đó cho mỗi trang - tuy nhiên, điều này có thể dễ dàng đặt bên trong khung công tác của bạn để tạo hiệu ứng cho rằng nó "luôn sẵn sàng". – staticsan

Trả lời

17

2018 Chỉnh sửa: Thời gian có không đối xử tốt với APC, đặc biệt là kể từ PHP 7 bao gồm hỗ trợ đóng gói cho Zend Optimizer +, mà không phần lớn là điều tương tự (trừ phím-store). Những ngày này, khía cạnh cửa hàng chính đã được chia thành the APCu project.

Tuy nhiên, vào năm 2018, cửa hàng khóa ưa thích được chọn là Redis. Xem chi tiết ext-redis project.


PHP có phạm vi ứng dụng. nó được gọi là APC (Alternative PHP Cache).

dữ liệu nên được lưu trữ trong APC nếu đáp ứng các tiêu chí sau:

  1. Nó không phải là người sử dụng phiên cụ thể (nếu như vậy, đặt trong $ _SESSION [])
  2. Nó không phải là thực sự dài hạn (nếu như vậy, sử dụng hệ thống tập tin)
  3. nó chỉ là cần thiết trên một máy chủ PHP (nếu không, hãy xem xét sử dụng memcached)
  4. bạn muốn nó có sẵn cho mỗi trang của trang web của bạn, ngay lập tức, thậm chí khác (phi liên quan) các chương trình PHP.
  5. Bạn không nhớ rằng tất cả dữ liệu được lưu trữ trong đó sẽ bị mất khi tải lại/khởi động lại Apache.
  6. Bạn muốn truy cập dữ liệu nhanh hơn nhiều so với dựa trên tệp, dựa trên cơ sở dữ liệu hoặc (esp.).

APC đã được cài đặt trên nhiều máy chủ tuyệt vời rồi, nhưng hãy làm theo hướng dẫn trên đã được cài đặt trên hộp của bạn. Sau đó, bạn làm như sau:

if (apc_exists('app:app_level_data') !== false) 
{ 
    $data = apc_get('app:app_level_data'); 
} 
else 
{ 
    $data = getFromDB('foo'); 
    apc_store('app:app_level_data', $data); 
} 
+4

Đó là apc_fetch, không phải apc_get, tôi nghĩ ... – raoulsson

+0

@raoulsson, bạn nói đúng, trả lời đã chỉnh sửa. – daVe

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